這篇文章主要講Java記憶體的分配與回收機制,主要包括Java運行時的資料區域、物件的建立、垃圾收集演算法#與回收策略。
參考的php中文網課程《JAVA 初級入門影片教學》,筆者只是基於教程中的內容對其總結概括並圖文化。這部分內容幾乎都是理解性的,為了便於理解和記憶所以盡量以圖文的或表格的形式來展現。
一.執行階段資料區
下圖是Java虛擬機器執行時的記憶體示意圖:
從圖中我們可以看到Java記憶體總共分成6個部分:
- ##程式計數器:
每個執行緒都有一個獨立的程式計數器,計數器可以看作是目前執行緒所執行的字節碼的行號指示器。字節碼解釋器工作時,就是透過改變這個計數器的值來選取下一條所需執行的字節碼指令、分支、循環、跳轉、異常處理,線程恢復等基礎功能都需要依賴這個計數器來完成。
- Java虛擬機器堆疊:
虛擬機器堆疊是執行緒私有的,生命週期與執行緒相同。虛擬機器堆疊為Java方法執行描述記憶體模型,每個方法在執行的同時會建立一個堆疊幀用於儲存局部變數表格、運算堆疊、動態連結、方法出口等資訊。 每一個方法從呼叫直到執行完成的過程,就對應一個堆疊幀在虛擬機器堆疊中入棧到出棧的過程。
- 本地方法堆疊:與虛擬機器堆疊所發揮的作用相似。差異是虛擬機器堆疊為執行Java方法服務,
本機方法堆疊為Native方法服務。
- 堆:
所有執行緒共享的區域。在虛擬機器啟動時創建,所有的物件實例幾乎都在堆上分配。 Java堆還可細分為:新生代和老年代,再細緻一點有Eden空間、From Survivor空間、To Survivor空間。不過無論如何劃分,儲存的都是物件實例,進一步劃分的目的是為了更好的回收內存,或是更快的分配內存。
- 方法區:
方法區是各個執行緒共享的記憶體區域,主要用於儲存已被虛擬機器載入的類別資訊、常數、靜態變數、即時編譯後的程式碼等資料。 這塊區域與Java堆一樣不需要連續的記憶體和可以選擇固定大小或可擴充外,還可以選擇不實作垃圾收集。這區域的記憶體回收目標主要是針對常數池的回收和對類型的卸載,垃圾收集行為在這個區域較少出現。
- 執行時間常數池:執行時間常數池是方法區的一部份。
Class檔案中除了有類別的版本、欄位、方法、介面等描述資訊外,還有一項資訊是常數池,用於存放編譯期產生的各種字面符和符號引用,這部分內容在類別載入後進入方法區的運行時常數池中存放。
- 直接記憶體:
直接記憶體也稱為堆外內存,它不是虛擬機運行時資料區的一部份。 JDK1.4後引入NIO類,是一種基於通道(Channel)與緩衝區(Buffer)的I/O方式,它可以使用Native函數庫直接在堆外分配內存,然後透過存儲在Java堆中的DirectByteBuffer物件作為引用對這塊記憶體進行操作。這樣能夠顯著提升效能,避免Java堆和Native堆中來回複製資料。
資料區域 | 概括 | 執行緒共用 |
---|---|---|
目前執行緒所執行的字節碼的行號指示器 | #否 | |
為Java方法執行建立棧幀儲存局部變數、操作數棧、動態連結、方法出口等資訊 | ||
與虛擬機棧類似,為Native方法服務 | 否 | |
#存放物件實例 | 是 | |
儲存虛擬機器已載入的類別資訊、常數、靜態變數、即時編譯後的程式碼等資料 | #是 | |
方法區的一部分,存放編譯期產生的字面量和符號引用 | #是 | |
被分配在堆外的內存,效能高,不受Java堆的大小限制 | 是 |
以上是Java記憶體分配與回收機制詳解(圖)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 Linux新版
SublimeText3 Linux最新版

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中