如何在Mac OSX 10.7 Lion上运行32位Java

21

根据我在Windows 7(64位)和Java方面的经验,32位JRE使用的内存更少,运行速度比64位JRE快得多(前提是你不需要或受益于拥有大量内存)。我想在Mac OSX(和其他平台)上也是如此。

我当前正在运行OSX Lion(v10.7),并安装了标准的Java应用程序。在Java首选项下,我看到“Apple Inc.”的“Java SE 6”适用于CPU类型“32位”和“64位”,版本号为“1.6.0_26-b03-383”。我已经更改了首选顺序,将32位版本放到64位版本之上,希望这会使32位版本成为默认版本。

但是,“java -version”仍然显示:

java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03-383-11A511c)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02-383, mixed mode)

默认情况下可以使用32位版本吗?如何实现?

此外,有没有人在32/64位版本之间进行速度和内存效率的经验/比较测量?


8
顺便说一下,16位版本使用更少的内存,速度更快。 - user405725
5个回答

21

我刚刚发现,可以使用 -d32 选项显式启动32位的JVM。

在我的机器上,“java -version -d32”会显示:

java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03-383-11A511c)
Java HotSpot(TM) Client VM (build 20.1-b02-383, mixed mode)

虽然没有明确说明,但它是一个32位的JVM。


+1 运行得非常好。我运行了一个 Java 应用程序,它显示在“活动监视器”中的种类是 Intel,而不是 Intel (64 位)。由于某种原因,arch 命令对 Java 没有任何影响。 - Kelvin

7

最新版本的Java 64位默认启用-XX:+UseCompressedOops(如果您的堆大小小于32 GB)。这意味着无论如何都会使用32位引用。对象仍然稍微更大(多4个字节的开销)。

本文比较了32位、64位和使用CompressedOops的性能差异,Java:不同数组和集合占用多少内存

在性能方面,我发现这取决于您正在做什么,通常可以提高5-10%。如果您正在使用大量long值,则使用64位将更快。


这是有些有用的信息,但我如何启动32位JVM?所提到的文章比较了32位和64位JVM(尽管可能在不同的平台上)。 - Ulrik
在UNIX中,我会打开一个shell并使用完整的路径名来运行我想要的程序(适用于几乎所有程序)。或者我会更改默认的PATH以包括Windows或Unix中的bin目录,以使用32位版本(同样与Java无关)。 - Peter Lawrey
1
在Windows或UNIX中,这很简单,我知道...你只需要知道JRE的安装位置以查找Java二进制文件,并设置适当的JAVA_HOME环境变量。在Mac上,Java安装非常难以找到,我无法找到32位安装版本。但是,我认为Java首选项GUI中显示的信息暗示着某种方式存在32位版本...在某个地方... - Ulrik

1

在/System/Library/Frameworks/JavaVM.framework/Versions中,我发现安装了1.6版本,并将java和javac的路径更改为指向/System/Library/Frameworks/JavaVM.framework/Versions/1.6/home,使用环境别名而不是在/usr/bin中找到的默认链接。


1

打开“Java Preferences”应用程序,将32位Java拖到列表顶部。


正如我所描述的那样,这就是我已经尝试过的 - 没有看到任何区别。 - Ulrik

1

请尝试以下步骤:

  1. 打开终端并进入 /System/Library/Frameworks/JavaVM.framework/Versions/ 目录
  2. 输入 ls -l 命令以列出所有可用的 Java 版本
  3. 输入 sudo ln -fhsv CurrentJDK 命令

参考链接:更改 Java 版本


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接