2017-06-07 87 views
2

鑑於Java的自定義鏈表實現(從裂解編碼採訪)自定義鏈接列表實現垃圾收集

public class Node { 
    public Node next = null; 
    public int data; 

    public Node(int d) { 
     data = d; 
    } 

    protected void appendToTail(int d){ 
     Node end = new Node(d); 
     Node n = this; 
     while (n.next != null) { 
      n = n.next; 
     } 
     n.next = end; 
    } 
} 

如果我們要擺脫這種創建鏈接列表,然後遍歷它沒有一個臨時的變量指向原來的頭,即

Node list = new Node(5); 
list.appendToTail(2); 
list.appendToTail(4); 

給了我們一個清單

5 -> 2 -> 4 

如果我發行會發生什麼

list = list.next; 

這是內存泄漏,因爲它會在C?或者Java垃圾收集?

+2

看看[這口氣](https://stackoverflow.com/questions/6935579/garbage-collection-orphaned-linkedlist-links) –

回答

1

簡答:不,不會有內存泄漏。

如果您正在將指針前進到指向第二個節點,則表示對頭部的引用丟失。假設你沒有其他頭引用。

沒有任何引用指向它,這個對象將被標記爲垃圾收集。

+0

這是真棒知道,讓事情感覺更安全。謝謝! – mrybak3