通常情况下都有Java虚拟机自动替你管理内存,但有些情况下一些类可能会自己去管理内存这就需要引起注意。
一种典型的情况是实现自己的对象容器如:stack、queue等时应注意处理不当可能引发OutOfMemoryError。
下面是JDK1.6中的ArrayList里面的几个方法。其中标注红色的几条语句就是应该注意的地方:因为ArrayList的底层实际上使用数组实现的,当你需要添加大量新对象进来时会不断扩大ArrayList的容量,同时可能也会需要删除一些对象,而数组包含了所有的对象引用,因此只要数组对象不释放,持有的这些引用所指向的对象对GC来说总是不可回收的。这样就会导致大量被删除的对象得不到释放,从而造成空间的浪费。尤其是在Stack或Queue等删除操作频繁的结构中,一旦将对象出栈应该立即将其引用设置为null,方便GC回收相应的对象。
public E remove(int index) {
RangeCheck(index);
modCount++;
E oldValue = (E) elementData[index];
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; // Let gc do its work
return oldValue;
}
/*
* Private remove method that skips bounds checking and does not
* return the value removed.
*/
private void fastRemove(int index) {
modCount++;
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; // Let gc do its work
}
/**
* Removes all of the elements from this list. The list will
* be empty after this call returns.
*/
public void clear() {
modCount++;
// Let gc do its work
for (int i = 0; i < size; i++)
elementData[i] = null;
size = 0;
}
分享到:
相关推荐
在Java中,引入了垃圾回收机制:垃圾回收器(Garbage Collector, GC),可以自动回收内存中的垃圾,这是Java语言相对于其它语言的优势,但是内存泄漏并不会因此而完全避免。 垃圾回收器的工作机制是,当一个对象...
### Java中内存泄露及垃圾回收机制 #### 一、内存泄露概述 在计算机科学领域,内存泄露是指在程序运行过程中,不再使用的内存未被及时释放,导致这部分内存无法被重复利用,进而影响程序性能甚至导致程序崩溃的...
### 如何解决Java内存泄漏 #### 1. 背景 Java凭借其垃圾回收机制大大简化了内存管理,使得开发者无需手动管理内存的释放,从而提升了开发效率。然而,这种自动化管理也可能成为一把双刃剑,特别是当开发人员忽视...
Java内存管理的核心是对象的生命周期,所有对象都在堆内存中分配。当一个对象不再被任何引用所指向,即成为无用对象时,理论上它应该被GC回收。GC通过建立一个有向图来跟踪对象的引用关系,其中根节点通常是程序的主...
如果DLL中分配了内存但未正确释放,或者Java和DLL之间对对象的引用处理不当,都可能导致内存泄露,使得Java进程的内存占用持续增长,影响系统性能。 描述中的“NULL”可能是博主在描述问题时的简化表示,通常在编程...
关于Java中内存泄露问题的研究
Java内存管理是开发Java应用程序时的关键环节,内存泄露和溢出问题可能导致系统性能下降,甚至导致服务崩溃。本文将深入探讨如何检测和分析Java内存泄露与溢出,并介绍一种常用的工具——Memory Analyzer(MAT)。 ...
本文将深入探讨Java内存泄露的原因、表现形式以及预防措施。 #### 二、Java内存回收机制 Java的内存管理机制主要依赖于垃圾回收器(Garbage Collection, GC),这是一种自动化的内存管理方式。当对象不再被引用时,...
Java内存泄漏是一个严重的问题,它会导致程序性能下降,甚至可能导致应用程序崩溃。为了有效地诊断和解决这类问题,开发者需要借助特定的分析工具。本篇将详细探讨Java内存泄漏及其相关的分析工具。 内存泄漏是指...
### Java内存泄漏解决方案详解 #### 一、Java内存泄漏概述 在Java开发过程中,经常会遇到内存泄漏的问题,尤其是在长时间运行的应用程序中更为常见。本文将详细介绍如何解决Java内存泄漏问题,帮助开发者更好地...
在Java中,由于具备垃圾回收机制(GC),理论上开发者不必担心内存泄露问题。然而,在实际应用中,仍然存在一些特殊情况会导致内存泄露的发生。 #### 二、内存泄露的原因分析 1. **未及时关闭资源**:例如文件句柄、...
Java内存管理是一个关键的议题,尤其对于开发大型和长期运行的应用程序来说,内存泄漏可能导致性能下降,甚至引发严重的系统故障。内存泄漏通常发生在程序错误地管理内存,导致某些不再使用的对象无法被垃圾收集器...
Java内存泄漏问题追踪 在Java编程中,内存泄漏是一个严重的问题,它会导致程序性能下降,甚至可能导致应用程序崩溃。内存泄漏是指程序在申请内存后,无法释放已不再使用的内存空间,随着时间推移,系统可用内存逐渐...
Java内存泄漏分析是一个关键的系统优化任务,尤其是在大型企业级应用中,长期运行的系统可能会因为内存泄漏导致性能下降甚至服务中断。"JAVA内存泄漏分析工具"正是一款用于解决此类问题的专业工具,它能帮助开发者...
### Java内存泄漏详解 #### JVM内存管理概览 在探讨Java内存泄漏之前,我们先简要回顾一下JVM(Java虚拟机)的基本架构及其内存管理机制。这有助于更好地理解内存泄漏的发生原因及其解决方法。 ##### 类装载子...
本文将深入探讨Java内存分析和内存泄露问题。 首先,我们需要了解Java内存模型的基础。Java内存主要分为三个区域:堆(Heap)、栈(Stack)和方法区(Method Area)。堆用于存储对象实例,栈用于存储方法调用及局部...
本文将详细介绍如何使用JMAP工具来定位Java代码中的内存泄漏问题。 首先,理解内存泄漏的概念:内存泄漏是指程序在申请内存后,无法释放已申请的内存空间,一次小的内存泄漏可能并不明显,但随着时间的推移,这些未...
与C++等语言不同,Java程序员不需要显式地释放内存,这大大减少了内存泄漏的可能性。 垃圾回收器通过一系列算法来判断哪些对象不再被程序使用。主要有以下几种判断标准: 1. 引用计数法:每个对象都有一个引用计数...
4. Native内存泄漏:Java应用可能使用JNI(Java Native Interface)与C/C++代码交互,若C/C++部分存在内存泄漏,也会间接导致Java内存泄漏。 解决内存泄漏的方法主要包括: 1. 使用工具监控:通过工具如VisualVM、...