java动态编译
来源:互联网 发布:剑三捏脸数据导入非法 编辑:程序博客网 时间:2024/05/04 17:11
在HotSpot虚拟机中,有两个技术是至关重要的,即动态编译(Dynamic compilation)和Profiling。
HotSpot是如何动态编译Javad的bytecode呢?Java bytecode是以解释方式被load到虚拟机的。HotSpot里有一个运行监视器,即Profile Monitor,专门监视程序运行中,哪一部分运用频度大,哪些对性能影响至关重要。对于那些对程序运行效率影响交大的代码,称为热点,即hot spot,HotSpot会把这些部门动态地编译成机器码,Native code,同时也对机器码进行优化(类似C编译器的一些优化),从而而提高运行效率。而那些较少运行的Code,HotSpot虚拟机就不再浪费时间把它们编译。总的来说,HotSpot对bytecode有三层处理:不编译,编译,编译并优化。
那么为什么Java采用动态编译器而不是象C++这样采用静态编译器呢?
1.虚拟机提供的跨平台运行条件。
2.Profiling。静态编译器通常很难准确预知程序运行过程中究竟什么部分最需要优化。静态编译器虽然可以把Java全部编译成Native Code,但却做不到动态编译器那样的优化。
3.Method inlining。无论是在C还是在Java里,函数调用都是很浪费系统时间的,因为有许多进栈出栈操作。因此有一种优化办法,就是把原来的函数调用,通过编译器的编译,改成非函数调用,把函数代码直接嵌到调用出,变成顺序执行。但这一方法在Java/C++这样的面向对象的语言的编译器中,较难很好实现。那些静态编译器,通常可以把private,static等函数进行Method inlining,但由于这些面向对象的语言支持函数重载,支持dynamic binding,因此静态编译器并不知道究竟应该把函数的哪个实现给inline了。
HotSpot的动态编译,由于有对函数调用的监视,因此可以准确地知道一些环境下,那些被重载和动态识别的函数可以如何被inline到调用者那里去,因此实际上对于一些Server应用来说,可以大幅度提高效率。
了解了这些,就知道,有时候Java的程序甚至能比C程序运行还快。
HotSpot是如何动态编译Javad的bytecode呢?Java bytecode是以解释方式被load到虚拟机的。HotSpot里有一个运行监视器,即Profile Monitor,专门监视程序运行中,哪一部分运用频度大,哪些对性能影响至关重要。对于那些对程序运行效率影响交大的代码,称为热点,即hot spot,HotSpot会把这些部门动态地编译成机器码,Native code,同时也对机器码进行优化(类似C编译器的一些优化),从而而提高运行效率。而那些较少运行的Code,HotSpot虚拟机就不再浪费时间把它们编译。总的来说,HotSpot对bytecode有三层处理:不编译,编译,编译并优化。
那么为什么Java采用动态编译器而不是象C++这样采用静态编译器呢?
1.虚拟机提供的跨平台运行条件。
2.Profiling。静态编译器通常很难准确预知程序运行过程中究竟什么部分最需要优化。静态编译器虽然可以把Java全部编译成Native Code,但却做不到动态编译器那样的优化。
3.Method inlining。无论是在C还是在Java里,函数调用都是很浪费系统时间的,因为有许多进栈出栈操作。因此有一种优化办法,就是把原来的函数调用,通过编译器的编译,改成非函数调用,把函数代码直接嵌到调用出,变成顺序执行。但这一方法在Java/C++这样的面向对象的语言的编译器中,较难很好实现。那些静态编译器,通常可以把private,static等函数进行Method inlining,但由于这些面向对象的语言支持函数重载,支持dynamic binding,因此静态编译器并不知道究竟应该把函数的哪个实现给inline了。
HotSpot的动态编译,由于有对函数调用的监视,因此可以准确地知道一些环境下,那些被重载和动态识别的函数可以如何被inline到调用者那里去,因此实际上对于一些Server应用来说,可以大幅度提高效率。
了解了这些,就知道,有时候Java的程序甚至能比C程序运行还快。
- java 内存编译-动态编译
- 动态编译JAVA程序
- 动态编译Java程序
- 动态编译JAVA程序
- JAVA动态编译简介
- 动态编译JAVA程序
- 动态编译JAVA程序
- Java动态编译
- Java的动态编译
- Java动态编译
- JAVA 的动态编译
- Java动态编译
- Java动态编译
- JAVA动态编译
- java动态编译
- Java动态编译笔记
- Java动态编译(一)
- 动态编译Java源文件
- POJ 2528 区间端点离散化,线段树区间更新
- 关于数字签名SignTool
- 正则表达式 捕获组,向前引用,零宽度断言,贪婪量词,惰性量词以及支配量词
- idea快捷键以及项目实用配置
- iOS学习之iOS沙盒(sandbox)机制和文件操作之NSFileManager
- java动态编译
- WinCE6.0的内存物理地址访问
- MySql无限分类数据结构--预排序遍历树算法
- Java
- Java Web Application 自架构 六 邮件服务器与资源存储
- readlink (可以用于读取本进程的程序名)
- 解决修改重命名sql Server数据库名称
- 网络及多任务
- How to bind listbox to data dynamically