java - 如何为java程序分配堆内存

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

我有一个 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 enter image description here 运行这个程序并打开 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/

相关文章:

c++ - 删除内存错误

c++ - std::vector 保留方法无法分配足够的内存

haskell - 递归定义列表的内存泄漏问题

java - 有没有办法在关闭时使用 ContextListener 关闭 contextDestroyed() 方法中的所有 ThreadLocals(保存 Session 对象)?

javax.microedition.io 我在哪里可以找到 jar?

java - 不要在 Activity 销毁时销毁绑定(bind)服务

java - 将 Image 对象复制到剪贴板时出错

java - 如何处理来自 MediaSession 远程卷覆盖的更改?

c++ - new[n] 并使用 delete 删除每个位置,而不是使用 delete[] 删除整个 block

c++ - 如何调试奇怪的内存泄漏 (C++)