如何将堆内存分配给java程序

时间:2018-05-11 18:48:36

标签: java memory-management memory-leaks garbage-collection

我有一个java程序,它在无限for循环中创建了20个不同的字符串对象

 for(int i = 0 ; i >=0 ; i++){
    String s = new String("Test");
    String s1 = new String("Test");
    /*creating more string objects here */
    System.out.println(s);
}

并使用java -Xms1m -Xmx1m HelloWorld enter image description here运行此程序并打开VisualVM以监视堆大小。我不知道为什么它的尺寸和最大值都显示为2,097,152 B. 不应该是1,000,000?而且我也想知道为什么使用不超过700,000 B。 总是在300000到700000之间

请查看附件,不知道为什么CPU下面有一条消息"此JVM不支持"?

1 个答案:

答案 0 :(得分:1)

您可以使用几个JVM标志:

  • -Xmx为特定JVM设置max heap momory(使用如下:-Xmx2G。它将可用堆限制为2GB)
  • -Xms为JVM设置初始分配堆量(使用ike:-Xms2G。它将初始堆大小设置为2GB)

您总是可以从现有的算法集中设置垃圾收集算法:

  • -XX:+ UseG1GC使用G1 gc
  • -XX:+ UseConcMarkSweepGC使用并发标记和扫描gc

你可以在这里检查一些标志:http://files.zeroturnaround.com/pdf/zt_JVM-options-cheat-sheet.pdf