Java语言
Java 是一种面向对象的语言。面向对象的一个承诺是它促进了代码的重用,从而提高了开发人员的生产力。这种生产力提升主要来自 Java 对直接内存操作的限制。
Java防止破坏内存的手段:
1. 运行时强制类型规范
2. 通过GC的自动垃圾回收
3. 数组边界检查
4. 检查对象引用,引用为空则在运行时抛exception
Java高开发效率,低开发成本背后的妥协是执行速度。
Java相较于非托管语言的额外运行时开销:
1. 类型安全的引用转换
2. 数组边界检查
3. 空引用检查
4. 垃圾收集
Java性能低下的其他原因:
1. 在每个数组访问时检查数组边界
2. 所有对象都在堆上创建(没有对象在栈上创建)
3. 在运行时,所有对象引用在使用时都会被检查是否为空
4. 在运行时检查所有引用转换以确保类型安全
5. GC的效率较低
6. Java 中的原始类型在每个平台上都是相同的,而不是平台的最佳size
7. Java 中的字符串始终是 UNICODE。当只需要操作ASCII 字符串时,效率略低。
Java的其它妥协:
1. 失去对内存管理的控制,给程序的运行时性能增加了一定程度的不确定性。
2. 任何试图提供跨平台功能的 API 所固有的一个困难是最小公分母问题
如果一项功能仅存在于一个操作系统上,API 的设计者可能会决定不支持该功能。如果一个特 性存在于大多数操作系统上,但不是全部,设计者可能会决定支持它。这将需要在缺少该功能的操作系统上的 API 中实现类似的东西
3. 将 Java 类文件反编译回 Java 源代码相当容易
类文件的符号信息,以及字节码指令集与Java语言的密切关系