java static GC 回收问题
1)静态变量本身不会被回收
2)静态变量所引用的对象是可以回收的。
第一点大家应该没有疑问,下面我证明第2点:
看下面的例子及注释。自己可以运行试一下, 注意加上-verbose:gc参数
java -verbose:gc TestStaticGc
// TestStaticGc.java
public class TestStaticGc {
// ia是一个静态变量,在这里它作为一个int数组的引用。
static int[] ia = new int[1024 * 1024];
public static void main(String[] args) {
int i = 0;
// 为了清楚,我用了6次循环,每次都调用System.gc();
// 在第3次循环时,我把ia的引用设为null。
// 如果ia指向的对象能被回收的话,应该有明显的内存减少现象。
do {
if (3 == i++) {
ia = null;
System.out.println("release");
}
System.gc();
} while (i<6);
}
}
现在看结果:
---------- java ----------
// 前两次是每个应用初始化之后都要做的。
[GC 328K->162K(1984K), 0.0043279 secs]
[Full GC 162K->162K(1984K), 0.1501831 secs]
// 下面是调用System.gc()的结果
[Full GC 4267K->4258K(6084K), 0.0234695 secs] // i =&n
相关文档:
import java.util.Stack;
/**
* JAVA获得一个数组的指定长度的排列组合。<br>
*
* @author JAVA世纪网(java2000.net, laozizhu.com)
*/
public class TestSequenceAll {
public static void main(String[] args) {
TestSequenceAll t = new TestSequenceAll();
Ob ......
1)DOM(JAXP Crimson解析器)
DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找
特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被 ......
1 如果一块内存区域能够重复利用,最好不要申请新的。这个内存区域有可能是系统的一个类,自己的一个内部有数组元素,或者能够放大量数据的结构。
2 最好不要在循环里面申请内存,循环越大,越坏事。换句话说,申请内存频率别太高。好比一个人每顿吃两碗饭正好,身体的消化系统可以承受,如果让他一顿把十顿的都吃掉,不胀 ......
垃圾收集几乎是每个开发人员都喜爱的一个 Java™ 平台特性,它简化了开发,消除了所有种类的潜在代码错误。可尽管垃圾收集一般来说可以让您无需进行资源管理,有时候您还是必须自己进行一些内务处理。
显式地释放资源
Java 程序中使用的绝大多数资源都是对象,垃圾收集在清理对象方面做得很好。因此,您可以使用任 ......