Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 32位与64位兼容性_Java_Jvm_64 Bit_Compatibility_32 Bit - Fatal编程技术网

Java 32位与64位兼容性

Java 32位与64位兼容性,java,jvm,64-bit,compatibility,32-bit,Java,Jvm,64 Bit,Compatibility,32 Bit,针对32位JDK构建并编译成32位字节代码的Java代码是否可以在64位JVM中工作?还是64位JVM需要64位字节码 更详细地说,我有在Solaris环境下运行32位JVM的代码,但现在我在将JDK和Weblogic服务器升级到64位后遇到了问题。是的,Java字节码(和源代码)是平台独立的,假设您使用平台独立的库。32位和64位应该没关系。第一个问题是,第二个问题是;这是一个虚拟机。您的问题可能与版本之间的库实现中未指定的更改有关。虽然这可能是,比如说,一个比赛条件 虚拟机必须经历一些困难。

针对32位JDK构建并编译成32位字节代码的Java代码是否可以在64位JVM中工作?还是64位JVM需要64位字节码


更详细地说,我有在Solaris环境下运行32位JVM的代码,但现在我在将JDK和Weblogic服务器升级到64位后遇到了问题。

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

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

虚拟机必须经历一些困难。值得注意的是,类文件中的引用被视为占用了与堆栈上的
int
s相同的空间
double
long
占用两个参考槽。例如字段,VM通常会进行一些重新排列。这一切都是(相对)透明的

还有一些64位JVM使用“压缩OOP”。因为数据大约每8或16个字节对齐一次,所以地址的3或4位是无用的(尽管对于某些算法,“标记”位可能会被盗)。这允许32位地址数据(因此使用了一半的带宽,因此速度更快)在64位平台上使用35位或36位的堆大小。

我意外地在64位VM而不是32位VM上运行了(largeish)应用程序,直到一些外部库(由JNI调用)开始出现故障时才注意到

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

你遇到了什么问题?有些事情行得通,有些事情不行吗?您是否尝试连接JConsole等,并在周围有一个峰值


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

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


你能详细说明一下你面临的问题吗?那我们就有机会帮助你了。否则,我们只能猜测您遇到了什么问题。

除非您有本机代码(为特定的Arcitecture编译的机器代码),否则您的代码将在32位和64位JVM中同样运行良好


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

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

我希望有帮助

谢谢


/jav

你哪里错了!针对这个主题,我向甲骨文写了一个问题。答案是


“如果在32位计算机上编译代码,则代码应仅在32位处理器上运行。如果要在64位JVM上运行代码,则必须使用64位JDK在64位计算机上编译类文件。”

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

Java JNI需要与JVM具有相同“位”的OS库。如果试图构建依赖于IESHIMS.DLL(位于%ProgramFiles%\Internet Explorer中)的内容,则当JVM为32位时,需要采用32位版本;当JVM为64位时,需要采用64位版本。其他平台也是如此

除此之外,你应该准备好了。生成的Java字节码s/b相同


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

你让我吃惊。我不认为有32位字节码或64位字节码这样的东西。重读你的答案——你确定你的意思不是相反吗?(是的,然后不是。)+1给乔恩·斯凯特。我写了同样的评论,但被叫走了。我的意思是“不”,然后是“是”,但问题是相反的。已回滚一个编辑并编辑(并在其中放入更多信息)。@Jon Skeet:没有32位和64位字节码,但当JIT时,JVM中的指针(通常)是32位或64位,具体取决于平台。通过压缩OOP,他们可以在许多地方使用32位指针,甚至在64位JVM上。这节省了相当多的内存并增加了代码的局部性,从而提高了速度。请澄清“问题”。我遇到了一个类似的问题——在64位weblogic服务器上部署spring应用程序。我们得到各种类未找到异常和其他无用错误。此外,它在一些64位机器上部署和运行,但在其他机器上不部署和运行。然而,我们不能说有什么不同。你解决了吗?@nont-不管问题是什么,它不是32vs64位编译。你是说如果JNI库是32位的,那么它在64位虚拟机中就不能工作?它们不能工作。一位同事报告说他们这样做了(至少可以说,我觉得这很可疑)。我想知道他是不是在Solaris上运行,是否有某种砰砰的声音。没有;他搞错了,它在32位以下运行。我在JNI库中遇到过类似的问题。32位和64位库之间不兼容。事实上,您的JNI库需要更换。您可能只需从供应商的网站下载64位的替代方案。(对于我使用的所有JNI LIB,这对我来说都是一个窍门)。这些是内部库,没有64位的等效库,因此回到32位是当前的顺序。Java代码通常编译为相同的,而不管是32位还是64位平台。对于任何本机代码来说,规则都是不同的,但是Java字节码是可移植的。是的,看来Oracle的任何人回答你的问题不是误解了它,就是对JVM一无所知。你没有