<分区>
如果您通过 jdwp/socket 启用远程调试启动 java 进程并且没有外部进程连接,是否会影响性能?我知道当有一个远程客户端实际调试时会有很大的影响,但如果我只是在特定端口上声明 jdwp,它本身会减慢应用程序吗?任何指向文档的链接将不胜感激。
<分区>
如果您通过 jdwp/socket 启用远程调试启动 java 进程并且没有外部进程连接,是否会影响性能?我知道当有一个远程客户端实际调试时会有很大的影响,但如果我只是在特定端口上声明 jdwp,它本身会减慢应用程序吗?任何指向文档的链接将不胜感激。
最佳答案
不会,只要没有外部进程连接,仅启用调试端口不会影响运行时性能。
JDWP 是用于调试器和它调试的 Java 虚拟机 (VM) 之间通信的协议(protocol)。 JDWP 是可选的。
JDWP 启动 - 建立传输连接后,发送任何数据包之前,连接两端之间发生握手:
握手过程有以下步骤:
在 Java SE 1.4 中,Java HotSpot 虚拟机现在使用“全速调试”
在以前版本的 HotSpot 中,启用调试时,程序仅使用解释器执行。现在,HotSpot 技术的全部性能优势可用于在启用调试的情况下运行的程序。改进的性能使长时间运行的程序更容易调试。它还允许测试全速进行,并允许在出现异常时启动调试器:
有关 JDWP 增强功能的更多详细信息,请参阅 http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp-spec.html
关于Java远程调试——性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39467222/