0 0

请问JVM远程调试的配置中为什么要配置-Djava.compiler=NONE5

一般的介绍如何配置远程调试的文章都有配这个:
-Djava.compiler=NONE 禁止JIT编译器的加载,
请问有高手可以告诉我为什么远程调试要禁止它的加载吗?
 
2012年10月09日 17:52

1个答案 按时间排序 按投票排序

0 0

为了加快debug的速度。

首先,需要了解JVM对字节码的编译技术。一个JAVA程序通过javac编译成字节码以后,在执行的时候,由JVM将字节码编译成本地机器码,然后再执行。将字节码转换成
机器码,JVM有两种利器,一种就是JIT,还有一种是转译器(interpreter)。

1>转译器

转译器将每个Java指令都转译成对等的微处理器指令,并根据转译后的指令先后次序依序执行,由于一个Java指令可能被转译成十几或数十几个对等的微处理器指令,这种模式执行的速度相当缓慢。

2>JIT

针对转译器的速度瓶颈,出现了JIT。JIT针对一个具体的class进行编译,经过编译后的程序,被优化成相当精简的原生型指令码(native code)。但是,JIT也不是万能的,比如:某些极少执行到的Java指令在编译时所额外花费的时间可能比转译器在执行时的时间还长,这时候就不如直接使用转译器。

所以,转译器和JIT各有优缺点。
1>极少执行到或者执行次数较少的Java代码,使用转译器更划算。
2>重复执行或者执行次数较多的Java代码,采用JIT更划算。

然后,我们回到JVM远程调试的正题。我们一般debug程序的时候,只是关注其中的一部分代码,而且大部分情况下是设置断点,然后单步执行,而JIT的编译单位是class,只要我们执行了class里面的代码,JIT就会对整个class进行编译,而我们实际执行的代码一般都是其中的一部分代码,所以从整个时间效率上来看,采用JIT反而更费时间。也就是说在JVM远程调试这个事情上,禁用JIT(只使用转译器,解释一行执行一条)更合理,所以通过-Djava.compiler=NONE来禁止JIT。

2012年10月23日 17:07

