2

我正在编写一个使用 java MOA 框架运行的 java 类。该类具有对点流进行聚类的功能。此类由 MOA 应用程序调用。我想限制这个类的总内存(至少堆上使用的内存,可以排除堆栈内存)使用(不包括MOA应用程序使用的内存)。

是否可以?我希望很清楚该类正在被 MOA 应用程序实例化和调用。我首先运行 MOA 应用程序,然后选择从 GUI 运行 myclass 来执行集群。由于这个原因,像 -Xmx 这样的 JVM 选项对我不起作用。

4

2 回答 2

3

您可以在类中嵌入逻辑以定期检查 Runtime.freeMemory() 和 Runtime.maxMemory() 并在限制似乎接近时采取措施(刷新缓存等)。有点“不确定”,因为不同的平台报告堆统计数据不同。

您还可以对某些“可选”存储使用 SoftReference 方案。然后如果需要堆,GC 将删除对象。(虽然这个计划是用大锤打蚊子。)

当然,您可以简单地计算您的对象分配。

于 2011-06-03T11:33:27.817 回答
0

您只能限制 JVM 的全局内存使用量。

要限制类的使用,您需要启动另一个 JVM 并在新的 JVM 中使用该类。

但是,通常最好修复您的代码,这样该类就不会使用太多内存。;)

于 2011-06-03T11:18:33.440 回答