上一篇:java的io简单应用 >>
JAVA的动态编译和静态编译
In practice, static Java compilers are sometimes desirable over JIT compilers because they have many advantages [3,5,7]:
Static compilation yields more robust deployed applications. On the one hand, a deployment JIT may be different from the development JIT, which can cause problems due to even slight differences in the virtual machine or library code. With static compilation, programs are compiled into native code allowing the developer to test exactly what is deployed. On the other hand, compilers have bugs. Crashes caused by static compiler bugs sometimes happen at compile time (unless the bug is the kind that generates bad code silently), while bugs in the JIT may cause crashes at program execution time, and some of them may only surface after a portion of the program has been executed many times. Moreover, if the program crashes due to a bug in either the compiler or the program itself, statically compiled code is much easier to debug because the run-time trace is more predictable.
Static compilation provides better intellectual property protection. Native code is much harder to reverse-engineer than Java bytecode.
Static Java compilers can perform resource intensive optimization before the execution of the program. In contrast, JIT compilers must perform analysis at execution time, thus are limited to simple optimizations that can be done without a large impact on the combined compile and execute time.
Static compilation achieves greatly reduced start-up cost, reduced memory usage, automatic sharing of code by the OS between applications, and easier linking with native code.
Last but not least, static compilation is better suited for code certification than JIT compilation. It is significantly easier to achieve higher safety assurance by removing the compiler from the trusted computing base. There has been a lot of work done in this area [23,21,19] which mostly focuses on static compilation.
Regardless of the above advantages, there is an ongoing debate in the Java community on whether statically compiled implementations can meet the Java specification on dynamic features such as binary compatibility. Our paper presents a scheme that accommodates the seemingly contradictory goal of full Java compliance and static compilation, thus showing that binary compatibility can indeed be supported using static compilers. Following the inspiration of ``quasi-static compilation@#@# [27], this technique in practice can also be used together with other JIT compilation techniques to achieve an optimal balance point between static and dynamic compilation. Thus we believe this result is of interest to the general audience in the JVM community.
下一篇:为什么Java中继承是有害的 >>
相关文章:
- · Java 网络文件传输
- · JavaCC的安装
- · 列出目录下所有文件名---ListFiles.java
- · Java Class 映射及实用工具类完整源代码
- · java窗口的实现---计算器(算加法)
- · java链接数据库的工具类
- · Java中存储区的分类
- · java中字符转换
- · java applet 画图板
- · Java keytool工具的作用及使用方法[zz]
- · java swing的拖放例子
- · java学习笔记7--Polymorphism
- · java学习笔记7--Polymorphism
- · 如何迅速成为Java高手
- · 浅谈JAVA VM 发展
- · javaRMI使用入门程序及配置
- · JAVA+ACCESS编程体会
- · 漫谈Java程序设计中的接口应用
- · Java语言之父James Gosling
- · 漫谈Java程序设计中的接口应用
- · 漫谈Java程序设计中的接口应用
- · 新一代Java技术即将出现
- · Java中利用JMF编写摄像头拍照程序
- · 漫谈Java程序设计中的接口应用
- · Java中对文件的操作
- · 在Java中如何模拟多继承
- · 学习java需要知道的一些问题
- · Java中的类反射机制
- · 学习java需要知道的一些问题
- · java中的基于套结字(socket)的通信 一. 一个双人单方向通信例子
- · java编码中的一些经验和教训
- · Java面试中的陷阱
- · Java用户界面本地化实例探索
- · 漫谈Java程序设计中的接口应用
- · Java程序性能测试
- · Java中得到一个字符串中每个字符的Unicode值
- · 在java中实现sql的select函数功能
- · Java面试中的陷阱
