Inside the Java Virtual Machine学习笔记5

81 阅读2分钟

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语言的密切关系