《JVM G1源码分析和调优》 —3.4.2 外部调用的回收

举报
华章计算机 发表于 2019/12/20 13:55:34 2019/12/20
【摘要】 本节书摘来自华章计算机《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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。