堆内存逻辑分区(不适用不分代垃圾收集器)
jvm 内存空间
注意:
一个进程都有一套方法区和堆
一个线程都有一套Java虚拟机栈和程序计数器
各空间详解
指针碰撞
TLAB (指针碰撞的解决思路)
TLAB的全称是Thread Local Allocation Buffe,线程本地分配缓存区。
逃逸分析
标量替换
栈上分配
同步消除
对象创建过程,在jvm层面的内存分配;流程图
只要是分代模型,一定是成对出现,常见的组合有3种
jdk1.8可用分代模型,也可不用分代模型
Serial ( SWT)
属于单线程回收
会造成卡顿的现象,是因为业务线程被暂停,垃圾回收线程在工作。JVM调优应该极力避免的现象。
Parallel Scavenge
单线程回收不够的情况下,可以使用Parallel Scavenge,属于多线程回收
ParNew
为了配合CMS的使用,对Parallel Scavenge做了一些改进,就是ParNew
使用多个GC线程的复制收集器来自“ Parallel Scavenge”,因为它具有增强功能,可用于例如,“ ParNew”执行所需的同步,以便它可以在CMS的并发阶段运行。
CMS (concurrent mark sweep 并发标记清除)
工作线程与回收线程同时进行
594082957)]
CMS (concurrent mark sweep 并发标记清除)
[外链图片转存中…(img-uhhwJ9NO-1614594082957)]
工作线程与回收线程同时进行