相关疑难解决方法(0)

Oracle和Eclipse编译器生成的java字节码的差异

我们的项目执行一些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".

我的问题是:

  1. 是否有一些不同编译器之间的差异概述?文章/博客文章?
  2. 我可以安全地得出结论,如果"new"和"invokespecial"之间没有"dup",那么初始化后不会使用对象吗?

java bytecode bytecode-manipulation

12
推荐指数
2
解决办法
734
查看次数

是否可以使用Oracle JDK编译java并在OpenJDK上运行代码?

那么是否有可能在Windows 7机器上进行Java守护进程(Apache守护进程)的所有开发,然后在安装了OpenJDK的Ubuntu服务器上安装服务(仍然需要搜索如何操作)?

如果是,我如何在两个系统上识别兼容的Java版本?我的意思是如果我在Windows上使用Java 1.6,那么在Ubuntu服务器上应该具有的兼容性最差的OpenJDK版本是什么?

java openjdk jdk1.6 cross-compiling

11
推荐指数
1
解决办法
3642
查看次数