限制java类的内存使用

时间:2011-06-03 11:16:24

标签: java memory jvm cluster-analysis moa

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

有可能吗?我希望它明确表示该类正在被MOA应用程序实例化和调用。我首先运行MOA应用程序然后选择从GUI运行myclass来执行集群。由于这个原因,像-Xmx这样的JVM选项对我不起作用。

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

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

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

但是,通常最好修复代码,以便类永远不会占用太多内存。 ;)