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


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

查看所有标签

猜你喜欢:

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

Paradigms of Artificial Intelligence Programming

Paradigms of Artificial Intelligence Programming

Peter Norvig / Morgan Kaufmann / 1991-10-01 / USD 77.95

Paradigms of AI Programming is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-......一起来看看 《Paradigms of Artificial Intelligence Programming》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具