• <rp id="kt95d"><ruby id="kt95d"></ruby></rp>
  • <th id="kt95d"></th>
    <button id="kt95d"><acronym id="kt95d"></acronym></button>

      <th id="kt95d"></th>

    1. 教育行業A股IPO第一股(股票代碼 003032)

      全國咨詢/投訴熱線:400-618-4000

      jvm由哪幾部分組成?如何進行jvm調優?【java面試】

      更新時間:2022年06月28日15時24分 來源:傳智教育 瀏覽次數:

      好口碑IT培訓

      jvm的組成

      jvm是一種能夠運行java字節碼的虛擬機。由類裝載子系統、運行時數據區(內存模型) 和字節碼執行引擎三部分組成,跨平臺 ,從軟件層面屏蔽不同操作系統在底層硬件與指令上的區別,實現一處編寫多處運行運行之前通過javac命令將轉成字節碼文件,當字節碼文件運行時 JVM就開始工作了。

      1.類裝載子系統

      2.運行時數據區:

      堆 : new出來的對象都放在堆里,堆分為老年代和年輕代,老年代占整個堆的2/3,年輕代占1/3.年輕代又分為三塊:伊甸園區,survivor區(s0和s1),比例8:1:1 .當伊甸園區里面的對象裝滿了,字節碼引擎會執行一個垃圾回收線程(minor(蠻呢兒) gc)將非垃圾對象復制到survivor區,然后刪除垃圾對象?

      棧 :只要一個線程在運行,Java虛擬機就會給這個線程分配一點內存空間, 這塊空間就叫做線程棧(用來放方法內部自己的局部變量) 一個方法對應一塊棧幀內存區域

      程序計數器 :每一個程序運行的時候都會分配一個程序計數器,記錄馬上要執行代碼的內存地址,作用就是當前線程被搶走執行權,恢復執行的時候就從記錄的內存地址繼續運行

      方法區 : 存放常量,靜態變量,類信息(字節碼文件被加載后就放到方法區)

      本地方法棧 :執行本地方法的時候分配的內存空間由本地方法棧提供,底層用C C++語言寫的方法就是本地方法

      3.字節碼執行引擎

      jvm調優

      調優目的: 在回收垃圾的時候會停止用戶進程(STW) stop the word ,專心做垃圾回收,減少GC(minor full)

      為什么要有SWT: 當程序運行的過程中,產生了垃圾,full GC就開始找垃圾,從局部變量開始找完了所有的對象,都標記成非垃圾對象,然后在找其他變量.如果有一個線程,GC線程還沒結束,它先結束了,那它里面的棧內存空間會被釋放,釋放掉就意味著局部變量表沒有了,局部變量也被銷毀了,那剛剛GC找垃圾的時候明明把這些對象標記未非垃圾對象,現在又變成垃圾了,這不合適 . 所以在回收垃圾的時候,讓用戶線程先停掉,不要影響對象的狀態 , 標記好了再把垃圾清理,可能性能還要高一點

      能否對JVM調優,讓其幾乎不發生Full GC :

      調優工具: Arthas(阿爾薩斯) 它是阿里巴巴開源的java診斷工具,支持JDK6+,采用命令行交互模式.使用簡便,監控進程。

      0 分享到:
      和我們在線交談!
      免费99精品国产自在现线,精品精品国产男人的天堂,国语自产精品视频在 视频_主页