相关推荐

    idea远程调试代码(图文详细)

    -Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4001 ``` 假设我们正在使用的是Tomcat 7 + Java 7环境,则可以在`catalina.bat`(Windows环境)或`catalina....

    如何用Eclipse调试另外一台机器或远程机器上的项目

    - `-Djava.compiler=NONE`:禁止JIT编译,确保源代码级别的调试。 - `-Xrunjdwp`:启动JDWP(Java Debug Wire Protocol),指定使用socket通信,监听8787端口,服务器模式,并且在启动时不暂停。 2. **启动Tomcat...

    IBM JVM参数选项

    2. **-Djava.compiler**: 设置编译器类型,如果设置为`NONE`则禁用JIT编译器。 - 示例:`-Djava.compiler=NONE` 3. **-Djavax.xml.namespace.QName.useCompatibleHashCodeAlgorithm**: 控制`QName`类中的哈希码...

    dfd参数设置.txt

    java -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,suspend=y,server=y,address=8000 -cp F:/rcp/plugins/org.eclipse.equinox.launcher_1.0.0.v20070606.jar org.eclipse.equinox....

    springboot远程调试(eclipse篇)

    3. **-Djava.compiler=NONE**:禁用 JIT 编译器,这有助于调试。 4. **-Xrunjdwp**:加载 JDWP (Java Debug Wire Protocol) 的 JPDA (Java Platform Debugger Architecture) 实现,它是 Java 官方提供的调试协议。 ...

    Eclipse 远程调试Tomcat的应用

    要在远程服务器上的Tomcat中启用远程调试功能,首先需要对Tomcat的启动脚本进行修改,具体步骤如下: 1. **编辑setenv.sh文件**:在Tomcat的`bin`目录下创建或编辑`setenv.sh`文件(对于Windows环境则是`setenv.bat...

    IntelliJ远程调试教程.doc

    java -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=*:5005 -jar your-app.jar ``` 这里的关键参数包括: - `-Xdebug`:启用调试支持。 - `-Xnoagent`:不...

    eclipse与tomcat、weblogic远程调试小结(windows系统)

    -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n ``` - `WebLogic`服务器的`suspend=n`参数表示启动后不会等待调试器连接,这使得服务器可以立即启动...

    java tomcat 远程调试 在服务器上debug

    JAVA_OPTS="-Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n $JAVA_OPTS" ``` 这将使Tomcat启动时自动开启远程调试服务。 接下来,你需要一个Java调试器,如Eclipse...

    jdwp:Java调试线协议

    launch ( { mainClass : 'Test' , vmArgs : [ '-Dfile.encoding=UTF-8' , '-Xdebug' , '-Xnoagent' , '-Djava.compiler=NONE' ] , classPaths : [ __dirname ] ,} ) ;vm . on ( 'event' , async ( { events } ) => ...

    Linux 中Tomcat远程调试代码的实现方法

    - `-Djava.compiler=NONE`:禁止JIT编译器,使得我们可以使用远程调试。 - `-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5888`:配置JDWP(Java Debug Wire Protocol)参数,其中: - `transport=dt...

    siebel JBS代码及CFG JAVA配置

    VMOPTIONS = -Xrs-Djava.compiler=NONE-Djms.log=d:\JMSlog.txt ``` **解析:** - **DLL路径:** - `DLL = C:\Program Files\Java\jdk1.6.0_10\jre\bin\client\jvm.dll`:指定了Java虚拟机的DLL文件路径。 - **类...

    Applet Debug

    - 在某些情况下,为了优化性能和调试体验,可能会添加额外的JVM参数,如`-Djava.compiler=NONE`,以及内存分配`-Xms`和`-Xmx`,以及`-Xdebug`和`-Xnoagent`等相关选项。 通过以上两种方式,开发者可以灵活地对...

    JNI攻略之十――操作Java虚拟机

    options[0].optionString = "-Djava.compiler=NONE"; options[1].optionString = "-Djava.class.path=."; options[2].optionString = "-verbose:jni"; vm_args.version = JNI_VERSION_1_2; // 确保版本号正确 ...

    WebSphere修改中文乱码.pdf

    1. `-Djava.compiler=NONE`: 这个参数用于禁用JIT(Just-In-Time)编译器,通常在进行远程调试时使用,防止编译过程干扰调试。在这个场景下,它并不直接影响中文乱码问题,但保持不变即可。 2. `-Xdebug`: 启用JVM...

    公司内部培训jconsole

    对于远程调试,可以使用 `-Xdebug`、`-Xnoagent`、`-Djava.compiler=NONE` 和 `-Xrunjdwp` 参数来配置,例如在 Linux 环境下,通过 `startup.sh jpda` 启动服务,默认监听8000端口。在 Eclipse 等集成开发环境中,也...

    这⼏个 IntelliJ IDEA 高级调试技巧,用了都说爽!.docx

    要启用远程调试,你需要在启动项目时添加特定的JVM参数,例如`-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9081`。这些参数允许远程调试器连接到指定的端口...

    JVM配置参数说明

    在Java虚拟机(JVM)的运行过程中,通过一系列的命令行参数,我们可以调整其性能和行为。以下是对JVM部分关键配置参数的详细解析,这些参数能够帮助我们优化应用程序的执行效率,管理内存,以及进行性能调优。 ####...

    IDEA如何配置Tomcat

    - 在"Server"选项卡中,可以配置服务器的启动参数,如"-Djava.compiler=none"以禁用内置的Javac编译器,提高热部署速度。 通过以上步骤,您已经成功地在IntelliJ IDEA中配置了Tomcat服务器,并能够顺利地运行和...

    Tomcat中文帮助文档.rar

    2. 调试模式:通过-Djava.compiler=none启动Tomcat,禁用JIT编译以获取更详细的调试信息。 八、集群与负载均衡 1. Tomcat集群:通过复制应用程序和共享Session状态,实现多台Tomcat服务器间的负载均衡。 2. 配合...

Global site tag (gtag.js) - Google Analytics