当前位置: 首页 > 面试题库 >

是-Xdebug的存在,还是仅在单步执行代码时,Java应用程序会变慢吗?

步兴德
2023-03-14
问题内容

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

问题是,是否可以通过使用以下选项启动Java来简化代码:

Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n

??

还是仅当您连接到“调试端口”并实际上使用IDE逐步执行代码时才会发生减速?


问题答案:

首先,要严格回答您的问题(至少如其标题所述),-Xdebug仅在5.0之前的JVM中使用JVMDI在 VM中启用调试支持
。因此,它本身并没有太大作用。此外,JVMDI是因为5.0不赞成赞成JVMTI:

- Xdebug的
启动与支持JVMDI启用。JVMDI已被弃用,在J2SE 5.0中不用于调试,因此在J2SE 5.0中调试时不需要此选项。

所以-Xdebug不再做任何事情,重要的部分是:

-Xrunjdwp:<name1>[=<value1>],<name2>[=<value2>]...

或者,从Java 5.0开始,较新的版本(您最好在5.0中作为JDWP代理使用该VM的JVM TI接口,而不是较旧的JVMDI接口):

--agentlib:jdwp=<name1>[=<value1>],<name2>[=<value2>]...

现在,据我所知,仅加载jwdp代理和/或配置JVM以侦听给定端口上的套接字连接不会对性能产生任何明显影响。但是连接调试器确实可以。



 类似资料:
  • 这是我不想检查的30行Java EE管道方法调用! 在单步执行一个方法时,跳过所有这些的唯一可靠方法是在下一个方法调用中放一个断点,然后点击“单步执行”而不是“单步执行”。然而,与简单的“一步进入”相比,一直这样设置断点是一个主要的麻烦。当我需要走出我正在检查的方法时,我必须重复同样的事情。 我了解Eclipse中的步骤过滤器,并尝试使用这些过滤器,但是一些自动生成的代理类被注入到我自己的包中,所

  • 问题内容: 标题几乎说明了一切……这是一个坏主意吗?我想要XDebug在服务器上提供的增强调试消息。 [编辑]只是为了使事情变得清楚。我知道其中涉及安全风险。也许我应该补充我的问题,并给出为什么要这样做的更确切的原因。 我们的生产服务器还托管一个测试平台。有时,我们使用它来在尽可能接近生产的环境中测试事物。我要寻找的主要东西是使用XDebug的Enhanced 。 这不是用于高流量应用程序的应用程

  • 问题内容: 是否可以以平台无关的方式使用Java应用程序的名称(而不是其位置)在单独的进程中加载​​Java应用程序? 我知道你可以通过…执行程序 …这种方法的主要问题是,此类调用是特定于平台的。 理想情况下,我会将方法包装成像…这样简单的东西。 …并以形式传入应用程序类的完全限定名称。 问题答案: 两个提示: 为你提供了Java可执行文件的路径。 帮助你重构当前应用程序的类路径。 然后你就是(伪

  • 问题内容: 我刚刚读了一个非常好的SO问题,询问“Docker和VM之间有什么区别?”。但是,被接受的答案让我只想要一点点。 我 有点 理解一个容器(Docker/LXC-我没什么不同),使用一种叫做AuFS的东西,以便数十,数百甚至数千个容器可以共享相同的CPU,RAM和磁盘资源。但是,答案仍然不能 完全 解释什么是“容器”! 容器只是这种运行的一个实例吗?它是使用的应用程序吗?Linuxy有点

  • 我刚刚读了一个很棒的SO问题,问“Docker和VM之间有什么区别?”。然而,被接受的答案让我只想再多一点。 我有点理解一个容器(Docker/lxc--我不明白其中的区别),它使用和AuFS,以便几十个、几百个、甚至数千个容器可以共享相同的CPU、RAM和磁盘资源。但是,答案仍然没有解释到底什么是“容器”! 容器只是运行的的一个实例吗?是使用的应用程序吗?它是不是像服务/守护进程这样的Linux