回覆列表
  • 1 # 健全人

    java有垃圾回收機制,大多數情況下不需要刻意去關心這方面。就我所瞭解到的java來說,只有IO流物件,資料庫連線物件等方面,記得隨手close就好了。

  • 2 # 交易沒有銀彈

    要研究記憶體洩露,先研究清楚gc機制,瞭解了gc你才會瞭解在什麼樣的情況下會產生記憶體洩露,對於c語言一般可以採用工具,比如ccmaloc或者dmalloc等等,java暫時還不清楚,不是搞java的

  • 3 # 會點程式碼的大叔

    要想知道如何預防記憶體洩漏,那麼就要知道記憶體為什麼會洩漏。

    想要知道記憶體為什麼會洩漏,那麼先得知道Java的記憶體是哪裡。

    Java的記憶體的組成

    程式計數器(Program Counter Register)、Java棧(VM Stack)、本地方法棧(Native Method Stack)、方法區(Method Area)、堆(Heap)。

    程式計數器

    儲存指令地址,也就是存的是下一條執行所在的儲存地址。

    不會發生記憶體溢位異常。

    虛擬機器棧

    就是Stack,存放的是一個個的棧幀,每個棧幀對應一個被呼叫的方法。

    StackOverflowError:執行緒請求的棧深度大於虛擬機器所允許的深度。比如遞迴呼叫一個方法。

    OutOfMemoryError:虛擬機器在動態擴充套件棧時無法申請到足夠的記憶體空間。比如無限地建立執行緒,併為每個執行緒迴圈增加分配記憶體。本地方法棧

    同Java虛擬機器棧

    Java堆

    儲存物件本身的以及陣列,堆是被所有執行緒共享的,在JVM中只有一個堆。

    OutOfMemoryError:沒有記憶體完成例項分配,或者不能再擴充套件。比如無限new物件,在List中儲存(這樣不會被回收)

    方法區

    儲存了每個類的資訊(包括類的名稱、方法資訊、欄位資訊)、靜態變數、常量以及編譯器編譯後的程式碼等,也是被執行緒共享的。

    OutOfMemoryError:無法滿足記憶體分配要求。比如生成大量的動態類。

  • 中秋節和大豐收的關聯?
  • 怎樣才能得到好人緣?