我想在调试模式下重新发布Java应用程序,以便在客户端随机或难以重现问题时更容易调试.
但是,我想要了解这样做的潜在副作用?从Java HotSpot文档中可以看出,应该没有性能损失.
从链接
全速调试
Java HotSpot VM现在使用全速调试.在以前版本的VM中,启用调试时,程序仅使用解释程序执行.现在,即使使用已编译的代码,HotSpot技术的全部性能优势也可用于程序.性能的提高使得长时间运行的程序更容易调试.它还允许测试以全速进行.一旦出现异常,调试器就会启动代码源的完全可见性.
这是准确的还是有隐藏的警告,内存占用情况如何,使用调试模式时还有其他隐藏的问题.
PS:我发现AMD的这篇文章证实了我最初的怀疑,即oricale的原始文章没有显示完整的故事.
通过调试器运行时,一些CPU密集型例程会显着变慢.为什么是这样?
目前我只是使用IntelliJ来逐步运行在JBoss中运行的代码.当我启动JBoss时,我使用以下选项:
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MaxPermSize=256m -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n %JAVA_OPTS%
Run Code Online (Sandbox Code Playgroud)
有没有办法加快执行速度?或者加速我不需要介入的某些方法执行?
更新:似乎我没有跨越/进入CPU密集型例程(即:只运行直到例程之后设置的断点),然后执行时间就好像不在调试器中.
我想知道-Xdebug标志引入的性能开销有多大?
调试生产应用程序非常方便,但我想一直停止运行会很昂贵吗?
另外,是否有一种很好的方法可以使已经运行的应用程序通过Debug端口进行监听,而无需重新启动它?
谢谢.