自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JVM垃圾回收機(jī)制使用秘笈

開(kāi)發(fā) 后端
本文向大家描述一下幾種JVM垃圾回收機(jī)制,gc即垃圾收集機(jī)制是指jvm用于釋放那些不再使用的對(duì)象所占用的內(nèi)存。java語(yǔ)言并不要求jvm有g(shù)c,也沒(méi)有規(guī)定gc如何工作。

你對(duì)JVM垃圾回收機(jī)制是否熟悉,這里和大家分享一下,垃圾收集的目的在于清除不再使用的對(duì)象。gc通過(guò)確定對(duì)象是否被活動(dòng)對(duì)象引用來(lái)確定是否收集該對(duì)象。gc首先要判斷該對(duì)象是否是時(shí)候可以收集。

JVM垃圾回收機(jī)制詳解

1.JVM的gc概述
  
  gc即垃圾收集機(jī)制是指jvm用于釋放那些不再使用的對(duì)象所占用的內(nèi)存。java語(yǔ)言并不要求jvm有g(shù)c,也沒(méi)有規(guī)定gc如何工作。不過(guò)常用的jvm都有g(shù)c,而且大多數(shù)gc都使用類似的算法管理內(nèi)存和執(zhí)行收集操作。
  
  在充分理解了垃圾收集算法和執(zhí)行過(guò)程后,才能有效的優(yōu)化它的性能。有些垃圾收集專用于特殊的應(yīng)用程序。比如,實(shí)時(shí)應(yīng)用程序主要是為了避免垃圾收集中斷,而大多數(shù)OLTP應(yīng)用程序則注重整體效率。理解了應(yīng)用程序的工作負(fù)荷和jvm支持的垃圾收集算法,便可以進(jìn)行優(yōu)化配置垃圾收集器。
  
  垃圾收集的目的在于清除不再使用的對(duì)象。gc通過(guò)確定對(duì)象是否被活動(dòng)對(duì)象引用來(lái)確定是否收集該對(duì)象。JVM垃圾回收機(jī)制首先要判斷該對(duì)象是否是時(shí)候可以收集。兩種常用的方法是引用計(jì)數(shù)和對(duì)象引用遍歷。
  
1.1.引用計(jì)數(shù)
  
  引用計(jì)數(shù)存儲(chǔ)對(duì)特定對(duì)象的所有引用數(shù),也就是說(shuō),當(dāng)應(yīng)用程序創(chuàng)建引用以及引用超出范圍時(shí),jvm必須適當(dāng)增減引用數(shù)。當(dāng)某對(duì)象的引用數(shù)為0時(shí),便可以進(jìn)行垃圾收集。
  
1.2.對(duì)象引用遍歷
  
  早期的jvm使用引用計(jì)數(shù),現(xiàn)在大多數(shù)jvm采用對(duì)象引用遍歷。對(duì)象引用遍歷從一組對(duì)象開(kāi)始,沿著整個(gè)對(duì)象圖上的每條鏈接,遞歸確定可到達(dá)(reachable)的對(duì)象。如果某對(duì)象不能從這些根對(duì)象的一個(gè)(至少一個(gè))到達(dá),則將它作為垃圾收集。在對(duì)象遍歷階段,gc必須記住哪些對(duì)象可以到達(dá),以便刪除不可到達(dá)的對(duì)象,這稱為標(biāo)記(marking)對(duì)象。
  
  下一步,gc要?jiǎng)h除不可到達(dá)的對(duì)象。刪除時(shí),有些gc只是簡(jiǎn)單的掃描堆棧,刪除未標(biāo)記的未標(biāo)記的對(duì)象,并釋放它們的內(nèi)存以生成新的對(duì)象,這叫做清除(sweeping)。這種方法的問(wèn)題在于內(nèi)存會(huì)分成好多小段,而它們不足以用于新的對(duì)象,但是組合起來(lái)卻很大。因此,許多gc可以重新組織內(nèi)存中的對(duì)象,并進(jìn)行壓縮(compact),形成可利用的空間。
  
  為此,gc需要停止其他的活動(dòng)活動(dòng)。這種方法意味著所有與應(yīng)用程序相關(guān)的工作停止,只有g(shù)c運(yùn)行。結(jié)果,在響應(yīng)期間增減了許多混雜請(qǐng)求。另外,更復(fù)雜的gc不斷增加或同時(shí)運(yùn)行以減少或者清除應(yīng)用程序的中斷。有的gc使用單線程完成這項(xiàng)工作,有的則采用多線程以增加效率。#p#
  
2.幾種JVM垃圾回收機(jī)制用法

