我们的项目执行一些Java字节码检测.我们偶然发现了一些奇怪的行为.假设以下代码段:
public void a() {
new Integer(2);
}
Run Code Online (Sandbox Code Playgroud)
Oracle的javac将上面的代码编译成以下字节码:
0: new #2; //class java/lang/Integer
3: dup
4: iconst_2
5: invokespecial #3; //Method java/lang/Integer."<init>":(I)V
8: pop
9: return
Run Code Online (Sandbox Code Playgroud)
和Eclipse的编译器进入:
0: new #15; //class java/lang/Integer
3: iconst_2
4: invokespecial #17; //Method java/lang/Integer."<init>":(I)V
7: return
Run Code Online (Sandbox Code Playgroud)
如您所见,Oracle编译器在"new"之后生成"dup",而Eclipse则不然.在这个用例中完全正确,因为根本不使用新创建的Integer实例,因此不需要"dup".
我的问题是:
那么是否有可能在Windows 7机器上进行Java守护进程(Apache守护进程)的所有开发,然后在安装了OpenJDK的Ubuntu服务器上安装服务(仍然需要搜索如何操作)?
如果是,我如何在两个系统上识别兼容的Java版本?我的意思是如果我在Windows上使用Java 1.6,那么在Ubuntu服务器上应该具有的兼容性最差的OpenJDK版本是什么?