可以通过编程确定由于java引用而保留了多少内存吗?

可以通过编程确定由于java引用而保留了多少内存吗?,java,Java,我不是问一个引用占用多少内存。我想知道垃圾收集的反意义 i、 给定引用X,该引用有多少内存不允许垃圾收集器释放 一个人能做到吗 显然,如果可以,并且如果有一组引用(ab和C),那么很可能会在保留的内存中有一些重叠(即a和B可能都与相同的内存位有一些连接),这没关系 关键是,尝试找出内存泄漏发生的原因。如果有一个具有长寿命对象的程序,则可以通过编程确定哪些对象正在增长,然后对所述对象进行冲洗和重复 那么有可能吗?记忆测量仪看起来很有趣,但我认为问题是关于你不知道的记忆——即;内存意外膨胀,您正在寻

我不是问一个引用占用多少内存。我想知道垃圾收集的反意义

i、 给定引用X,该引用有多少内存不允许垃圾收集器释放

一个人能做到吗

显然,如果可以,并且如果有一组引用(ab和C),那么很可能会在保留的内存中有一些重叠(即a和B可能都与相同的内存位有一些连接),这没关系

关键是,尝试找出内存泄漏发生的原因。如果有一个具有长寿命对象的程序,则可以通过编程确定哪些对象正在增长,然后对所述对象进行冲洗和重复


那么有可能吗?

记忆测量仪看起来很有趣,但我认为问题是关于你不知道的记忆——即;内存意外膨胀,您正在寻找原因的线索


VisualVM有一个内存分析器,它可以告诉您保留的对象是什么类型,这是一个很好的起点。我不知道有什么工具可以扭转这种局面,并告诉您哪些对象保留了它们。

可能正在阅读Visual VM(或)Jhat代码,这可能会对您有所帮助。如果您正在考虑实现自己的探查器,您可能想看看的各种
xxxMemory()
方法。真的。谢谢路易斯·瓦瑟曼,看起来很棒。我知道你可以使用不安全的。。。至少这是一个开始,它对我来说确实很有效。我可以为每个类提供一个“printMem”函数,并迭代所有对象。如果我在对象中有长时间运行的函数,我可以为它们提供一个私有打印函数,该函数经常打印数据。让我对发生的事情有了更好的了解。