jvm優化(一)

什麼是jvm?

java程序本身獨立運行環境,包括堆棧、寄存器和java字節碼的指令集。java

 

jvm上能夠運行的語言

  • Java
  • Scala
  • Groovy

 

jvm、jdk和jre

jvm:jvm是jre的一部分jvm

jre:java運行環境,包含jvm函數

jdk:包含工具

  • jre
  • jvm
  • 經常使用的一些開發工具,javac、java和jconsol等等

 

生命週期

  main方法是jvm實例運行的起點,main做爲程序初始線程的起點,任何其餘線程都由該線程負責啓動,main線程是非守護線程。開發工具

  jvm實例消亡的方法:線程

  • 全部的非守護線程都終止時
  • System.exit()

 

組成

  • 類加載器子系統(class loader)
  • 執行引擎子系統
  • 運行時數據區(runtime data area)
  • Native接口

 

運行流程

  1. 首先將java源代碼經過javac指令編譯成字節碼文件
  2. 字節碼文件經過class loader進行加載
  3. 將類的權限修飾類名成員變量修飾成員變量方法修飾方法參數方法返回值等等放入運行時數據區的方法區;將new出來的對象放入中,類的靜態變量放入常量池中;將對象索引放入VM棧裏;調用本地方法放入本地方法棧PC寄存器根據線程數分配,用於存放代碼讀取行數
  4. 執行引擎根據運行時數據區調用本地庫接口和本地方法庫

 

Class loader

負責加載字節碼到jvm中,根據類中定義的內容分配到不一樣的運行時數據區對象

分類:

  • Bootstrap ClassLoader:classLoader的根,rt.jar
  • Extension ClassLoader
  • Application ClassLoader
  • 用戶自定義類加載器

加載過程:

  1. 加載  負責找到class文件,並加載到jvm中
  2. 鏈接
    • 校驗  確保類的格式正確
    • 準備  爲類中的變量分配內存空間,並初始化默認值
    • 解析  符號引用轉換爲直接引用
  3. 初始化  執行靜態代碼塊,構造器,靜態屬性,在調用new,反射調用類中的方法,子類調用初始化函數
相關文章
相關標籤/搜索