JVM 源码分析之 System.gc()

栏目: Java · 发布时间: 8年前

内容简介:JVM 源码分析之 System.gc()

System.gc() 是触发FGC最简单暴力的方式,在JDK源码中实际上是调用了 Runtime 的gc方法。

public static void gc() { Runtime.getRuntime().gc(); }

Runtime.gc 的底层实现位于 Runtime.c 文件中

JNIEXPORT void JNICALL Java_java_lang_Runtime_gc(JNIEnv *env, jobject this) { JVM_GC(); }

其中 JVM_GC() 的实现位于 jvm.cpp

JVM_ENTRY_NO_ENV(void, JVM_GC(void)) JVMWrapper("JVM_GC"); if (!DisableExplicitGC) { Universe::heap()->collect(GCCause::_java_lang_system_gc); } JVM_END

这里有一个 DisableExplicitGC 参数,默认是false,如果启动JVM时添加了参数 -XX:+DisableExplicitGC ,那么 JVM_GC 相当于一个空函数,并不会进行GC。

其中 Universe::heap() 返回当前堆对象,由collect方法开始执行GC,并设置当前触发GC的条件为 _java_lang_system_gc ,内部会根据GC条件执行不同逻辑。

JVM的具体堆实现,在 Universe.cpp 文件中的 initialize_heap() 由启动参数所设置的垃圾回收算法决定。

JVM 源码分析之 System.gc()

堆实现和回收算法对应关系:

1、UseParallelGC:ParallelScavengeHeap

2、UseG1GC:G1CollectedHeap

3、默认或者CMS:GenCollectedHeap


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

时间的朋友2018

时间的朋友2018

罗振宇 / 中信出版集团 / 2019-1

2018年,有点不一样。 从年头到现在,各种信息扑面而来。不管你怎么研判这些信息的深意,有一点是有共识的:2018,我们站在了一个时代的门槛上,陌生,崭新。就像一个少年长大了,有些艰困必须承当,有些道路只能独行。 用经济学家的话说,2018年,我们面对的是一次巨大的“不确定性”。 所谓“不确定性”,就是无法用过去的经验判断未来事情发生的概率。所以,此时轻言乐观、悲观,都没有什么意......一起来看看 《时间的朋友2018》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具