91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解JAVA JVM

發布時間:2021-11-23 10:37:04 來源:億速云 閱讀:136 作者:柒染 欄目:大數據

如何理解JAVA JVM,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

什么是JVM

JVM是Java Virtual Machine(Java虛擬機)的縮寫,JVM是一種用于計算設備的規范,它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。

市面上是有很多虛擬機

了解JVM的結構,通過合理的參數配置,有助于我們更好的發揮JVM的性能。

內存結構

如何理解JAVA JVM

內存空間的主要組成

如何理解JAVA JVM

  1. 方法區

    方法區(Method Area),是各個線程共享的內存區域,它用于存儲已被虛擬機加載的類型信息、常量、靜態變量、即時編譯器編譯后的代碼緩存等數據

  2. 對于Java應用程序來說,Java堆(Java Heap)是虛擬機所管理的內存中最大的一塊。Java堆是被所有線程共享的一塊內存區域,在虛擬機啟動時創建。此內存區域的唯一目的就是存放對象實例,Java世界里“幾乎”所有的對象實例都在這里分配內存

  3. 虛擬機棧

    線程私有的,它的生命周期與線程相同。虛擬機棧描述的是Java方法執行的線程內存模型:每個方法被執行的時候,Java虛擬機都會同步創建一個棧幀(Stack Frame)用于存儲局部變量表、操作數棧、動態連接、方法出口等信息。每一個方法被調用直至執行完畢的過程,就對應著一個棧幀在虛擬機棧中從入棧到出棧的過程

  4. 本地方法棧

    本地方法棧(Native Method Stacks)與虛擬機棧所發揮的作用是非常相似的,其區別只是虛擬機棧為虛擬機執行Java方法(也就是字節碼)服務,而本地方法棧則是為虛擬機使用到的本地(Native)方法服務

  5. 程序計數器

    程序計數器(Program Counter Register)是一塊較小的內存空間,它可以看作是當前線程所執行的字節碼的行號指示器。可以理解為標記程序下一行執行什么。

方法區,堆,線程共享

虛擬機棧,本地方法棧,程序計數器,線程私有,創建一個線程時(可以理解為運行一個方法),創建一個棧幀,專門服務與此線程

內存分配

堆內存是我們主要使用的內存,堆內存組成如下

如何理解JAVA JVM

包括,年輕代,老年代(默認比例是 1:2)

  1. 年輕代:

1.1 包含一個Eden,二個Survivor(默認比例 8:1:1),年輕代用于保存新創建的對象,如果年輕代的內存不夠,會進行一次MinorGC,如果經歷15次MinorGC(默認值),還存活的,會被轉移到老年代(如果新對象年輕代,放不下,會被直接放到老年代)

1.2 年輕代使用復制算法,把內存區域分為兩塊(Eden+Survivor,另一個Survivor),每次使用一塊,GC的時候把一塊中的內容移動到另一塊中,原始內存中的對象就可以被回收了

  1. 老年代:

2.1 老年代內存不夠時,會進行一次MajorGC(也有說法是FullGC)

因為GC會造成"Stop the world",線程暫停,所以要合理調整堆內存大小,并分配年輕代,老年代的比例,以達到減少GC頻率,降低GC時間的目的

垃圾回收

在堆里面存放著Java世界中幾乎所有的對象實例,垃圾收集器在對堆進行回收前,第一件事情就是要確定這些對象之中哪些還“存活”著,哪些已經“死去”(“死去”即不可能再被任何途徑使用的對象)了。

一般采用“引用計數算法”來判定引用

內存優化調整

總結以上,內存調優的目的是,提高代碼的執行效率,減少GC頻率,降低GC時間,這就需要合理的分配堆內存(堆的總大小,年輕代的大小)

  1. 下載安裝工具 使用工具:JDK Mission Control 簡稱JMC

下載安裝參考 https://www.cnblogs.com/jhxxb/p/13279286.html

本地程序可以直接在工具中看到,也可以遠程連接到JVM,一般在服務器生成飛行數據,下載到本地,再用工具打開

  1. 啟動程序

一般先設置JVM參數,運行程序(-Xms1024m -Xmx1024m -Xmn512m)

Xms: 初始堆大小,默認無聊內存的1/64

Xmx: 最大堆大小,默認物理內存的1/4

Xmn: 新生代大小(新建對象,建議堆的25%-50%),默認整個堆的1/3

  1. 收集程序的飛行數據

    jcmd <pid> JFR.start delay=10s duration=15m filename=log.jfr

    說明: pid: 服務的進程號. 使用ps -ef | grep java 查詢. (使用時去除尖括號)

    delay: 延遲開啟配置. delay=10s 代表延遲10秒開啟.

    duration: 指收集的日志時長. duration=15m, 代表收集15分鐘的JVM信息.

    filename: 指將收集的日志存在指定的日志文件中. filename=log.jfr, 代表將收集的日志存放在log.jfr中.

看完上述內容,你們掌握如何理解JAVA JVM的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邛崃市| 陈巴尔虎旗| 龙井市| 陆丰市| 尤溪县| 桑日县| 玛曲县| 平顺县| 雅安市| 米易县| 黄梅县| 锦州市| 岑溪市| 芷江| 阿拉善右旗| 日喀则市| 邻水| 简阳市| 门源| 合水县| 鹰潭市| 大连市| 虞城县| 上虞市| 淳化县| 太和县| 子长县| 石家庄市| 都江堰市| 富蕴县| 五常市| 宝清县| 搜索| 遵化市| 灯塔市| 辽中县| 道真| 越西县| 淳安县| 利津县| 启东市|