Java 32位与64位兼容

将Java代码构build和编译为32位JDK转换为32位字节代码是否适用于64位JVM? 或者一个64位的JVM需要64位的字节码?

为了给出更多的细节,我有一个在运行32位JVM的Solaris环境中工作的代码,但是现在我在将JDK和Weblogic Server升级到64位后遇到了问题。

是的,假设您使用独立于平台的库,Java字节码(和源代码)是独立于平台的。 32与64位应该没有关系。

我不小心在一个64位的虚拟机上运行我们的(大的)应用程序,而不是一个32位的虚拟机,直到一些外部库(由JNI调用)开始失败时才注意到。

在32位平台上序列化的数据在64位平台上读入,完全没有问题。

你得到什么样的问题? 做一些事情而不是别人? 你有没有尝试附加JConsole等,并有高峰?

如果你有一个非常大的虚拟机,你可能会发现64位的GC问题会影响你。

对第一个问题是,对第二个问题不是。 这是一个虚拟机。 您的问题可能与版本之间库实现的未指定更改有关。 虽然它可能是比赛条件。

虚拟机需要经过一些环节。 值得注意的是,引用在类文件中被视为与堆栈中的int相同。 doublelong占用两个参考槽。 举例来说,虚拟机通常会经历一些重新安排。 这一切都完成(相对)透明。

另外一些64位JVM使用“压缩的oops”。 由于数据大约每8或16个字节alignment,所以地址的三或四位是无用的(尽pipe某些algorithm可能会盗取“标记”位)。 这允许在64位平台上使用32位地址数据(因此使用一半的带宽,因此速度更快),以使用35或36位的堆大小。

所有的字节码都是基于8位的。 (这就是为什么它被称为BYTE代码)所有的指令都是8位的倍数。 我们在32位机器上开发,并使用64位JVM运行我们的服务器。

你能详细谈谈你面临的问题吗? 那么我们可能有机会帮助你。 否则,我们只能猜测你现在面临的问题是什么。

除非你有本地代码(为特定的arcitechture编译的机器代码),否则你的代码在32位和64位的JVM中运行的同样好。

但是请注意,由于较大的地址(32位是4字节,64位是8字节),对于同一任务,64位JVM将比32位JVM需要更多的内存。

当与本地库连接时,32位与64位的差异变得更加重要。 64位Java将无法与32位非Java dll(通过JNI)

在创buildexe时,在configuration中添加一个参数如下

http://www.technimi.com/index.php?do=/group/java/forum/building-an-exe-using-launch4j-for-32-bit-jvm/

我希望它有帮助。

谢谢…

/ JAV

Java JNI需要与JVM具有相同“琐碎”的操作系统库。 如果您尝试构build一些依赖于IESHIMS.DLL(位于%ProgramFiles%\ Internet Explorer)中的某些内容,那么当您的JVM为32位时需要32位版本,而当您的JVM为64位时,则需要64位版本。 同样适用于其他平台。

除此之外,你应该全部设置。 生成的Java字节码s / b相同。

请注意,您应该使用64位Java编译器来处理更大的项目,因为它可以处理更多的内存。

哟哪里错了! 为了这个主题,我向oracle写了一个问题。 答案是。

“如果你在32位机器上编译你的代码,你的代码只能在32位处理器上运行,如果你想在64位JVM上运行代码,你必须在64位机器上使用64位编译你的类文件 – 位JDK“。