您可以创建(Oracle JVM)Java堆的最小值是多少?

Eri*_*o - 7 java

java很乐意接受-Xmx1k作为参数,但"实验显示"这仍然像8MB堆.

谷歌搜索没有使用任何东西,所以我想知道,你可以在Java中授权的最小堆大小是多少?

谢谢,埃里克

编辑:

它似乎因平台和java版本而有所不同.在我的Mac上,使用1.6.0_24,我可以配置它而没有错误的最小值是:

$ java -Xms1k -Xmx4097k -XX:NewSize=192k  -cp . Foo
5636096
Run Code Online (Sandbox Code Playgroud)

或大约5.375M,其中Foo.java只是:

public class Foo {
    public static void main(String[] args) {
        System.out.println(Runtime.getRuntime().totalMemory());
    }
}
Run Code Online (Sandbox Code Playgroud)

因此我的环境是:

$ uname -a
Darwin turbo.local 10.7.0 Darwin Kernel Version 10.7.0: Sat Jan 29 15:17:16 PST 2011; root:xnu-1504.9.37~1/RELEASE_I386 i386
$ java -version
java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07-334-10M3326)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02-334, mixed mode)
Run Code Online (Sandbox Code Playgroud)

正如我在下面的评论中提到的,我设置了一个小堆试图验证一个昂贵的算法确实几乎没有使用内存,而不是试图省钱.

谢谢你的答案 - 当我试图谷歌这个时,我很沮丧.

Pet*_*rey 2

除非您使用的是极其有限的移动设备(在这种情况下您应该在该设备上进行测试),否则即使 8MB 也不算多

一台服务器的成本约为 70 美元/GB 或每 8 MB 约 50 美分。

使用-mx1m -XX:NewSize=256k以下选项运行

System.out.println(Runtime.getRuntime().totalMemory()/1024);
Run Code Online (Sandbox Code Playgroud)

印刷

2304
Run Code Online (Sandbox Code Playgroud)

即 2.25 MB。

不要忘记,堆并不是整个应用程序。您将 permgen 和共享库包含在总大小中。