成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

垃圾清理勢在必行——Java垃圾收集算法

開發 后端 算法
Java語言建立了垃圾收集機制,即GC,用以跟蹤正在使用的對象和發現并回收不再使用的對象,垃圾清理勢在必行,以下講述java垃圾收集算法。

1.Java垃圾收集算法的核心思想

Java語言建立了垃圾收集機制,用以跟蹤正在使用的對象和發現并回收不再使用(引用)的對象。Java垃圾回收算法可以有效防范動態內存分配中可能發生的兩個危險:因內存垃圾過多而引發的內存耗盡,以及不恰當的內存釋放所造成的內存非法引用。

垃圾收集算法的核心思想是:對虛擬機可用內存空間,即堆空間中的對象進行識別,如果對象正在被引用,那么稱其為存活對象,反之,如果對象不再被引用,則為垃圾對象,可以回收其占據的空間,用于再分配。垃圾收集算法的選擇和垃圾收集系統參數的合理調節直接影響著系統性能,因此需要開發人員做比較深入的了解。

2.觸發主GC(Garbage Collector)的條件

JVM進行次GC的頻率很高,但因為這種GC占用時間極短,所以對系統產生的影響不大。更值得關注的是主GC的觸發條件,因為它對系統影響很明顯。總的來說,有兩個條件會觸發主GC:

①當應用程序空閑時,即沒有應用線程在運行時,GC會被調用。因為GC在優先級***的線程中進行,所以當應用忙時,GC線程就不會被調用,但以下條件除外。

②Java堆內存不足時,GC會被調用。當應用線程在運行,并在運行過程中創建新對象,若這時內存空間不足,JVM就會強制地調用GC線程,以便回收內存用于新的分配。若GC一次之后仍不能滿足內存分配的要求,JVM會再進行兩次GC作進一步的嘗試,若仍無法滿足要求,則 JVM將報“out of memory”的錯誤,Java應用將停止。

由于是否進行主GC由JVM根據系統環境決定,而系統環境在不斷的變化當中,所以主GC的運行具有不確定性,無法預計它何時必然出現,但可以確定的是對一個長期運行的應用來說,其主GC是反復進行的。

3.減少GC開銷的措施

根據上述GC的機制,程序的運行會直接影響系統環境的變化,從而影響GC的觸發。若不針對GC的特點進行設計和編碼,就會出現內存駐留等一系列負面影響。為了避免這些影響,基本的原則就是盡可能地減少垃圾和減少GC過程中的開銷。具體措施包括以下幾個方面:

(1)不要顯式調用System.gc()

此函數建議JVM進行主GC,雖然只是建議而非一定,但很多情況下它會觸發主GC,從而增加主GC的頻率,也即增加了間歇性停頓的次數。

(2)盡量減少臨時對象的使用

臨時對象在跳出函數調用后,會成為垃圾,少用臨時變量就相當于減少了垃圾的產生,從而延長了出現上述第二個觸發條件出現的時間,減少了主GC的機會。

(3)對象不用時***顯式置為Null

一般而言,為Null的對象都會被作為垃圾處理,所以將不用的對象顯式地設為Null,有利于GC收集器判定垃圾,從而提高了GC的效率。

(4)盡量使用StringBuffer,而不用String來累加字符串(詳見blog另一篇文章JAVA中String與StringBuffer)

由于String是固定長的字符串對象,累加String對象時,并非在一個String對象中擴增,而是重新創建新的String對象,如Str5=Str1+Str2+Str3+Str4,這條語句執行過程中會產生多個垃圾對象,因為對次作“+”操作時都必須創建新的String對象,但這些過渡對象對系統來說是沒有實際意義的,只會增加更多的垃圾。避免這種情況可以改用StringBuffer來累加字符串,因StringBuffer是可變長的,它在原有基礎上進行擴增,不會產生中間對象。

(5)能用基本類型如Int,Long,就不用Integer,Long對象

基本類型變量占用的內存資源比相應對象占用的少得多,如果沒有必要,***使用基本變量。

(6)盡量少用靜態對象變量

靜態變量屬于全局變量,不會被GC回收,它們會一直占用內存。

(7)分散對象創建或刪除的時間

集中在短時間內大量創建新對象,特別是大對象,會導致突然需要大量內存,JVM在面臨這種情況時,只能進行主GC,以回收內存或整合內存碎片,從而增加主GC的頻率。集中刪除對象,道理也是一樣的。它使得突然出現了大量的垃圾對象,空閑空間必然減少,從而大大增加了下一次創建新對象時強制主GC的機會。可以說基于Java垃圾回收算法的GC機制有效的減少了Java在內存管理方面的錯誤。

【編輯推薦】

  1. Java虛擬機發展回顧 為跨平臺而生
  2. Java虛擬機概念及體系結構
  3. 基于JavaScript的REST客戶端框架
  4. Java虛擬機的類的裝載
  5. 共同學習Java虛擬機
  6.  

責任編輯:王觀 來源: 論壇整理
相關推薦

2024-07-15 08:00:00

2010-01-06 16:33:50

.Net Framew

2023-02-26 11:50:04

Hbase程序Oracle

2010-03-04 10:08:54

.Net垃圾收集

2017-09-21 14:40:06

jvm算法收集器

2024-03-15 08:04:30

G1CMSJVM

2010-12-13 11:14:04

Java垃圾回收算法

2021-09-07 11:23:09

智能垃圾箱物聯網IOT

2020-03-13 08:00:00

.NET對象清理垃圾回收

2010-03-04 14:33:11

.NET垃圾收集

2022-05-06 22:13:56

JVM垃圾收集算法

2009-02-18 20:35:13

Windows系統垃圾

2024-01-15 11:12:28

Go內存開發

2020-10-26 13:42:28

Python算法垃圾

2011-05-10 16:04:45

Java垃圾收集器

2017-08-04 10:53:30

回收算法JVM垃圾回收器

2022-01-20 10:34:49

JVM垃圾回收算法

2022-03-21 11:33:11

JVM垃圾回收器垃圾回收算法

2024-05-28 00:00:03

Java垃圾收集機制

2011-07-21 14:54:26

java垃圾收集器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕日韩在线观看 | 啪啪网页 | 精品日韩| 国产乱码精品一品二品 | 国产原创视频 | 亚洲精品日韩综合观看成人91 | 毛片免费看 | 可以在线观看av的网站 | 日韩精品一区在线 | 免费人成激情视频在线观看冫 | 婷婷综合五月天 | caoporn国产精品免费公开 | 99免费| 欧美精品一区二区三区在线播放 | 国产成人精品久久 | 欧美日韩中文字幕在线 | 自拍偷拍第一页 | 欧美三区在线观看 | 国产伦精品一区二区三区视频金莲 | 99精品视频在线观看 | 丁香综合 | 狠狠操av| 综合久久av | 在线观看亚洲专区 | 欧美在线观看网站 | a级片在线观看 | 成人在线一区二区 | 亚洲国产一区二区视频 | 精品一区二区在线看 | 日屁视频| 国产精品久久久久久久久动漫 | 久久综合久久综合久久综合 | 日韩电影a | 久久久www| 欧美成人一区二区 | 精品日韩一区 | 午夜视频在线免费观看 | 国产永久免费 | 中文字幕1区 | 欧一区| 美女日皮网站 |