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

JVM基礎:GC策略&內存申請、對象衰老

開發 后端
JVM(采用分代回收的策略),用較高的頻率對年輕的對象(young generation)進行YGC,而對老對象(tenured generation)較少(tenured generation 滿了后才進行)進行Full GC。這樣就不需要每次GC都將內存中所有對象都檢查一遍。

JVM里的GC(Garbage Collection)的算法有很多種,如標記清除收集器,壓縮收集器,分代收集器等等,詳見HotSpot VM GC 的種類

現在比較常用的是分代收集(generational collection,也是SUN VM使用的,J2SE1.2之后引入),即將內存分為幾個區域,將不同生命周期的對象放在不同區域里:young generation,tenured generation和permanet generation。絕大部分的objec被分配在young generation(生命周期短),并且大部分的object在這里die。當young generation滿了之后,將引發minor collection(YGC)。在minor collection后存活的object會被移動到tenured generation(生命周期比較長)。最后,tenured generation滿之后觸發major collection。major collection(Full gc)會觸發整個heap的回收,包括回收young generation。permanet generation區域比較穩定,主要存放classloader信息。

young generation有eden、2個survivor 區域組成。其中一個survivor區域一直是空的,是eden區域和另一個survivor區域在下一次copy collection后活著的objecy的目的地。object在survivo區域被復制直到轉移到tenured區。

我們要盡量減少 Full gc 的次數(tenured generation 一般比較大,收集的時間較長,頻繁的Full gc會導致應用的性能收到嚴重的影響)。

堆內存GC

JVM(采用分代回收的策略),用較高的頻率對年輕的對象(young generation)進行YGC,而對老對象(tenured generation)較少(tenured generation 滿了后才進行)進行Full GC。這樣就不需要每次GC都將內存中所有對象都檢查一遍。

非堆內存不GC

GC不會在主程序運行期對PermGen Space進行清理,所以如果你的應用中有很多CLASS(特別是動態生成類,當然permgen space存放的內容不僅限于類)的話,就很可能出現PermGen Space錯誤。

內存申請、對象衰老過程

一、內存申請過程

•JVM會試圖為相關Java對象在Eden中初始化一塊內存區域;

•當Eden空間足夠時,內存申請結束。否則到下一步;

•JVM試圖釋放在Eden中所有不活躍的對象(minor collection),釋放后若Eden空間仍然不足以放入新對象,則試圖將部分Eden中活躍對象放入Survivor區;

•Survivor區被用來作為Eden及old的中間交換區域,當OLD區空間足夠時,Survivor區的對象會被移到Old區,否則會被保留在Survivor區;

•當old區空間不夠時,JVM會在old區進行major collection;

•完全垃圾收集后,若Survivor及old區仍然無法存放從Eden復制過來的部分對象,導致JVM無法在Eden區為新對象創建內存區域,則出現"Out of memory錯誤";

二、對象衰老過程

•新創建的對象的內存都分配自eden。Minor collection的過程就是將eden和在用survivor space中的活對象copy到空閑survivor space中。對象在young generation里經歷了一定次數(可以通過參數配置)的minor collection后,就會被移到old generation中,稱為tenuring。

•GC觸發條件

GC類型 觸發條件 觸發時發生了什么 注意 查看方式
YGC eden空間不足

清空Eden+from survivor中所有no ref的對象占用的內存
將eden+from sur中所有存活的對象copy到to sur中
一些對象將晉升到old中:
to sur放不下的
存活次數超過turning threshold中的
重新計算tenuring threshold(serial parallel GC會觸發此項)

重新調整Eden 和from的大小(parallel GC會觸發此項)

全過程暫停應用
是否為多線程處理由具體的GC決定
jstat –gcutil
gc log
FGC

old空間不足
perm空間不足
顯示調用System.GC, RMI等的定時觸發
YGC時的悲觀策略
dump live的內存信息時(jmap –dump:live)

清空heap中no ref的對象
permgen中已經被卸載的classloader中加載的class信息

如配置了CollectGenOFirst,則先觸發YGC(針對serial GC)
如配置了ScavengeBeforeFullGC,則先觸發YGC(針對serial GC)

 
全過程暫停應用
是否為多線程處理由具體的GC決定

是否壓縮需要看配置的具體GC
jstat –gcutil
gc log

permanent generation空間不足會引發Full GC,仍然不夠會引發PermGen Space錯誤。

參考:

http://jiangyongyuan.javaeye.com/blog/356502

http://www.helloying.com/blog/archives/164

相關內容推薦:

GC悲觀策略之Parallel GC篇

GC悲觀策略之Serial GC篇

原文鏈接:http://www.cnblogs.com/redcreen/archive/2011/05/04/2037056.html

【系列文章】

  1. JVM基礎:JVM監測&工具
  2. JVM基礎:生產環境參數實例及分析
  3. JVM基礎:JVM參數設置、分析
  4. JVM基礎:JVM內存組成及分配
  5. JVM基礎:JVM監測&工具
責任編輯:林師授 來源: redcreen的博客
相關推薦

2022-05-27 08:01:36

JVM內存收集器

2018-04-08 08:45:53

對象內存策略

2019-12-10 08:59:55

JVM內存算法

2012-01-11 10:45:57

JavaJVM

2010-09-27 09:01:26

JVM分代垃圾回收

2019-09-02 14:53:53

JVM內存布局GC

2021-01-21 08:00:25

JVM

2010-02-22 08:58:35

JVM內存模型垃圾收集

2021-04-14 10:14:34

JVM生產問題定位內存泄露

2011-12-20 10:43:21

Java

2011-12-05 12:51:58

JVMJava

2010-01-06 09:28:08

JVM分代垃圾回收

2023-08-24 07:46:21

服務器JVM

2018-07-04 14:43:55

對象模型內存結構內存模型

2010-09-26 11:22:22

JVM垃圾回收JVM

2017-09-26 16:32:03

JavaGC分析

2021-04-12 09:36:14

JVM生產問題JVM FULL GC

2012-01-11 13:04:40

JavaJVM

2010-09-16 15:10:24

JVM垃圾回收機制

2017-09-20 08:48:09

JVM內存結構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久999 | 久久久久久久国产精品 | 久久亚洲国产 | av黄色网 | 免费观看视频www | 不卡在线视频 | 精品综合 | 不卡一区二区三区四区 | 久久小视频 | 日韩中文字幕 | 欧美在线 | 国产乱码精品一区二区三区忘忧草 | 欧美日韩精品影院 | 亚洲日韩视频 | 国产91在线精品 | 2018中文字幕第一页 | 日本中出视频 | 亚洲欧美视频 | 二区在线视频 | 日韩一区二区在线视频 | 欧美日韩在线一区二区 | 欧美黑人巨大videos精品 | 国产精品中文字幕在线观看 | 国产精品一区二区视频 | 日韩在线视频一区 | 亚洲国产精品va在线看黑人 | 国产黄色在线观看 | 午夜精品久久 | 亚洲精品久久久一区二区三区 | 日韩一级免费 | 午夜三级网站 | 欧美久久一区二区 | 久久精品色欧美aⅴ一区二区 | 国产欧美日韩综合精品一区二区 | 婷婷丁香在线视频 | 激情在线视频 | 伊人91在线| 久久久久久一区 | 国产欧美日韩在线播放 | 99在线视频观看 | 久久久91精品国产一区二区三区 |