目录
-
- 一、System.gc()的理解
- 二、内存溢出和内存泄漏
- [三、Stop the World](#三、Stop the World)
-
- [1、什么是 stop the word ?](#1、什么是 stop the word ?)
- 四、垃圾回收的并行和并发
- 五、安全点与安全区域
- 六、强引用(不可回收)
- [七、软引用(Soft Reference 内存不足即回收)](#七、软引用(Soft Reference 内存不足即回收))
- [八、弱引用(Weak Reference 发现即回收)](#八、弱引用(Weak Reference 发现即回收))
- [九、虚引用(Phantom Reference 对象回收跟踪)](#九、虚引用(Phantom Reference 对象回收跟踪))
- [十、终结器引用(Final Reference)](#十、终结器引用(Final Reference))
一、System.gc()的理解
显示触发FullGC
二、内存溢出和内存泄漏
Javadoc中对于OutOfMemoryError的解释是,没有空闲内存,并且垃圾收集器也无法提供更多的内存
2、内存泄漏
只有对象不再被应用程序使用到了,但是GC又不能回收他们的情况,才叫内存泄漏
三、Stop the World
1、什么是 stop the word ?
四、垃圾回收的并行和并发
1、并发和并发
2、垃圾回收的并行和并发
五、安全点与安全区域
1、什么是安全点?
程序执行的时并非在所有地方都能停顿下来开始GC,只有在特定的位置才能停顿下来开始GC,这些位置称为安全点(SafePoint)
SafePoint 的选择很重要
2、安全区域
安全区域是指在一段代码片段中,对象的引用关系不会发生变化,在这个区域中的任何位置开始GC都是安全的
六、强引用(不可回收)
七、软引用(Soft Reference 内存不足即回收)
软引用是用来描述一些还有用,但非必须的对象。
java
//创建对象,建立软引用
// SoftReference<User> userSoftRef = new SoftReference<User>(new User(1, "songhk"));
//上面的一行代码,等价于如下的三行代码
User u1 = new User(1,"songhk");
SoftReference<User> userSoftRef = new SoftReference<User>(u1);
u1 = null;//取消强引用
八、弱引用(Weak Reference 发现即回收)
弱引用也是用来描述那些非必需的对象,只被弱引用关联的对象只能生存到下一次垃圾收集发生为止
九、虚引用(Phantom Reference 对象回收跟踪)
也称为"幽灵引用"或者"幻影引用",是所有引用类型中最弱的一个
一个对象是否有虚引用的存在,完全不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它和没有引用几乎是一样的,随时可能被垃圾回收器回收。
为一个对象设置虚引用的唯一目的在于跟踪垃圾回收过程,比如:能在这个对象被收集器回收时收到一个系统通知