激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - Java 可視化垃圾回收_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

Java 可視化垃圾回收_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

2020-10-26 16:37動(dòng)力節(jié)點(diǎn) JAVA教程

Ben Evans是一名資深培訓(xùn)師兼顧問(wèn),他在演講可視化垃圾回收中從基礎(chǔ)談起討論了垃圾回收。以下是對(duì)其演講的簡(jiǎn)短總結(jié)。感興趣的朋友一起學(xué)習(xí)吧

ben evans是一名資深培訓(xùn)師兼顧問(wèn),他在演講可視化垃圾回收中從基礎(chǔ)談起討論了垃圾回收。

以下是對(duì)其演講的簡(jiǎn)短總結(jié)。

基礎(chǔ)

當(dāng)談到釋放不再使用的內(nèi)存,垃圾回收已經(jīng)在很大程度上取代了早期技術(shù),比如手動(dòng)內(nèi)存管理和引用計(jì)數(shù)。

這是件好事,因?yàn)閮?nèi)存管理令人厭煩,學(xué)究式地簿記是計(jì)算機(jī)擅長(zhǎng)的,而不是人擅長(zhǎng)的。在這方面,語(yǔ)言的運(yùn)行時(shí)環(huán)境比人強(qiáng)。

現(xiàn)代的垃圾回收非常高效,遠(yuǎn)遠(yuǎn)超過(guò)早期語(yǔ)言中典型的手工分配。通常,具有其它語(yǔ)言背景的人只盯著垃圾回收造成的中斷,卻沒(méi)有完全理解自動(dòng)內(nèi)存管理發(fā)生作用的上下文環(huán)境。

標(biāo)記&清除是java(及其它運(yùn)行時(shí)環(huán)境)用于垃圾回收的基本算法。

在標(biāo)記&清除算法中,引用會(huì)從每個(gè)線程棧的楨指向程序的堆。所以,從棧開(kāi)始,循著指針找到所有可能的引用,然后再循著這些引用遞歸下去。

當(dāng)遞歸完成,就找到了所有的活對(duì)象,其它的都是垃圾。

請(qǐng)注意,人們經(jīng)常漏掉的一點(diǎn)是,運(yùn)行時(shí)環(huán)境本身也有一個(gè)“分配清單(allocation list)”,上面列出了指向每個(gè)對(duì)象的指針,該列表由垃圾回收器負(fù)責(zé)維護(hù),并幫助垃圾回收器進(jìn)行垃圾清理。因此,運(yùn)行時(shí)環(huán)境總是可以找出由它創(chuàng)建但尚未回收的對(duì)象。

Java 可視化垃圾回收_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

圖一

上面插圖中所示的棧只是一個(gè)與單個(gè)應(yīng)用程序線程相關(guān)的棧;每個(gè)應(yīng)用程序線程都有一個(gè)類(lèi)似的棧,每個(gè)棧本身都有一組指向堆的指針。

如果垃圾回收器試圖在應(yīng)用程序運(yùn)行過(guò)程中獲取活對(duì)象的快照,那么它就要追蹤運(yùn)動(dòng)著的目標(biāo),那樣很容易漏掉一些嚴(yán)重超時(shí)的對(duì)象分配,因而無(wú)法獲得一個(gè)準(zhǔn)確的快照。因此,“stop the world”是有必要的;也就是,停止應(yīng)用程序線程足夠長(zhǎng)的時(shí)間,以便捕獲活對(duì)象的快照。

下面是垃圾回收器必須遵循的兩條黃金法則:

垃圾回收器必須回收所有的垃圾。 垃圾回收器必須從不回收任何活對(duì)象。

但這兩條規(guī)則并不是對(duì)等的;如果違反了第二條規(guī)則,結(jié)果會(huì)使數(shù)據(jù)遭到破壞。

另一方面,如果違反了第一條規(guī)則,則會(huì)是另一種情況,系統(tǒng)并不總是能夠回收所有的垃圾,但最終會(huì)回收所有的垃圾,那么這是可以接受的,而實(shí)際上,這是垃圾回收器的基本原理。