2.1.標(biāo)記-清除收集器
  
  這種收集器首先遍歷對(duì)象圖并標(biāo)記可到達(dá)的對(duì)象,然后掃描堆棧以尋找未標(biāo)記對(duì)象并釋放它們的內(nèi)存。這種收集器一般使用單線程工作并停止其他操作。
  
2.2.標(biāo)記-壓縮收集器
  
  有時(shí)也叫標(biāo)記-清除-壓縮收集器,與標(biāo)記-清除收集器有相同的標(biāo)記階段。在第二階段,則把標(biāo)記對(duì)象復(fù)制到堆棧的新域中以便壓縮堆棧。這種收集器也停止其他操作。
  
2.3.復(fù)制收集器

  
  JVM垃圾回收機(jī)制中這種收集器將堆棧分為兩個(gè)域,常稱為半空間。每次僅使用一半的空間,jvm生成的新對(duì)象則放在另一半空間中。gc運(yùn)行時(shí),它把可到達(dá)對(duì)象復(fù)制到另一半空間,從而壓縮了堆棧。這種方法適用于短生存期的對(duì)象,持續(xù)復(fù)制長(zhǎng)生存期的對(duì)象則導(dǎo)致效率降低。
  
2.4.增量收集器

  
  增量收集器把堆棧分為多個(gè)域,每次僅從一個(gè)域收集垃圾。這會(huì)造成較小的應(yīng)用程序中斷。
  
2.5.分代收集器
  
  這種收集器把堆棧分為兩個(gè)或多個(gè)域,用以存放不同壽命的對(duì)象。jvm生成的新對(duì)象一般放在其中的某個(gè)域中。過(guò)一段時(shí)間,繼續(xù)存在的對(duì)象將獲得使用期并轉(zhuǎn)入更長(zhǎng)壽命的域中。分代收集器對(duì)不同的域使用不同的算法以優(yōu)化性能。
  
2.6.并發(fā)收集器
  
  JVM垃圾回收機(jī)制中的并發(fā)收集器與應(yīng)用程序同時(shí)運(yùn)行。這些收集器在某點(diǎn)上(比如壓縮時(shí))一般都不得不停止其他操作以完成特定的任務(wù),但是因?yàn)槠渌麘?yīng)用程序可進(jìn)行其他的后臺(tái)操作,所以中斷其他處理的實(shí)際時(shí)間大大降低。

2.7.并行收集器
  
  并行收集器使用某種傳統(tǒng)的算法并使用多線程并行的執(zhí)行它們的工作。在多cpu機(jī)器上使用多線程技術(shù)可以顯著的提高java應(yīng)用程序的可擴(kuò)展性。

【編輯推薦】

  1. Java虛擬機(jī)概念及體系結(jié)構(gòu)
  2. 發(fā)現(xiàn)Java虛擬機(jī)內(nèi)存泄露問(wèn)題
  3. 深入Java虛擬機(jī):JVM中的Stack和Heap
  4. Java虛擬機(jī)發(fā)展回顧 為跨平臺(tái)而生
  5. Java虛擬機(jī)(JVM)中的內(nèi)存設(shè)置詳解
責(zé)任編輯:佚名 來(lái)源: chinaitlab.com
相關(guān)推薦

2010-09-25 15:33:19

JVM垃圾回收

2010-09-25 15:26:12

JVM垃圾回收

2021-11-05 15:23:20

JVM回收算法

2010-09-26 16:42:04

JVM內(nèi)存組成JVM垃圾回收

2010-09-26 11:22:22

JVM垃圾回收JVM

2017-03-03 09:26:48

PHP垃圾回收機(jī)制

2017-08-17 15:40:08

大數(shù)據(jù)Python垃圾回收機(jī)制

2009-06-23 14:15:00

Java垃圾回收

2021-05-27 21:47:12

Python垃圾回收

2011-07-04 16:48:56

JAVA垃圾回收機(jī)制GC

2015-06-04 09:38:39

Java垃圾回收機(jī)

2017-06-12 17:38:32

Python垃圾回收引用

2011-06-28 12:39:34

Java垃圾回收

2009-12-09 17:28:34

PHP垃圾回收機(jī)制

2010-10-13 10:24:38

垃圾回收機(jī)制JVMJava

2021-12-07 08:01:33

Javascript 垃圾回收機(jī)制前端

2024-02-22 17:15:22

JS垃圾回收機(jī)制

2011-12-26 09:50:05

.NET垃圾回收

2010-09-26 14:08:41

Java垃圾回收

2023-02-28 07:56:07

V8內(nèi)存管理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)