垃圾回收会更改Java中的对象地址吗?

问题描述 投票:1回答:1

我读到垃圾回收会在运行时导致内存碎片问题。为了解决此问题,压缩由JVM完成,在JVM中,它接受所有活动对象并为其分配连续的内存。这意味着对象地址必须不时更改吗?另外,如果发生这种情况,

  1. 是否也重新分配了对这些对象的引用?
  2. 这不会引起严重的性能问题吗? Java如何应对?
java performance memory-management garbage-collection jvm
1个回答
0
投票

如果在存储器中移动对象,其地址将改变。因此,指向它的引用将需要更新。当连续(在内存中)对象序列中的对象被删除时,就会发生内存碎片。这会在存储空间中创建一个hole,这通常是不好的,因为相邻的存储块具有更快的访问时间和更高的契机线拟合可能性。应该注意的是,使用间接表可以防止参考更新达到所使用的最大间接级别。

垃圾回收不仅在Java中而且在其他语言(例如C#)中也具有中等的性能开销。 Java如何应对这种情况,执行垃圾回收的策略以及如何最大程度地降低垃圾回收对性能的影响取决于所使用的特定JVM,因为每个JVM都可以实现垃圾回收,但是这很令人满意。唯一的要求是它符合JVM规范。

但是,作为一名程序员,您应该遵循一些最佳实践,以充分利用垃圾回收并最大程度地降低其对应用程序的性能影响。参见thisalso thisthisthis blog postthis other blog post。您可能要检查JVM specs,但它有点密集。

© www.soinside.com 2019 - 2024. All rights reserved.