相关疑难解决方法(0)

在调试模式下运行JVM的副作用

我想在调试模式下重新发布Java应用程序,以便在客户端随机或难以重现问题时更容易调试.

但是,我想要了解这样做的潜在副作用?从Java HotSpot文档中可以看出,应该没有性能损失.

从链接

全速调试

Java HotSpot VM现在使用全速调试.在以前版本的VM中,启用调试时,程序仅使用解释程序执行.现在,即使使用已编译的代码,HotSpot技术的全部性能优势也可用于程序.性能的提高使得长时间运行的程序更容易调试.它还允许测试以全速进行.一旦出现异常,调试器就会启动代码源的完全可见性.

这是准确的还是有隐藏的警告,内存占用情况如何,使用调试模式时还有其他隐藏的问题.

PS:我发现AMD的这篇文章证实了我最初的怀疑,即oricale的原始文章没有显示完整的故事.

debugging jvm release-management

23
推荐指数
2
解决办法
5113
查看次数

Java应用程序是否会因为-Xdebug的存在而减慢或仅在单步执行时降低速度?

我意识到在调试器中运行时Java代码会变慢.

问题是,通过使用以下选项启动Java,代码是否会变慢:

Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n
Run Code Online (Sandbox Code Playgroud)

??

或者只有当您连接到"调试端口"并使用IDE实际执行代码时才会发生减速?

java debugging

22
推荐指数
2
解决办法
6525
查看次数

如何确保不会发生jvm和编译器优化

我有这个代码正在测试Calendar.getInstance().getTimeInMillis()vs System.currentTimeMilli():

long before = getTimeInMilli();
for (int i = 0; i < TIMES_TO_ITERATE; i++)
{
  long before1 = getTimeInMilli();
  doSomeReallyHardWork();
  long after1 = getTimeInMilli();
}
long after = getTimeInMilli();
System.out.println(getClass().getSimpleName() + " total is " + (after - before));
Run Code Online (Sandbox Code Playgroud)

我想确保没有JVM或编译器优化发生,因此测试将是有效的并且实际上会显示出差异.

怎么样?

编辑:我改变了代码示例,以便更清楚.我在这里检查的是在不同的实现中调用getTimeInMilli()需要多长时间 - Calendar vs System.

java compiler-construction optimization jvm

17
推荐指数
2
解决办法
1万
查看次数