国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - Java教程 - 詳解Java內存管理中的JVM垃圾回收

詳解Java內存管理中的JVM垃圾回收

2021-05-28 11:55且聆聽風 Java教程

這篇文章給大家分享了關于Java內存管理中的JVM垃圾回收的相關知識點內容,有興趣的朋友們可以學習參考下。

一.概述

相比起c和c++的自己回收內存,java要方便得多,因為jvm會為我們自動分配內存以及回收內存。

在之前的jvm 之內存管理 中,我們介紹了jvm內存管理的幾個區域,其中程序計數器以及虛擬機棧是線程私有的,隨線程而滅,故而它是不用考慮垃圾回收的,因為線程結束其內存空間即釋放。

而java堆和方法區則不一樣,java堆和方法區時存放的是對象的實例信息以及對象的其他信息,這部分是垃圾回收的主要地點。

二.java堆垃圾回收

垃圾回收主要考慮的問題有兩個:一個是效率問題,一個是空間碎片問題。

而java堆中的垃圾回收可以分為兩個區域,一個是新生代,一個是老年代。其中新生代又分為一塊比較大的eden空間和兩塊較小的survivor空間。因為新生代和老年代所存儲的對象群體是不一樣的,為了在效率和空間碎片問題中取得平衡,新生代和老年代所使用的垃圾回收算法是不一樣。

新生代 -復制算法

從名字上就知道,新生代主要存放的是比較新的對象,回收多次之后仍然存活的對象,就會被送到老年代中區。由此可知新生代的垃圾回收是比較頻繁的,所以為解決效率問題,新生代使用了復制算法。復制算法可以將內存分為大小相等的兩塊,每次分配時使用其中一塊,當這一塊用完時,就將還存活的對象復制到另一塊內存上面區。此時已使用過的這一塊內存就可以一次清理掉,這樣也不用擔心內存碎片的問題。當然這種算法的一個缺點就是內存使用率比較低,只有一半(每次只能一半用來分配出去)。

而ibm公司的研究表明,新生代中的對象98%都是”照生夕死“,所以不需要按照1:1劃分,故而會將內存分為一塊較大的eden空間和兩塊小的survivor空間。

那么為什么會有兩塊survivor呢,復制算法不是只需要一塊eden和一塊survivor就夠了嗎?

其實這主要還是為了解決碎片化的問題。假設只有一個survivor區,當eden區滿的時候,進行gc,存活對象被分配到了survivor區,清空eden區。當再一次gc完成后,存活的對象繼續放在survivor區,這樣不是很美好嗎,不會有內存碎片啊!但是別忘了,第一次存到survivor區的對象很可能在第二次gc的時候就失活了,清理掉survivor失活對象不就會產生內存碎片了嗎?

所以java堆使用了兩個survivor區,一個from survivro和一個tosurvivor,第一次eden滿的時候,復制算法將存活對象放到from survivor區,清空eden。第二次,eden滿時,將eden和from survivor區存活的對象放到to survivor區,清空eden和from survivor,然后重要的一步,將from survivor和to survivor角色互換!這樣就解決了內存碎片化的問題。

詳解Java內存管理中的JVM垃圾回收

老年代 -標記/整理算法

首先要明白老年代存放的都是會存活得比較久的對象,所以如果老年代也使用復制算法的話,那么復制對象的開銷時比較大的,因為老年代的對象基本上都會存活。

標記/整理算法很好理解,主要也就是”標記“,”整理“兩個步驟,先將要回收的對象標記,然后讓存活對象向著一端移動,最后將邊界以外的內存,然后gc完成。

詳解Java內存管理中的JVM垃圾回收

三.方法區垃圾回收

在某些地方的解釋中,方法區也會被叫做“永久代”,與java堆不同,這里存放的是類的信息以及一些常量信息,故而這個區域中被分配的內存一般比較難以被回收,所以才有有”永久代“之名。

雖然方法區中垃圾回收效率較低,但被分配的內存卻也并非真的就永不被回收,其主要回收的有兩部分內容:廢棄常量和無用的類。廢棄常量的回收與java堆中類實例回收類似,當常量池中一個常量沒有被引用時,就有可能被回收。比如常量池中有一個字符串常量“abc”,當沒有任何一個string對象值為"abc"時,那么下一次垃圾回收"abc"常量就有可能會被回收。

而對于無用的類的回收,首先需要判斷什么樣的類才是”無用的類“:

  • 該類所有的實例都已被回收,即java堆中沒有該類的實例。
  • 加載類的classloader已經被回收。
  • 該類對應的java.lang.class對象沒有在任何地方被引用,無法在任何地方通過反射訪問該類的方法。

虛擬機可能會堆滿足這三個條件的”無用的類“進行回收,僅僅是可能,并非必然。

原文鏈接:https://www.cnblogs.com/listenfwind/p/9540167.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 人人射在线视频 | 日韩精品免费 | av在线一区二区 | 久久久久久网站 | 99国产精品久久久久久久久久 | 精品成人免费 | 国产一区二区在线免费观看 | 一本大道香蕉大a√在线 | 日韩成人av在线 | 色欧美亚洲 | 四虎网址| 国产精品久久久久久久久久三级 | 午夜色电影 | 久久国产一区 | 国产成人精品一区二区三区视频 | 在线播放亚洲 | 中文在线一区 | 久久艹精品 | 国产视频9999 | 亚洲专区欧美 | 亚洲综合二区 | 精品久久久久久亚洲综合网 | 久久精品久久久 | 久久综合亚洲精品 | 三级成人在线 | 久久精品国产亚洲 | 狠狠综合久久av一区二区老牛 | 视频一区二区三区免费观看 | 影音先锋中文字幕在线观看 | 亚洲精品久久久一区二区三区 | 美女毛片 | 国产精品久久久久久久久免费高清 | 国产成人久久精品一区二区三区 | 日韩精品在线观看中文字幕 | 中文字幕日韩欧美一区二区三区 | 波多野结衣中文字幕一区二区三区 | 动漫一区二区三区 | 欧美午夜一区二区三区免费大片 | 黄色一级大片在线免费看产 | 国产精品高清在线 | 中文字幕在线第一页 |