搜尋
首頁JavaJava基礎3分鐘了解JAVA中GC的概念

3分鐘了解JAVA中GC的概念

Nov 30, 2019 pm 04:36 PM
gc概念

3分鐘了解JAVA中GC的概念

前言

#GC(Garbage Collection)是我們在學習JVM 的過程中不可避免的一道坎,接下來,我們就來系統的學習一下GC。

3分鐘了解JAVA中GC的概念

做一件事情之前,我們一定要去知道為什麼要去做,這裡不只是指GC,更適用我們日常的學習和生活,知其然,知其所以然,方能百戰不殆。

(推薦影片:java影片教學)  

下面我們先去了解為什麼要有GC,以及GC 在JVM 中扮演了一個什麼樣的角色,起到了什麼的作用?

為什麼要有GC

用過C 的同學可能知道,物件所佔的內存在程式結束運作之前一直被佔用,在明確釋放之前不能分配給其它對象。如果我們不去手動的清除這些無用的對象,記憶體很快就被佔滿,而在JVM 中,GC 所起到的作用就是一個清道夫,它可以幫助我們去判定哪些對像是無用對象,怎麼進行垃圾收集,以及決定記憶體分代和記憶體分配的策略**。

可能有同學會問了,既然我們的 JVM 會給我們做 GC 的工作,為什麼我們還要去學習 GC 呢,一切交給 JVM 不好嗎?當然,在我們的日常情況下,我們通常不會去關心GC 的一些細節,但是當我們遇到內存洩露,內存溢出,高並發瓶頸的時候,我們就需要去對GC 開刀,進行更為細緻的監控和調節。

記憶體外洩:指程式中己動態分配的堆記憶體因某些原因程式未釋放或無法釋放,造成系統記憶體的浪費,導致程式運作速度減慢甚至系統崩潰等嚴重後果。

記憶體溢位:應用系統中存在無法回收的記憶體或使用的記憶體過多,最終使得程式運行要用到的記憶體大於能提供的最大記憶體。

那麼現在問題來了,我們要進行垃圾回收,首先我們需要知道垃圾在哪

垃圾在哪

前面我們講了JVM 的運行時記憶體區域,知道線程可以分為線程獨佔區和線程共享區,其中線程獨佔區(程式計數器,虛擬機棧,本地方法棧)的記憶體生命週期是和線程保持一致,且這幾個區域分配的記憶體大小跟類別的大小有關,也就是說,當我們的類別結構固定之後,這部分的記憶體就不會再發生更改,當方法或執行緒結束的時候,記憶體自然就跟隨著回收了.

而線程共享區的堆內存和方法區則不一樣,堆內存和方法區所用的內存是在編譯期間無法確定的,因為一個接口的不同實現,一個方法的不同控制條件分支所執行的程式碼可能完全相反,我們只有在運行時才知道會創建哪些對象,這部分的內存的分配和回收是動態的,而我們的GC 關注的就是該部分的內存。

打個比方來說:JVM 如果是一輛車,線程獨佔區的就像是零件,在出廠時這些零件的壽命基本上都是已知的,線程共享區就像是汽油,汽油的消耗跟我們所採用的路線有關,所以我們關注的部分就是這部分會動態變化的,比如如何開車才能更省油~

本文來自php中文網,java教程欄目,歡迎學習!  

以上是3分鐘了解JAVA中GC的概念的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:博客园。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

DVWA

DVWA

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

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器