我有一个 java 程序,它在无限循环中创建 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下会提示“Not supported for this JVM”?
最佳答案
您可以使用几个 JVM 标志:
- -Xmx 为特定 JVM 设置最大堆内存(像这样使用:-Xmx2G。它会将可用堆限制为 2GB)
- -Xms 为 JVM 设置初始分配的堆大小(像这样使用:-Xms2G。它将初始堆大小设置为 2GB)
您始终可以根据现有算法集设置垃圾收集算法:
- -XX:+UseG1GC 使用G1 gc
- -XX:+UseConcMarkSweepGC 使用Concurrent mark and sweep gc
你可以在这里检查一些标志:http://files.zeroturnaround.com/pdf/zt_JVM-options-cheat-sheet.pdf
关于java - 如何为java程序分配堆内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50298520/