繁体   English   中英

Java 32位与64位兼容性

[英]Java 32-bit vs 64-bit compatibility

Java代码是否可以在32位JDK中构建和编译成32位字节代码,在64位JVM中工作? 或者64位JVM是否需要64位字节代码?

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

是的,Java字节码(和源代码)是独立于平台的,假设您使用独立于平台的库。 32对64位应该无关紧要。

我不小心在64位VM而不是32位VM上运行我们的(大型)应用程序,直到一些外部库(由JNI调用)开始失败才发现。

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

你得到了什么问题? 做一些事情而不是其他事情吗? 您是否尝试过附加JConsole等并且有一个高峰?

如果您有一个非常大的VM,您可能会发现64位的GC问题可能会影响您。

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

VM必须经历一些箍。 值得注意的是,引用在类文件中被处理,就像它们在堆栈上占用与int相同的空间。 doublelong占用两个参考插槽。 例如字段,VM通常会经历一些重新排列。 这一切都是(相对)透明地完成的。

一些64位JVM也使用“压缩oops”。 因为数据大约每8或16个字节对齐,所以地址的3或4位是无用的(尽管某些算法可能会窃取“标记”位)。 这允许32位地址数据(因此使用一半的带宽,因此更快)在64位平台上使用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)连接

在创建exe时,在配置中添加如下的参数

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

我希望它有所帮助。

谢谢...

/ JAV

Java JNI要求与JVM具有相同“bittiness”的OS库。 如果您尝试构建依赖于IESHIMS.DLL(位于%ProgramFiles%\\ Internet Explorer中)的内容,则需要在JVM为32位时使用32位版本,在JVM为64位时使用64位版本。 同样适用于其他平台。

除此之外,你应该全力以赴。 生成的Java字节码s / b相同。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM