Java垃圾回收

2019-08-08  本文已影响0人  LeoFranz

Part 3 垃圾回收

3.1 垃圾回收机制

对象在内存中的三种状态:
可达状态——有变量引用;
可恢复状态——无变量引用;
不可达状态——无变量引用,且系统调用finalize()方法后仍然不能让对象变成可达状态。只有这种状态的对象会被回收。

强制垃圾回收:

System.gc();
或
Runtime.getRuntime().gc();

上述方法,虚拟机会尽最大努力实现,并不百分百可靠。
tip:java -verbose:gc 类名
该指令能看到每次垃圾回收后的提示信息

finalize()方法:

强制调用finalize():

Runtime.getRuntime().runFinalization();
System.runFinalization();

和强制GC一样,虚拟机会尽最大努力实现,并不百分百可靠。如果要确保资源回收,建议使用try finally

一般来说强制垃圾回收时需要调用如下组合:

System.gc();
System.runFinalization();
3.2对象的软、弱和虚引用

*tips:
1.程序可以检查与虚引用关联的引用队列中是否包含了该虚引用,从而了解该虚引用所指的对象是否即将被回收;

2.tip:如果要测试引用,创建字符串对象时,要用String str = new String("测试字符串"), 不能使用 String str = " 测试字符串"; 后者会被系统直接使用常量池来管理这个字符串直接量(也是强引用),但不会被垃圾回收机制回收。

3.如果要使用特殊引用类的特性,就不要保留对象的强引用。*

上一篇 下一篇

猜你喜欢

热点阅读