首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JVM忽略Xms设置

JVM忽略Xms设置
EN

Stack Overflow用户
提问于 2014-11-05 15:00:06
回答 1查看 926关注 0票数 0

我有一个不需要太多Java堆的java程序:

SleepTest.java

代码语言:javascript
复制
public class SleepTest {
    public static void main(String[] args) {
        while (true) {
            try {
                Thread.sleep(100000);
            } catch (InterruptedException e) {
            }
        }
    }
}

因此,我试图通过使用Xms设置指定初始堆大小来通知JVM。但是,JVM似乎只是忽略了这一点,并使用默认大小进行分配。这是为什么?

为了举例说明,我开始我的程序三次:

代码语言:javascript
复制
abc@yyy:~> java SleepTest &                       // default - 512 MB
[1] 15745
abc@yyy:~> java -Xms10M SleepTest &               // specifying initial size of 10 MB
[2] 15756
abc@yyy:~> java -Xmx10M SleepTest &               // forcing max heap size of 10 MB
[3] 15766

并研究Linux中的内存消耗:

代码语言:javascript
复制
abc@yyy:~/ebbe> grep VmSize /proc/15745/status /proc/15756/status /proc/15766/status
/proc/15745/status:VmSize:        688828 kB       // default
/proc/15756/status:VmSize:        688892 kB       // specifying initial size of 10 MB
/proc/15766/status:VmSize:        166596 kB       // forcing max heap size of 10 MB

在这里,进程15756的大小表示它刚刚分配了与默认相同的值。

我使用以下JVM:

代码语言:javascript
复制
java version "1.6.0"
Java(TM) SE Runtime Environment (build pxa6460sr16fp1-20140706_01(SR16 FP1))
IBM J9 VM (build 2.4, JRE 1.6.0 IBM J9 2.4 Linux amd64-64 jvmxa6460sr16-20140626_204542 (JIT enabled, AOT enabled)
J9VM - 20140626_204542
JIT  - r9_20130920_46510ifx7
GC   - GA24_Java6_SR16_20140626_1848_B204542)
JCL  - 20140704_01

我在奔跑

代码语言:javascript
复制
SUSE Linux Enterprise Server 11 (x86_64)
VERSION = 11
PATCHLEVEL = 3
EN

回答 1

Stack Overflow用户

发布于 2014-11-05 15:29:34

VM确实遵守-Xms提示,但是如果设置得太低,堆将立即增长以满足分配请求。

根据代码中的内容,您可以得出代码“不需要太多内存”的结论。您没有考虑启动VM/JRE所消耗的内存。请注意,由于依赖关系,VM在开始执行代码之前必须加载许多JRE类。

-Xms选项的目的是确保VM至少分配同样多的堆,这是堆大小的下限。VM总是可以自由地分配更多。这就是-Xmx进入图片的地方(用来定义上限)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26760278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档