繁体   English   中英

为什么像 HashMap 或 LinkedList 这样的 Java 容器不重用在添加新元素时被删除的内部节点?

[英]Why don`t Java containers like HashMap or LinkedList reuse internal Nodes which were deleted when adding new elements?

像 LinkedList 这样的 class 将对象存储在称为 Node 的内部 class 实例中。 每次添加新元素时,都会使用“new”运算符创建一个新节点。 为什么它不尝试重用先前为后来删除的元素创建的节点? LinkedList 可以存储为删除的元素创建的节点列表,并在添加新元素时尝试重用它们。 此外,它可以将未使用的节点存储在软引用下,以免浪费 memory。重用节点应该减少垃圾收集器的负载并减少其调用次数。 为什么 Java 不那样做?

此外,它可以将未使用的节点存储在软引用下,以免浪费 memory。重用节点应该减少垃圾收集器的负载并减少其调用次数。

Java 的垃圾收集针对具有许多寿命较短的对象而不是寿命较长的对象的情况进行了优化——尤其是对于像链表节点这样的小对象。 由于 Java GC 的分代方法,丢弃现有对象并重新分配它们通常性能更好。 此外,维护软引用通常会增加明显的开销。

对于大多数应用程序,您描述的方法会使事情变得更糟,而不是更好。 一般来说,Java 垃圾收集器非常擅长它的工作,并且出于 memory 的原因尝试手动管理 Java 个对象很少能打败它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM