深入了解IBM J9 Java虚拟机(Java 6版本)
1. 同步与线程机制
在Java 6的运行环境中,真正的可移植性是可以实现的。不过,在硬件和操作系统中能轻松实现的一些同步语义,例如用于防止重入的原子测试和设置,在软件层面实现起来则较为困难。因此,Java虚拟机(JVM)为此提供了特定的不可中断指令。当使用 synchronized
关键字时,会对对象或类进行加锁,这会在代码中使用 monitorenter
和 monitorexit
指令,从而防止JVM内其他线程对该对象或类进行并发访问。
线程本质上是开发者构建的一种机制,它允许声明一组可以并发运行的操作,并且可以为这些操作定义优先级和依赖关系,线程组也可以进行分组。然而,虽然开发者可以定义在线程上并发运行的指令组,但核心运行时的某些部分并非线程安全的,因此不能由多个线程并发访问。Java 5标准通过添加新的高级 java.util.concurrent
类和一些线程安全的实用结构类(如 java.util.Queue
),改进了基础Java线程类和 java.lang.Object
中的并发支持实现。
2. 代码生成
实际上,在JVM上执行除Java之外的其他语言是完全可行的,唯一的要求是该语言能够处理栈上的操作数,并且可以编译成字节码并加载到类中。
生成字节码后,可以使用与优化编译器多年来使用的类似技术对其进行优化。这些技术包括:
- 去除不必要的指令