【问题标题】:How to obtain the consumption memory of running "exe"如何获取运行“exe”的消耗内存
【发布时间】:2011-03-27 14:41:16
【问题描述】:

我正在开发一个“在线裁判系统”,比如 SGU "http://acm.sgu.ru/"

我想获取使用Java运行“.exe”(.c/.cpp-->.exe)的准确消耗内存。

流程:提交代码-->hello.cpp/.c--编译-->hello.exe--运行-->结果

我想知道如何获取运行“hello.exe”的消耗内存

代码:

Runtime rn = Runtime.getRuntime();

Process proc =rn.exec("hello.exe");

谢谢你帮助我。

【问题讨论】:

    标签: java windows memory


    【解决方案1】:

    使用纯 Java 无法做到这一点。

    在 UNIX/Linux 机器上,您需要配置操作系统以启用进程记帐,然后读取“acct”文件中记录的信息。根据我阅读的acct(5) 手册条目,这记录了“平均”内存使用情况,而不是最大内存使用情况。

    Windows 系统必然是不同的。

    【讨论】:

    • 哦,我在 Windows 机器上... _baseMemory=MemoryMXBean.getHeapMemoryUsage().getUsed() _memoryUsed = (int) ((_memoryBean.getHeapMemoryUsage().getUsed() - _baseMemory) / 1000);这样可以吗?
    • @huaigu:MemoryMXBean 只处理分配给 JVM 的内存,不处理外部进程。
    • @huaigu - 如果你花时间回答别人的问题,你就会有足够的声望点来为你的问题提供“赏金”。这就是 SO 应该工作的方式。
    • 哦,对不起!我是使用SO的大一新生,下次会更加小心。谢谢你提醒我。
    • 另一种选择是将标签更改为更有可能吸引可能能够回答的人的注意力的东西。这个问题实际上是关于如何找出Windows上进程的内存使用情况......而不是Java或在线法官。
    【解决方案2】:

    GetProcessMemoryInfo 会告诉你一个进程在你打开一个句柄后使用了多少内存。微软甚至有一个example 用于使用该功能。

    要获取您要查找的进程 ID,您需要枚举系统中的所有进程。 Microsoft 有一个example,这也很有用。

    编辑: 这些示例都是用 C 语言编写的。这是为 Win32 API 设计的语言。在 Java 中,您要么需要将其转换为 JNI,要么找到执行相同操作的 Java 包。

    【讨论】:

    • 非常感谢,我试试看。
    猜你喜欢
    • 2013-02-26
    • 2012-03-13
    • 1970-01-01
    • 2019-10-10
    • 2021-08-10
    • 2023-03-19
    • 2012-09-17
    • 2014-07-15
    • 1970-01-01
    相关资源
    最近更新 更多