在调用声明为的Java方法时,JVM运行时必须执行的常规步骤是native什么?
HotSpot 1.8.0 JVM如何实现JNI函数调用?涉及哪些检查步骤(例如返回后未处理的异常?),JVM要执行哪些簿记(例如本地参考注册表?),以及在调用本机Java方法后控制在哪里?如果有人可以提供本机HotSpot 1.8.0代码的入口点或重要方法,我也将不胜感激.
免责声明:我知道我可以自己阅读代码,但事先的解释有助于快速找到我的代码.此外,我发现这个问题值得谷歌搜索.;)
我正在使用-Xlog:safepoint+stats=debug:file=safepoint.log vm 参数在JDK12上运行应用程序以记录安全点操作并使用 ZGC 运行。我有理解日志输出的问题:
[1408.417s][debug][safepoint,stats] vmop [ threads: total initially_running wait_to_block ][ time: spin block sync cleanup vmop ] page_trap_count
[1412.164s][debug][safepoint,stats] 1412.162: ZOperation [ 376 0 7 ][ 0 0 0 0 1 ] 7
[1413.164s][debug][safepoint,stats] 1413.164: None [ 376 0 0 ][ 0 0 0 0 0 ] 0
[1414.165s][debug][safepoint,stats] 1414.164: None [ 376 0 1 ][ 0 0 0 0 0 ] 1
Run Code Online (Sandbox Code Playgroud)
我知道第一行告诉 ZOperation 花费了 1 毫秒,并且有 7 个线程参与了阻塞。
我不明白第二行,什么是“None” vmop 操作?看起来那个操作的持续时间是 …
我正在使用-XX:+PrintGCApplicationStoppedTime和-XX:+PrintGCApplicationConcurrentTime选项打开gc日志记录.
但发现只有PrintGCApplicationStoppedTime经过-XX:+PrintGCDetails命令打印的gc日志的4 0r 5打印后我的实际细节!
根据定义,PrintGCApplicationStoppedTime打印应用程序停止每个gc的时间.
但我不清楚为什么它打印如下所示的例子.
是因为
PrintGCApplicationStoppedTime 只需在每个安全点到达后打印
(要么)
日志文件将由不同的gc线程记录.我使用Concurrent扫描完整的GC和年轻一代的ParNew
我的应用是web应用程序.
O/p模式 - 我是这样的:
Application time: 0.3847031 seconds
Total time for which application threads were stopped: 0.3135419 seconds
Application time: 0.1520723 seconds
Total time for which application threads were stopped: 0.1993920 seconds
Application time: 0.1188219 seconds
Total time for which application threads were stopped: 0.1993920 seconds
Application time: 0.1188219 seconds
Total time for which application threads were stopped: 0.1993920 …Run Code Online (Sandbox Code Playgroud)