国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 Java Java基礎(chǔ) 詳解Java自動垃圾回收教程

詳解Java自動垃圾回收教程

Jun 18, 2020 pm 01:21 PM
java 垃圾回收

詳解Java自動垃圾回收教程

詳解Java自動垃圾回收教學(xué)

#如果在Java程式設(shè)計(jì)中使用不當(dāng),再大的記憶體也會耗光。本文就來為大家介紹其中一點(diǎn):如何節(jié)省Java記憶體空間,讓Java程式自動回收垃圾。

要點(diǎn)一、認(rèn)識Java的自動垃圾回收

垃圾回收是Java語言的一大特性,方便了編程,是以消耗性能為代價的。而垃圾在這裡只無用的對象。而C 是需要程式設(shè)計(jì)師自己寫析構(gòu)函數(shù)來釋放記憶體的,麻煩,也有可能忘記而導(dǎo)致記憶體外洩。

Java語言對記憶體的分配管理是透過JVM內(nèi)部機(jī)制決定的。程式設(shè)計(jì)師可以不關(guān)心其處理。

要點(diǎn)二、垃圾回收的原理和意義

Java虛擬機(jī)中有個稱為垃圾回收器的東西,實(shí)際上這個東西也許真正不存在,或者是已經(jīng)整合到JVM中了,但這無關(guān)緊要,我們?nèi)匀豢梢苑Q為為垃圾回收器。

垃圾回收器的作用是尋找和回收(清理)無用的物件。以便讓JVM更有效的使用記憶體。

垃圾回收器的運(yùn)作時間是不確定的,由JVM決定,在運(yùn)作時是間歇執(zhí)行的。雖然可以透過System.gc()來強(qiáng)制回收垃圾,但是這個命令下達(dá)後無法保證JVM會立即回應(yīng)執(zhí)行,但經(jīng)驗(yàn)表明,下達(dá)命令後,會在短期內(nèi)執(zhí)行你的請求。 JVM通常會覺得記憶體緊缺時候去執(zhí)行垃圾回收作業(yè)。

垃圾回收過於頻繁會導(dǎo)致效能下降,過於稀疏會導(dǎo)致記憶體缺乏。這個JVM會將其控製到最好,不用程式設(shè)計(jì)師擔(dān)心。但有些程式在短期會吃掉大量內(nèi)存,而這些恐怖的對像很快就使用結(jié)束了,這時候也許有必要強(qiáng)制下達(dá)一條垃圾回命令,這是很有必要的,以便有更多可用的物理內(nèi)存。

從上面了解到,沒有用的物件就是垃圾。準(zhǔn)確的說,當(dāng)沒有任何執(zhí)行緒存取一個物件時,該物件就符合垃圾回收的條件。

對於String,存在一個字串池,這個不屬於本文討論的範(fàn)圍,字串池中的垃圾回收,演算法和這裡所討論的垃圾回收完全是兩碼事。但不得不說的是,字串的胡亂拼接,往往導(dǎo)致效能急劇下降,尤其是在龐大的循環(huán)語句中,拼接字串就是在讓程式慢性自殺。這也是很多Java程式設(shè)計(jì)師容易犯的毛病。

字串既然是池,就是為了緩衝,為了有更高的命中率,因此垃圾回收的頻率也許會比JVM物件垃圾回收器低很多。
垃圾回收器僅僅能做的是盡可能保證可用記憶體的使用效率,讓可用記憶體得到高效率的管理。程式設(shè)計(jì)師可以影響垃圾回收的執(zhí)行,但不能控制。

要點(diǎn)三、透過程式影響垃圾回收

雖然程式設(shè)計(jì)師無法控制JVM的垃圾回收機(jī)制。但是可以透過程式設(shè)計(jì)的手段來影響,影響的方法是,讓物件符合垃圾回收條件。

分別說來有幾個:

1、將無用物件賦值為null.

2、重新為引用變量賦值。例如:

Person p = new Person("aaa");
  p = new Person("bbb");

這樣,new Person("aaa")這個物件就是垃圾了──符合垃圾回收條件了。

3、讓相互連結(jié)的物件稱為「島嶼」物件

Person p1 = new Person("aaa"); 
Person p2 = new Person("bbb"); 
Person p3 = new Person("ccc");  
p1=p2; 
p2=p3; 
p3=p1;  
p1=null; 
p2=null;
p3=null;

在沒有對p1、p2、p3置null之前,它們之間是一種三角戀關(guān)係。分別置null,三角戀關(guān)係依然存在,但是三個變數(shù)不在使用它們了。三個Person物件就組成了一個孤島,最後死在堆上──被垃圾回收掉。

4、強(qiáng)制的垃圾回收System.gc()

#實(shí)際上這裡的強(qiáng)制,是程式設(shè)計(jì)師的意願、建議,什麼時候執(zhí)行是JVM的垃圾回收器說了算。

呼叫垃圾回收也不一定能保證未使用的物件一定能從記憶體中刪除。

唯一能保證的是,當(dāng)你內(nèi)部有極少的情況,垃圾回收器在程式拋出OutofMemaryException之前運(yùn)行一次。

感謝大家的閱讀,希望大家收益多多。

本文轉(zhuǎn)自:http://community.itbbs.cn/thread/17817/

推薦教學(xué):《java影片教學(xué)

