我使用以下选项运行G1垃圾收集器的Java程序:
-XX:-UseBiasedLocking
-XX:+UnlockExperimentalVMOptions
-XX:+UseG1GC
-verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:/var/tmp/gclog.out
Run Code Online (Sandbox Code Playgroud)
输出看起来像这样......
44900.297: [GC pause (young)44900.386 (initial-mark), 0.08894851 secs]
: [GC concurrent-mark-start]
[Parallel Time: 83.7 ms]
[GC Worker Start Time (ms): 44900297.6 44900297.6 44900297.6 44900297.6 44900297.6 44900297.7 44900297.7 44900297.7 44900297.7 44900297.7 44900297.7 44900297.7 44900297.7
Avg: 44900297.7, Min: 44900297.6, Max: 44900297.7, Diff: 0.1]
[Update RS (ms): 23.5 24.3 25.0 25.0 23.9 24.4 25.2 24.1 25.7 24.7 24.8 24.4 24.7
Avg: 24.6, Min: 23.5, Max: 25.7, Diff: 2.1]
[Processed Buffers : 16 19 19 23 …Run Code Online (Sandbox Code Playgroud) 我最近阅读了有关垃圾收集的部分内容(主要是在Java中),还有一个问题仍然没有答案:JVM(或一般的运行时系统)如何跟踪当前的活动对象?
我理解那里的对象是当前堆栈中的对象,所以所有的局部变量或函数参数都是ARE对象.这个问题的问题是每当运行时系统检查当前堆栈上的内容时,它如何区分引用变量和简单的int?它不能,可以吗?
因此,必须有某种机制允许运行时构建活动对象的初始列表以通过标记扫描阶段...