【发布时间】:2012-02-10 08:30:12
【问题描述】:
我无法让 GC 始终如一地工作,以便测量某个类的实例使用的内存量。 GC 是不可预测的(花了 2 天时间在谷歌上搜索它,所以如果您提供参考,请确保您尝试过,它有效,否则我很可能已经知道您的解决方案)
我使用的是 Java EE 5,因此我无法使用 JVisuamVM。
所以我考虑使用 JNI,从 C++ 代码开始我的进程,并获取它们使用的内存量,因为我听说 C++ 可以做到这一点。
我已经将 JNI 用于“hello world”之类的东西,所以我不需要一步一步的介绍,我只需要知道我如何从 C++ 启动另一个进程 (类似于 Runtime.getRuntime().exec("java MyClassWithMainMethod");),以及我如何获取该进程使用的内存。
【问题讨论】:
-
没有标准的方法来做到这一点,你正在使用什么操作系统?
-
我不明白你原来的问题。您想测量一个特定类使用的内存量,您可以通过从使用的总内存中计算该量来做到这一点,对吗?您是否考虑过使用 MXBeans,如果是,有什么问题? “GC 不可预测”是什么意思?收集的时机或结果?你试过不同的 GC 吗?
-
C++ 可以为 C++ 中的内存做到这一点。 JVM 在启动时分配最大堆大小,因此它看起来一直是 100%。我建议您使用适用于您的系统的内存分析器。
-
我不同意。 Windows 中的 processmonitor 显示当前内存消耗,而不是当前分配的内存。因此有可能从外部监控内存消耗。
标签: java c++ memory process java-native-interface