《JVM G1源码分析和调优》 —3.4.2 外部调用的回收
【摘要】 本节书摘来自华章计算机《JVM G1源码分析和调优》 一书中第3章,第3.4.2节,作者是彭成寒。
3.4.2 外部调用的回收
常见有两种外部调用情况可以激活垃圾回收:
外部显式调用system.gc触发。一般来说,如果我们没有设置DisableExplicitGC(默认为false),表示可以接受这个函数显式地触发GC。这个时候触发的GC都是Full GC,但是如果设置了ExplicitGCInvokesConcurrent,则表示可以进行并发的混合回收。
如果和JNI交互,JNI代码进入了临界区(比如JNI代码为了优化性能,提供了一个函数jni_GetPrimitiveArrayCritical/jni_GetStringCritical用于直接访问原始内存数据,但是为了保证安全必须使用GCLocker进行加锁。当加锁后发生了GC请求,此时GC会被延迟,直到GCLocker执行了unlock会重新补一个GC),而且设置了GCLockerInvokesConcurrent,则可以进行并发混合回收,如果没有设置则可能启动新生代回收。
实际上JVM还提供了WhiteBox API用于JVM内部测试,也可以执行GC,因此也会触发新生代回收、FGC等。
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)