【问题标题】:How can I find max size of Javas heap after run?运行后如何找到 Java 堆的最大大小?
【发布时间】:2011-12-14 10:19:06
【问题描述】:

我正在集群上运行一个大型 Java 应用程序,并且我有很多可用内存。因此,我计划以巨大的最大堆大小启动我的 JVM,并查看它是否有效。但是我需要多次运行它,我想知道在运行过程中堆实际上有多大。我知道我可以使用 VisualVM 之类的工具来做到这一点,但如果我不想运行基于 ui 的大型应用程序怎么办?在我的应用程序终止后,是否有一些参数可以发送到 jvm 以获取此类内存统计信息?或者也许是一个基于命令行的应用程序可以轻松做到这一点?

【问题讨论】:

    标签: java memory


    【解决方案1】:

    jstat 是你所追求的。它将每秒打印一次统计信息(或您指定的任何内容),然后您可以分析输出以找到最大值。

    【讨论】:

      【解决方案2】:

      您可以在应用程序中执行此操作:

      ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();
      

      然后对返回的MemoryUsage 对象使用getCommitted()getUsed()getMax() 方法。

      【讨论】:

        【解决方案3】:

        您需要使用以下内容来分析您的应用程序:

        http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html#LowMemoryDetection

        【讨论】:

          【解决方案4】:

          你可以利用下面这个方法来获取堆大小的值

          Runtime.getRuntime().totalMemory();

          【讨论】:

            【解决方案5】:

            一个程序的总已用/空闲内存可以在程序中通过java.lang.Runtime.getRuntime();获取

            运行时有几个与内存相关的方法。下面的代码示例演示了它的用法。

            运行时有几个与内存相关的方法。下面的代码示例演示了它的用法。

            import java.util.ArrayList;
            import java.util.List;
            
            public class PerformanceTest {
              private static final long MEGABYTE = 1024L * 1024L;
            
              public static long bytesToMegabytes(long bytes) {
                return bytes / MEGABYTE;
              }
            
              public static void main(String[] args) {
                // I assume you will know how to create a object Person yourself...
                List<Person> list = new ArrayList<Person>();
                for (int i = 0; i <= 100000; i++) {
                  list.add(new Person("Jim", "Knopf"));
                }
                // Get the Java runtime
                Runtime runtime = Runtime.getRuntime();
                // Run the garbage collector
                runtime.gc();
                // Calculate the used memory
                long memory = runtime.totalMemory() - runtime.freeMemory();
                System.out.println("Used memory is bytes: " + memory);
                System.out.println("Used memory is megabytes: "
                    + bytesToMegabytes(memory));
              }
            } 
            

            【讨论】:

              猜你喜欢
              • 2011-11-24
              • 2011-11-24
              • 2014-02-02
              • 1970-01-01
              • 2023-03-12
              • 1970-01-01
              • 2021-07-01
              • 2012-11-04
              • 1970-01-01
              相关资源
              最近更新 更多