Java 堆间接访问

标签 java heap-memory

目前我使用 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。

因此,您可以(实际上应该使用 Wea​​kReference 让 GC 完成它的工作)。然而,对于动态内存探索,已经存在应用程序,例如 VisualVM ,它使用允许外部进程查询 VM 的协议(protocol):JVMPI .

我认为你真的应该看看这个。

关于Java 堆间接访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2426160/

相关文章:

java - 媒体播放器返回错误并且没有声音播放

java - 使用 HeapDumpOnOutOfMemoryError 参数进行 JBoss 的堆转储

java - 如何从cmd永久增加芝麻存储的堆大小?

Java:Jersey Rest 服务 URL 映射问题

java - 在 MainActivity 中存储包含附加内容的 bundle

java - 如何删除事件处理程序?

java - isLabelProperty() 未被调用

c++ - 如何制作节点数组?

c++ - 在构造函数中动态分配新对象

java - 生产中的性能问题