java的清理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java的清理相关的知识,希望对你有一定的参考价值。
java的创建
java的作用域
作用域一般是最近的一个花括号内部 。出了作用域,该对象仍继续占据内存空间,但我们无法访问该对象
java的回收
1. 当一个对象离开了作用域或者为null时,java的垃圾回收机制会认为该对象可以回收(不一定回收)。
2. 垃圾回收器准备释放内存的时候,会先调用finalize(),并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。
3. System.gc()方法:该方法只是向垃圾回收器建议回收内存,不一定会真正回收内存。
test1:
public class TestClass { int flage = 0; TestClass(int flage){ System.out.println("new Object TestClass"); this.flage = flage; } @Override protected void finalize() { System.out.println("run this method:finalize() And this flag is " + flage); } public static void main(String[] args) { TestClass t = new TestClass(2); System.gc(); } }output:new Object TestClasstest2:
public class TestClass { int flage = 0; TestClass(int flage){ System.out.println("new Object TestClass"); this.flage = flage; } @Override protected void finalize() { System.out.println("run this method:finalize() And this flag is " + flage); } public static void main(String[] args) { TestClass t = new TestClass(2); t = null; System.gc(); } }output:new Object TestClass
run this method:finalize() And this flag is 2test3:
public class TestClass { int flage = 0; TestClass(int flage){ System.out.println("new Object TestClass"); this.flage = flage; } @Override protected void finalize() { System.out.println("run this method:finalize() And this flag is " + flage); } static void test(){ TestClass t = new TestClass(3); } public static void main(String[] args) { TestClass t = new TestClass(2); test(); System.gc(); } }output:new Object TestClass
new Object TestClass
run this method:finalize() And this flag is 3
垃圾回收机制触发的条件
JVM进行次GC的频率很高,但因为这种GC占用时间极短,所以对系统产生的影响不大。更值得关注的是主GC的触发条件,因为它对系统影响很明显。总的来说,有两个条件会触发主GC:
①当应用程序空闲时,即没有应用线程在运行时,GC会被调用。因为GC在优先级最低的线程中进行,所以当应用忙时,GC线程就不会被调用,但以下条件除外。
②Java堆内存不足时,GC会被调用。当应用线程在运行,并在运行过程中创建新对象,若这时内存空间不足,JVM就会强制地调用GC线程,以便回收内存用于新的分配。若GC一次之后仍不能满足内存分配的要求,JVM会再进行两次GC作进一步的尝试,若仍无法满足要求,则 JVM将报“out of memory”的错误,Java应用将停止。
由于是否进行主GC由JVM根据系统环境决定,而系统环境在不断的变化当中,所以主GC的运行具有不确定性,无法预计它何时必然出现,但可以确定的是对一个长期运行的应用来说,其主GC是反复进行的。
原理
先立一个flag在这里,等看了jvm后再写
reference
http://www.blogjava.net/wilesun/archive/2007/10/08/150955.html
以上是关于java的清理的主要内容,如果未能解决你的问题,请参考以下文章