来自IBM:
-Xrs 禁用JVM中的信号处理。 -Xrs 设置-Xrs可以防止™运行时环境处理任何内部或外部生成的信号,如SIGSEGV和SIGABRT。引发的任何信号都由默认操作系统处理程序处理。根据应用程序的不同,JVM中的禁用信号处理会降低大约2-4%的性能。 -Xrs:sync 在UNIX系统上,此选项禁用用于SIGSEGV、SIGFPE、SIGBUS、SIGILL、SIGTRAP、andSIGABRT信号的JVM中的信号处理。但是,JVM仍然处理SIGQUIT和SIGTERM信号等。与-Xrs一样,使用-Xrs:sync将性能降低约2-4%,这取决于应用程序.。 注意:设置此选项可以防止JVM为SIGSEGV和SIGABRT等信号生成转储,因为JVM不再拦截这些信号。
7.0.0/com.ibm.java.aix.70.doc/diag/appendixes/cmdline/Xrs.html
据我所知,-Xrs实际上是用来防止在拦截某些OS信号时产生转储。
由于JVM不再拦截和处理这些信号,因此可以推断这将提高性能,而不是IBM声称的降低性能。
为什么-Xrs会降低性能?
发布于 2016-01-22 17:08:22
由于安全点和VM操作,以及如果允许JIT管理信号,JIT可以进行的其他优化。
JVM有时不得不执行一些操作,要求它在全局暂停执行(“停止世界”),例如某些大规模垃圾收集、热重新加载或内部重新编译类等等。为了做到这一点,它必须确保所有正在运行的线程同时遇到障碍并暂停,执行操作,然后释放线程。
HotSpot (可能还有其他JVM)用于实现安全点的一种技术是巧妙地滥用了分段错误:它设置了一个内存页,实际上并不用于任何数据,然后每个线程都定期尝试从该页面读取数据。当不需要VM操作时,读取成功的开销非常低,线程只会继续运行。
当JVM确实需要执行VM操作时,它会使该内存页无效。下一次当每个线程碰到一个safepoint时,它现在会导致一个分段错误,它允许JVM重新控制该线程的执行;它一直保持到VM操作完成为止,重置哨兵页面,并重新启动所有线程。
当禁用SIGSEGV处理时,JVM必须使用其他技术来同步安全点,这些安全点比委托给处理器内置内存保护的效率要低。
此外,JVM在分析(本质上类似于CPU的分支预测器)时做了一些非常神奇的工作。它使用的优化之一是,如果它检测到某个null检查几乎从不为null,它将删除该检查,并依赖于分段错误(昂贵,但在这种情况下罕见)来捕获空。这种优化还需要自定义处理SIGSEGV。
发布于 2016-01-23 07:23:02
除了@chrylis中提到的安全点之外,故障处理程序还用于其他聪明的优化技巧,例如隐式空指针检查(至少它们位于热点上)。如果配置文件显示空检查代码路径很少被触发,那么它就会被优化,然后信号处理程序就会覆盖不太可能的情况。
如果不安装自定义信号处理程序,就无法执行这样的优化。
https://stackoverflow.com/questions/34951812
复制相似问题