parallell内存分配和垃圾回收

内存分配时,会尝试先去线程的私有区域(tlb)分,不够再去堆上分

内存分配

垃圾回收器 parallell源码

首先,大对象体积超过一定阈值时会直接进入老年代吗?

这个对于parNew是适用的,通过参数配置阈值。但parallel就一样的,它是从

yong_gen直接分配

年轻代:eden form to

老年代:

parallel的内存分配

//第一次从年轻代分配,分配成功返回Result,分配失败进行第二次

//第二次从年轻代分配,分配成功返回Result,分配失败尝试从老年代分配

//第二次从老年代分配,分配成功返回Result

//if(result == null) Vmthread:excute 垃圾回收内存了

//Paralllel:invoke() 先尝试yong gc

垃圾回收

jvm的vmthread主要职责是什么,和gc及Safepoint的关系是什么

vmthread的loop()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
loop(){
//死循环,等待其他操作唤醒
while(true){
// wait for vm operation

//......


//每隔1000ms就触发
if(VMthread:no_op_safepoint_needed(true)){
safepointSyn:begion() //暂停所有线程
safepointSyn:end()//恢复所有线程
}
}
}

begin:该标志位,通知其他线程暂停下来,而且得等所有线程都听下来,才能继续执行begin方法剩余的逻

内存不够了不一定会触发fullgc,而是会先根据你新生代回收是否成功以及老年代的大小来决定的

新生代的垃圾回收逻辑

yong gc不会stw?

只要执行 Vm:excute 就会stw