msh*_*rir 96 java 64-bit compatibility jvm 32-bit
Java代码是否可以在32位JDK中构建和编译成32位字节代码,在64位JVM中工作?或者64位JVM是否需要64位字节代码?
为了提供更多细节,我的代码在运行32位JVM的Solaris环境中工作,但现在我在将JDK和Weblogic Server升级到64位后遇到问题.
Zif*_*fre 92
是的,假设您使用独立于平台的库,Java字节码(和源代码)与平台无关.32对64位应该无关紧要.
For*_*ner 20
我不小心在64位VM而不是32位VM上运行我们的(大型)应用程序,直到一些外部库(由JNI调用)开始失败才发现.
在32位平台上序列化的数据在64位平台上读取,完全没有问题.
你得到了什么问题?做一些事情而不是其他事情吗?您是否尝试过附加JConsole等并且有一个高峰?
如果您有一个非常大的VM,您可能会发现64位的GC问题可能会影响您.
Tom*_*ine 11
第一个问题是,第二个问题不是; 它是一个虚拟机.您的问题可能与版本之间库实现中未指定的更改有关.虽然可能是比赛条件.
VM必须经历一些箍.值得注意的是,引用在类文件中被视为int
与堆栈中的s 占用相同的空间.double
并long
占用两个参考位置.例如字段,VM通常会经历一些重新排列.这一切都是(相对)透明地完成的.
一些64位JVM也使用"压缩oops".因为数据大约每8或16个字节对齐,所以地址的3或4位是无用的(尽管某些算法可能会窃取"标记"位).这允许32位地址数据(因此使用一半的带宽,因此更快)在64位平台上使用35或36位的堆大小.
Pet*_*rey 10
所有字节代码都是基于8位的.(这就是它所谓的BYTE代码的原因)所有指令都是8位大小的倍数.我们在32位计算机上开发并使用64位JVM运行我们的服务器.
你能详细介绍一下你所面临的问题吗?然后我们可能有机会帮助你.否则我们只会猜测你遇到的问题.
除非您有本机代码(为特定的arcitechture编译的机器代码),否则您的代码将在32位和64位JVM中同样运行.
但请注意,由于较大的地址(32位为4字节,64位为8字节),64位JVM将需要比32位JVM更多的内存来执行相同的任务.