目前我使用 HashMap<Class, Set<Entry>>
,其中可能包含数百万个短生命周期和长生命周期的对象。 (Entry
是围绕 Object
和一个整数的包装类,这是一个重复计数)。
我想:这些Object
s 都存储在 JVM 的 Heap 中。然后我的问题浮现在我的脑海中;而不是为 HashMap
分配大量内存, 是否可以做得更好(更少的内存消耗)?
有没有办法访问Object
基于 Class
间接在 Java 堆中的 s的 Object
s?
“间接”的意思是:没有指向 Object
的指针. “访问”的意思是:检索指向 Object
的指针在堆中。
最佳答案
我不太明白你的代码的用途,但我担心你的代码涉及一些频繁的 OutOfMemoryError,不是吗?
无论如何。
您可以获得对不会阻止这些对象被垃圾回收的对象的引用,例如 SoftReference(执行 myObj = thisObj;
时使用的默认对象)、WeakReference 和 PhantomReference。
因此,您可以(实际上应该使用 WeakReference 让 GC 完成它的工作)。然而,对于动态内存探索,已经存在应用程序,例如 VisualVM ,它使用允许外部进程查询 VM 的协议(protocol):JVMPI .
我认为你真的应该看看这个。
关于Java 堆间接访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2426160/