JVM内存回收区域+对象存活的判断+引用类型+垃圾回收线程

2018-12-06  本文已影响0人  yijian2595

此文已由作者赵计刚薪授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。

注意:本文主要参考自《深入理解Java虚拟机(第二版)》

说明:查看本文之前,推荐先知道JVM内存结构,见《第一章 JVM内存结构

1、内存回收的区域

 

2、怎样判断对象是否存活

垃圾回收:回收掉死亡对象所占的内存。判断对象是否死亡,有两种方式:

 

3、3种引用类型

 

4、方法区的回收

注意:

 

5、垃圾回收线程

系统的垃圾回收是由垃圾回收线程来检测操作的,该线程是一个后台线程(daemon thread)。

5.1、后台线程与我们使用的前台线程而言,有一个特点:当JVM中的前台线程数量为0时,后台线程自动消亡。可以这样讲,后台线程依托于前台线程而存在。

5.2、垃圾回收线程为什么要设置成为后台线程呢?

我们想一下,当前台一个线程都没有时,垃圾还会有吗?或者说垃圾回收还有必要吗?答案是没有必要,所以此时垃圾回收线程也就失去了存活的意义。

所以可以这样讲,将一个线程是否设置为后台线程,就看这条线程在没有其他线程存在的情况下,是否还有存活的意义。

例如,在我们使用Apache mina2做RPC时,我们在消息的接收端直接开启一个后台线程启动服务来接受消息发送端发来的消息事件请求就可以。试着去想,如果在整个JVM中只有当前的这一个后台线程了,那么这个线程还有必要存活下来吗?当然没有必要,因为消息永远都不会再发送了(前台线程都没了)

 

免费领取验证码、内容安全、短信发送、直播点播体验包及云服务器等套餐

更多网易技术、产品、运营经验分享请点击

相关文章:
【推荐】 知物由学 | AI时代,那些黑客正在如何打磨他们的“利器”?(一)

上一篇 下一篇

猜你喜欢

热点阅读