如何仅在java中确定引用对象的内存使用情况?即。在运行Java应用程序期间从内存使用中排除“死”对象。
我希望显示此信息,并在达到某个标准时触发警报。我还想用它来测量将文件导入我的应用程序时占用多少内存。
我的应用程序由许多进程组成,所有进程都在同一时间运行,其中一个进程将文件导入内存然后导入数据库。如果我使用Runtime.getRuntime.freeMemory或MemoryPoolMXBean测量内存使用量并且所有其他进程都在运行,由于这些进程内存使用率上升和下降,并且由于GC没有“实时”运行,内存使用情况会显示死机对象以及引用的对象。对于我当时占用记忆的内容,这并不是一个明确的迹象。
有没有办法只在任何时候确定引用对象使用的内存?
答案 0 :(得分:1)
您可以查看JConsole
,看看是否符合您的需要
还有VisualVM
。
他们让您监控应用程序,但我不知道您如何在自己的应用程序中执行此操作,以便在内存不足时触发警报。
此外,如果您希望更快地对对象进行垃圾回收,则可以使用WeakReference
和SoftReference
。
我发现了一篇关于如何查询Java对象大小的好文章。它有点长,所以我不能在这里发布任何一个。但是,这里是链接:http://www.javamex.com/tutorials/memory/instrumentation.shtml这是关于同一主题的{SO}问题determining java memory usage
答案 1 :(得分:0)