`
heiliguai
  • 浏览: 14447 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

为什么不把所有的class文件编译成机器码

    博客分类:
  • jvm
 
阅读更多

jvm执行方法有两种方式:解释执行和编译执行。

编译执行是直接执行本地的机器码,编译执行的效率要高于解释执行的效率。

 

那么,为什么不直接把java代码编译成机器码呢,这样运行起来会更快?

 

直接编译成机器码的话,那不就是C语言的做法了么。java有一个特性,是可以运行中动态加载类。

要支持运行中动态加载类这个特性,就没法做到全部编译成机器码,编译的时候都不知道运行时的类是什么,没法编译。

 

还有一个原因是,java编译的代码,是要到不同的平台上运行的,搞成机器码就平台相关的了。

 

上面是为什么在编译期间不把代码编译成机器码的原因。

 

那么还有还有JIT呢,JIT是运行期间将热点代码编译为机器码。为什么要只编译热点代码,把所有运行时代码都编译了不好么。

 

1. 关联的类那么多,编译也是要时间的,启动一个应用,还要让用户等着代码编译完,用户没那个耐心;

2. 对于那些执行频率低的代码段,编译执行省下的时间比解释执行时间少不了多少;

3. 一些编译优化的措施,需要收集运行时的数据再做决定,启动的时候就编译,那些运行时数据还没有。

 

什么优化措施,要收集运行时数据?

比如编译优化的时候要不要将方法内联。方法内联可以减少一次函数调用的开销,但是会使得总的代码量增大。如果把所有方法都内联,在方法缓存紧张的情况下,会出现缓存命中率变低,因为方法代码量大了,缓存能够存储的方法数目就少了。所以,要根据方法的调用次数来决定内联值不值得。

 

 

 

分享到:
评论
1 楼 bitzsk 2018-07-23  
讲的很好.

相关推荐

    三种class文件反编译工具

    这些字节码文件通常不直接可读,因为它们是机器不可理解的二进制格式。然而,开发者有时需要查看这些字节码背后的源代码,这就要用到类文件反编译工具。本篇文章将详细介绍三种常用的`.class`文件反编译工具:JAD、...

    .class文件反编译成java文件工具

    在Java编程语言中,.class文件是Java源代码编译后的二进制形式,它包含了机器可执行的字节码。然而,有时我们可能需要查看这些编译后的代码,以便理解或逆向工程一个已存在的Java应用。这就是`.class`文件反编译成`....

    Java Class文件反编译工具 jd-gui

    Java Class文件是Java程序编译后的二进制格式,它包含了类和接口的定义、方法体、常量池等信息,但这些信息是以机器可读的字节码形式存在,对于人类来说不易理解。为了查看和理解Class文件内部的源代码,我们就需要...

    class文件反编译工具

    Java的Class文件是Java字节码的载体,它包含了程序的机器无关的指令,由Java虚拟机(JVM)执行。然而,由于Class文件是以二进制格式存储的,对于人类阅读来说并不友好。这就引入了"反编译"的概念,即将Class文件转换...

    CLASS文件反编译工具

    在Java编程语言中,`.class`文件是Java字节码的载体,它是源代码经过编译后的结果。这些文件无法直接被人类阅读,因为它们包含了机器可理解的指令而非源代码级别的语句。为了查看或理解`.class`文件的内容,我们需要...

    myeclipse将class反编译成java源文件

    Class文件是Java编译器将源代码(.java文件)编译后的结果,它们包含了机器可执行的字节码。反编译是将这些字节码转换回人类可读的Java源代码的过程。这个过程通常用于分析或调试已编译的代码,尤其是当我们没有源...

    Java的class反编译工具

    在Java编程环境中,源代码会被编译成字节码(.class文件),这些字节码是机器不可读的,但是可以由Java虚拟机(JVM)执行。然而,有时我们需要查看或分析这些编译后的类文件,这时候就需要借助反编译工具。 标题中...

    class的反编译工具,查看.class文件

    在Java编程语言中,.class文件是编译后的字节码文件,它们包含了程序的机器可读指令。然而,有时我们需要查看这些字节码文件的源代码,以便理解已编译代码的工作原理,这时就需要使用到类的反编译工具。标题提到的...

    jad 编译.class文件成java源文件

    标题"jad 编译.class文件成java源文件"所指的,就是使用JAD工具将`.class`文件反编译为`.java`源代码的过程。`.class`文件是Java虚拟机(JVM)运行的二进制格式,而`.java`文件是程序员编写的源代码格式。通过反编译...

    Java class文件反编译工具集

    XJad可以反编译Java字节码并输出成一种名为jad的中间语言,然后再由jad语言转换为Java源代码。由于XJad年代较早,对于Java新特性的支持可能不足,但在处理遗留项目或研究历史代码时,它仍能提供一定的帮助。 在实际...

    Xjad java class文件反编译工具

    Java类文件(class文件)是Java程序运行的基础,它们包含了机器可执行的字节码。然而,这些文件通常是二进制格式,对于人类来说难以直接阅读和理解。这就是反编译工具如Xjad的重要性所在。Xjad是一款专门用于将Java ...

    class文件反编译

    在Java编程语言中,`.class`文件是Java字节码的载体,它是源代码经过编译后的结果。这些文件包含了程序的结构信息,但通常是以机器不可读的形式存在。为了理解`.class`文件的内部工作原理,开发者有时需要对它们进行...

    反编译jar文件,反编译.class文件

    而.class文件则是Java源代码经过编译后的二进制形式,包含了Java类的机器码,可以被JVM直接执行。 反编译是将已编译的二进制代码转换回源代码的过程。对于Java,这个过程通常涉及到将.jar文件或.class文件转换回可...

    jar 反编译.class文件 XJad

    在Java开发中,.class文件是Java源代码经过编译后的二进制格式,它包含了程序的字节码。当我们需要查看或理解这些已编译的类文件内部结构时,就需要进行反编译。XJad是早期的一种Java反编译工具,用于将.class文件...

    编译好的CLASS文件

    - 执行时,JVM使用解释器将字节码转换为机器码,或者使用即时编译器(JIT)将频繁执行的代码编译为本地机器代码,提高运行效率。 4. **反编译与调试**: - 对于开发者而言,CLASS文件通常是不可读的。使用反编译...

    MyEclipse、Eclipse反编译Class文件工具

    在编程世界中,有时我们需要查看或理解已编译的Java类文件(.class文件)的源代码,特别是在处理没有源码的库或者处理二进制冲突时。标题和描述提到的"MyEclipse、Eclipse反编译Class文件工具"正是为了解决这一需求...

    JAVA.class文件的反编译插件

    2. 运行jad:在命令行中输入`jad -d output_dir input_class_file.class`,这将把`input_class_file.class`反编译成源代码,并保存在`output_dir`目录下。 3. 查看源代码:反编译完成后,可以在指定的输出目录中...

    java反编译软件(能够反编译class文件为java格式文件)

    1. **Java字节码与源代码**:Java源代码(.java文件)被Java编译器编译成字节码(.class文件),这是Java虚拟机(JVM)能够执行的二进制格式。字节码是一种平台无关的中间语言,使得Java程序具有“一次编写,到处...

    java反编译工具,由于.class 文件的翻译

    反编译是将目标代码(通常是机器语言或字节码)转换为等效的高级语言的过程。在Java中,由于类文件是以字节码形式存在的,而字节码并不是人类可读的,因此需要反编译工具来帮助我们解读。 2. **为何需要反编译**: ...

Global site tag (gtag.js) - Google Analytics