日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

JVM常谈

發布時間:2025/3/15 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JVM常谈 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

下面羅列了JVM的常見概念,本文只作概述性的記錄。

JVM 種類: Oralce-Sun Hotspot, Oralce JRockit, IBM J9, 其他; 對JVM歷史感興趣就狂點這里

JVM 內存管理-運行時數據區
?? ?堆,方法區,Java棧,本地方法棧,PC(程序計數器/寄存器)
?? ?
?? ?堆,方法區 是程序共享的內存區域,不是線程安全的;
?? ?Java棧,本地方法棧,PC(程序計數器/寄存器) 是線程私有的,對,是線程安全的;
?? ?
?? ?堆的劃分
?? ??? ?1. 年輕代-Young Generation(Eden+From/Survive1+To/Survive2) //對象朝生暮死,98%都會很快死掉
?? ??? ?2. 年老代-Tenured/Old Generation?? ?//對象存活時間長

??? 堆:所有對象,數組存放于此
?? ?方法區:類的信息和常量信息
?? ?Java棧:程序每啟動一個線程,VM都會分配一個基于棧的數據結構的Java棧(或者叫做虛擬機棧),羅嗦一下,Java棧是一片內存區域;
?? ??? ? Java棧由棧幀組成,方法的調用意味著棧幀的入棧和出棧;棧幀又可劃分為局部變量區,操作數棧和棧數據區;
?? ??? ? 局部變量區保存了方法調用時傳入的參數,局部變量,返回值等信息;
?? ??? ? 操作數棧是程序計算的地方,通過字節碼和操作數來完成計算;
?? ??? ? 棧數據區保存方法返回和異常處理等信息;
?? ?本地方法棧:與java棧類似,主要用于JVM調用native方法時使用;
?? ?PC:較小的內存空間,當前線程所執行的字節碼的行號指示器;每條線程都有一條獨立的PC;

對象在內存中的分配
?? ?1. 對象首先分配到年輕代(Young Generation)
?? ?2. 大對象(大字符串,大數組)直接分配到年老代(Tenured/Old Generation)
?? ?3. 對象年齡 //TODO
?? ?4. 動態判斷
?? ?5. 分配擔保

GC:Garbage Collection
GC主要針對堆的內存回收,不同JVM實現可能也會對方法區進行回收。
1. 判斷對象存活
?? ?1.1 引用計數算法?? //Reference Counting, 存在循環引用的問題
?? ?1.2 根搜索算法 ?? ? //Root Tracing, Reference Chain, 由此引出根對象/對象鏈的概念
?? ?1.3 什么樣的對象可以作為根對象??
?? ??? ?1.3.1 虛擬機棧(棧幀中的本地變量表)中的引用對象
?? ??? ?1.3.2 方法區中的類靜態屬性引用的對象
?? ??? ?1.3.3 方法區中的常量引用的對象
?? ??? ?1.3.4 本地方法棧中JNI的引用對象
?? ?
2. 對象回收算法
?? ?2.1 標記-清除算法?? ?//Mark-Sweep ,容易產生內存碎片
?? ?2.2 復制算法?? ??? ??? //Coping ,如果存活的對象多了,那么復制這些對象就需要很大的代價
?? ?2.3 標記-整理算法?? ?//Mark-Compact,解決了內存碎片的問題
?? ?2.4 分代回收算法 ?? ?//根據不同的(內存)代,采用上述3種算法
?? ?一般年輕代存活下來的對象很少,適合使用復制算法;而年老代里的對象多且存活時間長,適合使用另外兩種算法。
?? ?
3. Hotspot 垃圾回收器種類
?? ?3.1 Young Generation 使用的垃圾回收器
?? ??? ?3.1.1 Serial回收器 ?? ??? ??? ??? ?//單線程,復制算法
?? ??? ?3.1.2 ParNew回收器 ?? ??? ??? ??? ?//多線程,復制算法
?? ??? ?3.1.3 Parallel Scavenge回收器 ? //多線程,復制算法,自適應特點
?? ?3.2 Tenured Generation 使用的垃圾回收器
?? ??? ?3.2.1 Serial Old回收器?? ??? ??? ?//單線程,標記-整理算法
?? ??? ?3.2.2 Parallel Old回收器?? ??? ? //多線程,標記-整理算法
?? ??? ?3.2.3 CMS(Concurrent Mark-Sweep) //多線程,標記-清除算法
?? ?3.3 G1(Garbage First)回收器 ??? ? //把內存劃分為多個區域,跟蹤每個區域,根據不用區域內存的使用情況進行回收。

Sun JDK1.6 GC:

上圖中的"?"跨了兩代內存區,是將被引入到JDK7的G1收集器。

Reference:
?? ?圖書:《深入Java虛擬機》《深入理解Java虛擬機》 ???
?? ?JVM內存管理:深入Java內存區域與OOM ??? ????
?? ?JVM內存管理:深入垃圾收集器與內存分配策略??
?? ?還有一篇不錯的帖子

轉載于:https://my.oschina.net/placeholder/blog/116005

總結

以上是生活随笔為你收集整理的JVM常谈的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。