针对32位JDK构建和编译为32位字节代码的Java代码是否可以在64位JVM中工作?还是64位JVM需要64位字节代码?
为了提供更多细节,我有在运行32位JVM的Solaris环境中工作的代码,但是现在将JDK和Weblogic Server升级到64位后遇到了问题。
针对32位JDK构建和编译为32位字节代码的Java代码是否可以在64位JVM中工作?还是64位JVM需要64位字节代码?
为了提供更多细节,我有在运行32位JVM的Solaris环境中工作的代码,但是现在将JDK和Weblogic Server升级到64位后遇到了问题。
Answers:
是的,假设您使用平台无关的库,则Java字节码(和源代码)是平台无关的。32与64位无关紧要。
javac
将利用64位可用的内存java
?
我不小心在64位VM而不是32位VM上运行了(大型)应用程序,直到某些外部库(由JNI调用)开始出现故障时才注意到。
在64位平台上读入在32位平台上序列化的数据,没有任何问题。
您遇到什么样的问题?某些事情有效吗?您是否尝试过附加JConsole等并且周围有一个高峰?
如果您的VM很大,您可能会发现64位GC问题会影响您。
第一个问题是,第二个问题是。这是一个虚拟机。您的问题可能与版本之间的库实现中未指定的更改有关。尽管可能是一种竞赛情况。
VM必须克服一些困难。值得注意的是,引用在类文件中的处理方式就像它们int
在堆栈上占用s 一样。double
并long
占用两个参考插槽。例如,无论如何,VM通常都会进行一些重新布置。这一切都是(相对)透明地完成的。
还有一些64位JVM使用“压缩的oops”。因为数据大约每8或16个字节对齐,所以地址的三或四位是无用的(尽管对于某些算法来说,“标记”位可能会被盗)。这允许32位地址数据(因此使用带宽的一半,因此速度更快)在64位平台上使用35位或36位的堆大小。
除非您具有本机代码(针对特定Arcitechture编译的机器代码),否则您的代码将在32位和64位JVM中同样良好地运行。
但是请注意,由于地址更大(32位是4字节,64位是8字节),对于同一任务,64位JVM比32位JVM需要更多的内存。
在创建exe时在配置中添加以下参数
希望对您有所帮助。
谢谢...
/熟
哟,哪里错了!针对这个主题,我向甲骨文提出了一个问题。答案是。
“如果在32位计算机上编译代码,则代码只能在32位处理器上运行。如果要在64位JVM上运行代码,则必须使用64位计算机在64位计算机上编译类文件。 -位JDK。”