以上是詳解Java自動垃圾回收教程的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1600
29
PHP教程
1502
276
如何使用JDBC處理Java的交易? 如何使用JDBC處理Java的交易? Aug 02, 2025 pm 12:29 PM

要正確處理JDBC事務(wù),必須先關(guān)閉自動提交模式,再執(zhí)行多個操作,最後根據(jù)結(jié)果提交或回滾;1.調(diào)用conn.setAutoCommit(false)以開始事務(wù);2.執(zhí)行多個SQL操作,如INSERT和UPDATE;3.若所有操作成功則調(diào)用conn.commit(),若發(fā)生異常則調(diào)用conn.rollback()確保數(shù)據(jù)一致性;同時應(yīng)使用try-with-resources管理資源,妥善處理異常並關(guān)閉連接,避免連接洩漏;此外建議使用連接池、設(shè)置保存點(diǎn)實(shí)現(xiàn)部分回滾,並保持事務(wù)盡可能短以提升性能。

如何使用Java的日曆? 如何使用Java的日曆? Aug 02, 2025 am 02:38 AM

使用java.time包中的類替代舊的Date和Calendar類;2.通過LocalDate、LocalDateTime和LocalTime獲取當(dāng)前日期時間;3.使用of()方法創(chuàng)建特定日期時間;4.利用plus/minus方法不可變地增減時間;5.使用ZonedDateTime和ZoneId處理時區(qū);6.通過DateTimeFormatter格式化和解析日期字符串;7.必要時通過Instant與舊日期類型兼容;現(xiàn)代Java中日期處理應(yīng)優(yōu)先使用java.timeAPI,它提供了清晰、不可變且線

比較Java框架:Spring Boot vs Quarkus vs Micronaut 比較Java框架:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

前形式攝取,quarkusandmicronautleaddueTocile timeProcessingandGraalvSupport,withquarkusoftenpernperforminglightbetterine nosserless notelless centarios.2。

垃圾收集如何在Java工作? 垃圾收集如何在Java工作? Aug 02, 2025 pm 01:55 PM

Java的垃圾回收(GC)是自動管理內(nèi)存的機(jī)制,通過回收不可達(dá)對象釋放堆內(nèi)存,減少內(nèi)存洩漏風(fēng)險(xiǎn)。 1.GC從根對象(如棧變量、活動線程、靜態(tài)字段等)出發(fā)判斷對象可達(dá)性,無法到達(dá)的對像被標(biāo)記為垃圾。 2.基於標(biāo)記-清除算法,標(biāo)記所有可達(dá)對象,清除未標(biāo)記對象。 3.採用分代收集策略:新生代(Eden、S0、S1)頻繁執(zhí)行MinorGC;老年代執(zhí)行較少但耗時較長的MajorGC;Metaspace存儲類元數(shù)據(jù)。 4.JVM提供多種GC器:SerialGC適用於小型應(yīng)用;ParallelGC提升吞吐量;CMS降

了解網(wǎng)絡(luò)端口和防火牆 了解網(wǎng)絡(luò)端口和防火牆 Aug 01, 2025 am 06:40 AM

NetworkPortSandFireWallsworkTogetHertoEnableCommunication whereSeringSecurity.1.NetWorkPortSareVirtualendPointSnumbered0-655 35,with-Well-with-Newonportslike80(HTTP),443(https),22(SSH)和25(smtp)sindiessingspefificservices.2.portsoperateervertcp(可靠,c

在C#中管理內(nèi)存洩漏和垃圾收集 在C#中管理內(nèi)存洩漏和垃圾收集 Aug 02, 2025 am 04:24 AM

內(nèi)存洩漏在C#中確實(shí)存在且影響深遠(yuǎn),尤其對長期運(yùn)行的應(yīng)用程序。常見信號包括內(nèi)存持續(xù)上升、GC頻繁但無明顯釋放,可通過VisualStudio、dotMemory等工具分析確認(rèn)。主要原因及解決方法如下:1.忘記取消事件訂閱,應(yīng)手動取消或使用弱引用;2.靜態(tài)集合未清理,需定期移除條目或使用WeakReference;3.未釋放非託管資源,應(yīng)實(shí)現(xiàn)IDisposable並使用using語句。此外,理解分代式GC機(jī)制和優(yōu)化內(nèi)存使用如減少臨時對象創(chuàng)建、合理使用結(jié)構(gòu)體、避免LOH碎片化也有助於提升性能。掌握這

以身作則,解釋說明 以身作則,解釋說明 Aug 02, 2025 am 06:26 AM

defer用於在函數(shù)返回前執(zhí)行指定操作,如清理資源;參數(shù)在defer時立即求值,函數(shù)按後進(jìn)先出(LIFO)順序執(zhí)行;1.多個defer按聲明逆序執(zhí)行;2.常用於文件關(guān)閉等安全清理;3.可修改命名返回值;4.即使發(fā)生panic也會執(zhí)行,適合用於recover;5.避免在循環(huán)中濫用defer,防止資源洩漏;正確使用可提升代碼安全性和可讀性。

比較Java構(gòu)建工具:Maven vs. Gradle 比較Java構(gòu)建工具:Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

Gradleisthebetterchoiceformostnewprojectsduetoitssuperiorflexibility,performance,andmoderntoolingsupport.1.Gradle’sGroovy/KotlinDSLismoreconciseandexpressivethanMaven’sverboseXML.2.GradleoutperformsMaveninbuildspeedwithincrementalcompilation,buildcac

See all articles