《突破程序员基本功16课》——内存回收
内存管理(内存分配、内存回收)
引用:
(1) 强引用,正常的对象赋值等,使对象处于可达状态,不可能被GC(系统垃圾回收机制)回收。
(2)软引用SoftReference,内存资源不紧张时,和强引用无异,内存资源稀缺时会自动被GC回收。
(3)弱引用WeekReference,任何情况下都会被GC回收。较之软引用, 所引用的对象生命周期更短,引用级别更低。
(4)虚引用PhantomReference,与引用队列ReferenceQueue一起使用,会被GC回收,可以通过回收队列来查看被回收状态,但无法访问被引用对象。
注意:使用软引用、弱引用、虚引用时,不能保留对应对象的强引用(引用对象不能被同时强引用),否则该类引用的作用将失效。
JAVA 内存泄漏:被引用对象处于可达状态,但后续未被使用。
垃圾回收机制
主要工作:监控java对象,对象不可达时,回收对象所占内存;
清理内存 分配、回收过程中产生的内存分配;
上述两项工作,工作量都不小,所以回收算法成为java运行效率的。
几种垃圾回收器的设计
-
串行回收Serial:不管多少个CPU,始终只用一个CPU运行执行回收操作。
并行回收parallel:将回收工作拆分分配到各CUP。执行效率较高,但复杂度增加,内存碎片增加等。
-
并发执行Concurrent
应用程序停止Stop-the-world
-
压缩,解决内存碎片化的问题。将所有活对象搬迁到一起,收回之前占用的内存。
不压缩
复制,堆被分为两个相同空间,将所有可达的对象复制到另一块相同的内存中