我正在编写一个java类,它将与java MOA框架一起运行。这个类具有聚集点流的函数。此类由MOA应用程序调用。我想限制这个类的总内存(至少堆上使用的内存,可以排除堆栈内存)的使用(不包括MOA应用程序使用的内存)。
有可能吗?我希望这个类被MOA应用程序实例化和调用。我首先运行MOA应用程序,然后选择从GUI运行myclass来执行集群。由于这个原因,像-Xmx这样的JVM选项对我不起作用。
发布于 2011-06-03 19:33:28
您可以在类中嵌入逻辑,以每隔一段时间检查Runtime.freeMemory()和Runtime.maxMemory(),并在接近限制时采取措施(刷新缓存等)。有点“可疑”,因为不同的平台报告堆统计数据的方式不同。
您还可以将SoftReference方案用于某些“可选”存储。然后,如果GC需要堆,它将删除对象。(虽然这个计划是用大锤子敲打蚊子。)
当然,您也可以简单地计算对象分配的数量。
发布于 2011-06-03 19:18:33
您只能限制JVM的全局内存使用。
要限制类的使用,需要启动另一个JVM并在新的JVM中使用该类。
但是,通常最好修复代码,这样类就不会使用太多内存。;)
https://stackoverflow.com/questions/6226407
复制相似问题