【问题标题】:During execution, how can a java program tell how much memory it is using?在执行期间,Java 程序如何知道它使用了多少内存?
【发布时间】:2008-10-27 06:25:12
【问题描述】:

在执行过程中,java程序如何知道它使用了多少内存?

我不在乎它的效率!

【问题讨论】:

    标签: java memory runtime


    【解决方案1】:

    VonC 的答案是一个交互式解决方案 - 如果您想以编程方式了解,您可以使用 Runtime.totalMemory() 找出 JVM 使用的总量,并使用 Runtime.freeMemory() 找出其中还有多少可用(即它已分配给 JVM,但未在 JVM 中分配 - 新对象可以使用此内存)。

    这些是实例方法 - 使用 Runtime.getRuntime() 首先获取单例实例。

    【讨论】:

    • 你是对的(我最初的反应是从外部监控),+1 给你 ;)
    • Jon Skeet,你好,你能告诉我如何为 C# 做同样的事情吗?在java中我会从总数中减去,对吧?而在 C# 中,我只在 Process 类中找到 PrivateMemorySize64,但我认为它只提供总内存,对吧?
    • @paulpaul1076:最好为此提出一个新问题。
    • @JonSkeet 看起来像已关闭它作为重复,抱歉
    【解决方案2】:

    如果你在某处有一个 java1.6 并且你的程序在 java 1.4.2、1.5 或 1.6 中运行,你可以启动一个visualVM session,连接到你的应用程序,然后跟踪内存(等等)

    (图片暂不显示,请参考Monitoring an application进行说明。)

    【讨论】:

    • 感谢 CMS,感谢支持此内容的人...考虑到这不是用户要求的内容 ;)
    【解决方案3】:

    这并不准确,但为了粗略估计,只需从 Runtime.getRuntime.totalMemory() 中减去 Runtime.getRuntime.freeMemory()。 在程序开始时执行此操作以了解 JVM's 开销内存使用情况,并在稍后执行时执行此操作。

    【讨论】:

      【解决方案4】:

      java.lang.Runtime.totalMemory() 将为您提供所需的信息:http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html

      【讨论】:

      • 仅链接答案不好的一个典型例子。我建议您完全删除它,因为其他答案提供了所有必要的信息。
      • @leonheess :如果您仔细观察,我的答案不是仅链接的答案。我给出了答案并提供了额外信息的链接。请再看一遍!
      • 我投了反对票,因为您的答案除了死链接之外没有任何解释。通常我会鼓励您添加解释,但其他答案已经涵盖了这一需求。
      猜你喜欢
      • 1970-01-01
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 2021-02-04
      • 2012-04-20
      相关资源
      最近更新 更多