hotspot

現(xiàn)在,我們來(lái)說(shuō)下hotspot,它實(shí)際上是一個(gè)c、c++以及許多特定于平臺(tái)的匯編程序組成的混合體。

當(dāng)人們想到解釋器,就會(huì)想到一個(gè)很大的while循環(huán),其中包含一個(gè)很長(zhǎng)的switch語(yǔ)句。但hotspot解釋器比那個(gè)要復(fù)雜的多(由于性能原因)。在開(kāi)始閱讀jdk源代碼的時(shí)候,就會(huì)發(fā)現(xiàn)hotspot中實(shí)在是有許多匯編程序代碼。

對(duì)象創(chuàng)建

java會(huì)預(yù)先分配大量的連續(xù)空間,就是我們所說(shuō)的“堆”。之后,hotspot完全在用戶空間里管理這塊內(nèi)存。

如果一個(gè)java進(jìn)程占用了大量的系統(tǒng)(或內(nèi)核)時(shí)間,那么毫無(wú)疑問(wèn),它不是在進(jìn)行垃圾回收——因?yàn)樗械睦厥諆?nèi)存“簿記(bookkeeping)”都是在用戶空間進(jìn)行的。

內(nèi)存池

Java 可視化垃圾回收_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

圖二

“永久代(permgen)”是一個(gè)存儲(chǔ)區(qū)域,用于保存那些需要在程序生存期內(nèi)一直存活的東西,如類(lèi)的元數(shù)據(jù)。不過(guò),隨著應(yīng)用程序服務(wù)器的出現(xiàn),它們有自己的類(lèi)加載器,并且需要重新加載類(lèi)的元數(shù)據(jù),永久代作為一個(gè)優(yōu)化決策開(kāi)始顯得糟糕,所幸,它在java 8中消失了。

java 8將會(huì)使用一個(gè)名為“元空間(metaspace)”的新概念。元空間與永久代并不完全相同。它在堆的外面,由操作系統(tǒng)管理。這意味著,它不會(huì)在java堆中,而是在本地內(nèi)存里。目前,這還不是一個(gè)非常好的消息,因?yàn)闆](méi)有多少工具能夠讓用戶輕松地查看本地內(nèi)存。所以,永久代消失是件好事,但工具趕上這個(gè)變化還需要一些時(shí)間。

java堆布局

現(xiàn)在,我們來(lái)看下java堆。注意堆空間之間的虛擬空間。它們提供了一點(diǎn)浮動(dòng)量,以允許對(duì)內(nèi)存池進(jìn)行一定量的尺寸調(diào)整,又不用為任何對(duì)象移動(dòng)付出代價(jià)。

Java 可視化垃圾回收_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

圖三

“弱代假設(shè)(weak generational hypothesis)”

就現(xiàn)狀而言,究竟為什么要將堆分成所有這些內(nèi)存池?

Java 可視化垃圾回收_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

圖四

有的運(yùn)行時(shí)事實(shí)無(wú)法通過(guò)靜態(tài)分析推導(dǎo)出來(lái)。上面的插圖說(shuō)明有兩組對(duì)象:一組存活時(shí)間短,一組存活時(shí)間長(zhǎng)——所以,做額外的簿記以便利用這一事實(shí)是有意義的。在java平臺(tái)中,有許多類(lèi)似的作為優(yōu)化寫(xiě)入平臺(tái)的事實(shí)。

演示

ben evans進(jìn)行了一系列的動(dòng)畫(huà)演示。第一個(gè)演示是個(gè)flash,說(shuō)明了對(duì)象在eden區(qū)和一個(gè)新生代survivor空間之間移動(dòng),并最終進(jìn)入老年代的過(guò)程。

圖五是用javafx再現(xiàn)了同樣的過(guò)程。

Java 可視化垃圾回收_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

圖五

運(yùn)行時(shí)開(kāi)關(guān)

‘強(qiáng)制性'參數(shù)

-verbose:gc——為用戶輸出一些gc信息 -xloggc:<文件路徑>——指定日志輸出路徑,要確保磁盤(pán)有空間 -xx:+pringgcdetails——為輔助工具提供“最低限度信息(minimum information)”

