如何为LinkedList自动垃圾收集工作
Java - How does automatic garbage collection work for LinkedList?
本文关键字:工作 LinkedList 更新时间:2023-10-16
在c++中,你需要手动删除LinkedList中的节点:
Node* node1 = new Node(s);
Node* node2 = new Node(s);
Node* node3 = new Node(s);
node1 -> next = node2;
node2 -> next = node3;
//remove node2 by:
delete node2;
node1 -> next = node3;
对于Java(这是我第一天学习它)如何自动垃圾回收知道什么时候采取行动?会:
node1.next = node3;
是足够的吗?
一旦java中的对象在作用域内没有引用,它就有资格被垃圾收集。
如果你有一个像这样的单链表
(1) -> (2) -> (3)
假设head = node 1
那么是的,设置head.next = head.next.next
将允许node 2
在某个时刻被GC。
然而,在您的示例中,node2
不能消失,直到您显式声明
node2 = null
和node1.next = node3
,因为作为node2
的引用将使其保持在作用域中。
注意,node2 = null
实际上并没有对node2
曾经指向的Node
对象做任何事情。相反,它只是将引用(因为java中的所有对象实际上都是指针)设置为null。
Java垃圾收集器定期遍历整个对象引用映射,以查找和删除未引用或循环引用的对象。您可以提示JVM开始垃圾收集的迭代,但是您无法实际地指示JVM确定地进行垃圾收集。
在你的情况下
node1.next = node3;
就足够了,因为node2
将不再有任何对象引用它
假设您修改了LinkedList
,使得不再有对node2
的引用,那么垃圾收集器可以释放它的内存。换句话说,假设没有其他对node2
的引用,node1.next = node3;
应该足够了。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- C++:正在检查LinkedList中的回文-递归方法-错误
- 创建LinkedList退出,返回代码为-11(SIGSEGV)
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 在c++中实现LinkedList时,应出现未处理的错误
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 有人能解释一下为什么下界是这样工作的吗C++的
- 如何为LinkedList自动垃圾收集工作