JVM

  • 加载机制-双亲委派模式【1】:

对于任意一个类,都需要由加载它的类加载器和这个类本身来一同确立其在Java虚拟机中的唯一性。

双亲委派:如果一个类加载器收到了加载某个类的请求,则该类加载器并不会去加载该类,而是把这个请求委派给父类加载器,每一个层次的类加载器都是如此,因此所有的类加载请求最终都会传送到顶端的启动类加载器;只有当父类加载器在其搜索范围内无法找到所需的类,并将该结果反馈给子类加载器,子类加载器会尝试去自己加载。

 

  • 垃圾回收:

            新生代Survivor区的存在意义,就是减少被送到老年代的对象,进而减少Full GC的发生;设置两个Survivor区最大的好处就是解决了碎片化。【2】

回收过程:【3】

CMS收集器的优点:并发收集、低停顿;缺点:cpu敏感,浮动垃圾,空间碎片。【4】

G1:并行与并发、分代收集、空间整合、可预测的停顿。

ZGC【5】:

(1)着色指针:

着色指针
着色指针

 

(2)读屏障:在访问指针时加入Load Barrier(读屏障);

(3)并发处理:说的是应用线程与GC线程齐头并进,互不添堵;

(4)基于region:将堆划分为Region作为清理,移动,以及并行GC线程工作分配的单位,不同于G1,ZGC可以有2MB,32MB,N× 2MB 三种Size Groups,动态地创建和销毁Region,动态地决定Region的大小;

(5)内存压缩(整理):ZGC是Mark-Compact ,会将活着的对象都移动到另一个Region,整个回收掉原来的Region。

  • FullGC触发条件【6】:

1、老年代空间不足

2、持久代空间不足

3、YGC出现promotion failure

4、统计YGC发生时晋升到老年代的平均总大小大于老年代的空闲空间

5、显示调用System.gc(这里调用了 System.gc  并不一定会立马就触发FullGC)

  • 去除PermGen的好处【7】

1、将字符串常量池从PermGen分离出来,与类元数据分开,提升类元数据的独立性

2、将元数据从PermGen剥离出来到Metaspace,可以提升对元数据的管理同时提升GC效率。

在PermGen中元数据可能会随着每一次Full GC发生而进行移动。HotSpot虚拟机的每种类型的垃圾回收器都需要特殊处理PermGen中的元数据,分离出来以后可以简化Full GC以及对以后的并发隔离类元数据等方面进行优化。

3、为后续将HotSpot与JRockit合二为一做准备。

  • volatile可以解决什么问题?如何做到的?【8】

1、保证此变量对所有的线程的可见性;

2、禁止指令重排序优化。有volatile修饰的变量,赋值后多执行了一个“load addl $0x0, (%esp)”操作,这个操作相当于一个内存屏障(指令重排序时不能把后面的指令重排序到内存屏障之前的位置)。

 

 

 

【1】https://www.cnblogs.com/joemsu/p/9310226.html   《【JVM】浅谈双亲委派和破坏双亲委派》

【2】https://blog.csdn.net/antony9118/article/details/51425581   《为什么新生代内存需要有两个Survivor区》

【3】https://www.jianshu.com/p/0a5b26691b77   《CMS和G1的回收过程》

【4】https://blog.csdn.net/h2604396739/article/details/87709160   《jvm各种回收器,各自优缺点,重点CMS、G1》

【5】https://www.jianshu.com/p/60d9e125dcf3   《JDK11的ZGC - 学习笔记》

【6】https://blog.csdn.net/qq_28165595/article/details/82633308   《转MinorGC和FullGC的触发条件》

【7】https://segmentfault.com/a/1190000012577387   《聊聊jvm的PermGen与Metaspace》

【8】https://www.cnblogs.com/zhengbin/p/5654805.html#_label1   《Java中Volatile关键字详解》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值