我想通过在java用户空间中编写一些不良代码来了解内存碎片是如何发生的。
请指出一些可以帮助我理解这一点的想法。
据我所知,我认为,java堆碎片只能因垃圾收集错误而发生,但我的一些朋友却反其道而行之。
我只是想了解Java Heap碎片也可以通过编写糟糕的java代码应用程序来实现。
注意:我正在寻找可以证明这一论点的代码片段。
更新
实际上我们在嵌入式设备中使用的jvm是java 1.3。
谢谢,
森
答案 0 :(得分:0)
首先,垃圾收集器是特定于JVM的。我只知道OpenJRE和Sun JRE。在那里使用的垃圾收集器在收集期间压缩堆,因此由于内存管理的设计,堆碎片可以 NOT 发生。
用于内存管理的其他算法(过去经常使用)使用空闲列表并且不会在堆中移动内存。对于这样的管理方案,堆碎片可能是一个问题。