我正在使用Java编写链接列表。
为了从linkedList中删除一个节点,我只是指向下一个指针
对于Ex:3-> 4-> 5是我的链表。现在我删除4所以它将像3-> 5,并且将删除4的链接。
但是在C ++中会有free()命令删除4占用的内存空间。
这个内存空间是否可以在Java中免费使用?
答案 0 :(得分:2)
Java
不同, C++
有一个垃圾收集器来清除内存中未引用的位置,所以它是免费的(虽然不一定是立即的)。
答案 1 :(得分:0)
您可以使用此算法解决问题并释放无人认领的内存,我们在Java中将垃圾收集器命名为System.gc()
。你可以用这个人来完成这项工作。
public boolean delete(final int searchValue)
{
Node tmpNode = head;
Node prevNode = null;
boolean deletedANode = false;
while (tmpNode != null)
{
if (tmpNode.data == searchValue)
{
if (tmpNode == head)
{
head = head.next;
}
else
{
prevNode.next = tmpNode.next;
}
deletedANode = true;
}
else
{
// only advance the prevNode when there's no match.
prevNode = tmpNode;
}
tmpNode = tmpNode.next;
}
return deletedNode;
}
答案 2 :(得分:0)
一个鲜为人知的事实是Java实际上有4 garbage collectors,而不只是一个。
您为JVM指定的垃圾收集器参数可能会影响您的应用程序性能。并行'默认情况下,垃圾收集器处于打开状态,但如果应用程序的堆大小超过4GB,则较新的G1垃圾收集器可能更合适。
一般来说,任何垃圾收集调整都应该绝对完成,你应该监视垃圾收集日志作为起点。有关如何调整GC性能的最佳信息可以在here
找到