《突破程序员基本功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

  • 压缩,解决内存碎片化的问题。将所有活对象搬迁到一起,收回之前占用的内存。

        不压缩

        复制,堆被分为两个相同空间,将所有可达的对象复制到另一块相同的内存中

猜你喜欢

转载自blog.csdn.net/ImSanJin/article/details/82496227
今日推荐