首页 > 解决方案 > 如何为java程序分配堆内存

问题描述

我有一个 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 运行该程序在此处输入图像描述并打开 VisualVM 以监控堆大小。我不确定为什么它在顶部显示大小和最大值均为 2,097,152 B。不应该是 1,000,000 吗?而且我也想知道为什么使用不会超过 700,000 B 。它总是在 300000 到 700000 之间

请查看附件,不知道为什么 CPU 下会出现“此 JVM 不支持”的消息?

标签: javamemory-managementmemory-leaksgarbage-collection

解决方案


您可以使用几个 JVM 标志:

  • -Xmx 为特定 JVM 设置最大堆内存(像这样使用:-Xmx2G。它将可用堆限制为 2GB)
  • -Xms 为 JVM 设置初始分配的堆数量(使用 ike 这个:-Xms2G。它将初始堆大小设置为 2GBs)

您始终可以从一组现有算法中设置垃圾收集算法:

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

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


推荐阅读