——用這個(gè)參數(shù)代替-verbose:gc

--xx:printtenuringdistribution——“過(guò)早提升(premature promotion)”信息 基本堆大小參數(shù)-xms<size>—— 設(shè)置預(yù)留給堆的最小內(nèi)存值 -xmx<size>—— 設(shè)置預(yù)留給堆的最大內(nèi)存值 -xx:maxpermsize=<size>——設(shè)置永久代的最大內(nèi)存值

——有利于spring應(yīng)用程序和應(yīng)用服務(wù)器

以前,我們被教導(dǎo)要把-xms和-xmx的值設(shè)的一樣大。不過(guò)這已經(jīng)變了。因此,現(xiàn)在可以為-xms設(shè)置一個(gè)合理范圍內(nèi)較小的值,或者根本就不設(shè)置,因?yàn)槎训倪m應(yīng)能力現(xiàn)在已經(jīng)非常好了。

其它參數(shù)-xx:newratio=n -xx:newsize=n -xx:maxnewsize=n -xx:maxheapfreeratio -xx:minheapfreeratio -xx:survivorratio=n -xx:maxtenuringthreshold=n

Java 可視化垃圾回收_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

圖六

為什么要有日志文件

日志文件的好處是能夠用于取證分析,可以使用戶免于為了再現(xiàn)問(wèn)題而不得不再執(zhí)行一次代碼(如果是一個(gè)罕見(jiàn)的生產(chǎn)環(huán)境錯(cuò)誤,那么重現(xiàn)并不容易)。

另外,它們包含的信息比針對(duì)內(nèi)存的jmx mxbeans所能提供的信息更多,且不說(shuō)輪詢jmx本身會(huì)引入一系列g(shù)c問(wèn)題。

工具

hp jmeter(用google查詢一下)

——免費(fèi),非常可靠,但不再提供支持/功能增強(qiáng)

gcviewer

——免費(fèi),開(kāi)源,但界面有點(diǎn)丑

garbagecat

——名字最好聽(tīng)

ibm gcmv

——支持j9

jclarity censum

——界面最美觀,而且最有用——不過(guò),這是我們的偏見(jiàn)!

小結(jié)

  • 需要了解一些gc基礎(chǔ)理論
  • 要讓新生代的大部分對(duì)象在年輕時(shí)死亡
  • 打開(kāi)gc日志!——原始日志文件難以閱讀——使用工具
  • 使用工具來(lái)幫助自己調(diào)優(yōu)——測(cè)量,而不是猜測(cè)

以上所述是小編給大家介紹的java 可視化垃圾回收,希望對(duì)大家有所幫助!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 午夜九九九 | 亚洲一区二区中文字幕在线观看 | 美国黄色毛片女人性生活片 | 91福利社在线 | 黄色二区三区 | 欧美黑大粗硬毛片视频 | 久久情爱网 | 欧美成人精品一区二区男人小说 | 欧美性生活网站 | 国产精品一区二区视频 | 欧美a一| 日产精品一区二区三区在线观看 | chinese18 xxxx videos | 亚洲午夜久久久久 | 久久精品成人免费国产片桃视频 | 色视频欧美 | 7777在线视频免费播放 | 日本不卡中文字幕 | 欧美日韩成人一区二区 | 欧美精品久久久久久久久久 | 久久777国产线看观看精品 | 日本视频在线播放 | 蜜桃成品人免费视频 | 亚洲欧美日韩久久精品第一区 | www.91sese| 午夜久 | 狠狠色噜噜狠狠狠米奇9999 | 国产成人高清成人av片在线看 | 在线看免费的a | 欧美综合日韩 | 免费观看黄色片视频 | 成人午夜视频网站 | 日本人乱人乱亲乱色视频观看 | 羞羞视频入口 | 国产精品自在线拍 | 欧美性生视频 | 久久精品视频69 | 永久免费黄色片 | 亚洲午夜久久久精品一区二区三区 | 国产一区二区三区欧美 | 末成年女av片一区二区 |