繁体   English   中英

Java中的程序化内存跟踪

[英]programmatic memory tracking in java

我正在使用一个大型的现有系统,不能使用其他问题中提到的任何外部探查器工具。

话虽这么说,我是否有任何编程方式让java打印出仍然分配的变量并使用堆空间? 变量名称和类型将是理想的选择,但任何标识变量的信息都将有所帮助。

  1. 对于每个类,添加一个静态int成员(最初为零),以使其在构造函​​数中递增,并在析构函数中递减。 这为您提供了每个类的对象计数。 (如果系统是多线程的,则可能需要同步计数器inc / dec)
  2. 定期打印所有类的对象计数和Runtime.getRuntime().totalMemory()

您尝试过VisualVM吗? 它是非侵入性的,应该能够使您对内存使用情况有个好主意。

最坏的情况是,您总是可以终止项目并在核心转储上格格不入(假设您正在支持核心转储的OS上运行)。

注意将任何代码放入finalize中 ,因为任何将代码放入finalize中都可能会延长Object的寿命; 实际上,在极端情况下,它可能导致对象永远不会被GC。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM