日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

理解JVM运行原理

發布時間:2025/3/19 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 理解JVM运行原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

做java開發兩年多了,一直沒有深入研究過jvm運行原理,只是依稀的記得內存分為堆內存、棧內存,然后就是哪來著分為新生代和老生代,還有本地方法區,以前覺得這些東西面試用用也就算了,現在想來,不研究研究就不會有進步的,只顧復制粘貼不是出路,深入原理才是王道。

首先看到虛擬機的概念,即在機器和編譯程序之間加入了一層抽象的虛擬的機器。這臺虛擬的機器在任何平臺上都提供給編譯程序一個的共同的接口。編譯程序只需要面向虛擬機,生成虛擬機能夠理解的代碼,然后由解釋器來將虛擬機代碼轉換為特定系統的機器碼執行。

這個就是虛擬機的概念了,我原來的理解就是我的java代碼 ->虛擬機->class文件->虛擬機->執行。但是不是這樣的,虛擬機并不是生成class文件的而是一個運行環境,把class文件轉換為特定系統的機器碼。所以執行過程是java代碼->編輯器(jdk)->class文件->虛擬機(jre)->特定系統機器碼->執行。

虛擬機的工作主要分為以下3個步驟:裝載、鏈接、初始化。

裝載:把class文件讀進虛擬機然后生成這個class的實例對象,大致過程就是類加載器找到class讀到虛擬機當中,虛擬機讀取class的類信息:類名、方法(名字、返回類型、參數列表)、變量、修飾符和常量池,一個類型的所有常量和符號引用都存放到方法區,然后生成實例對象存放在堆內存。

鏈接:驗證語義、分配類變量內存、解析(在類型的常量池中尋找類,接口,字段和方法的符合引用把這些符號引用替換成直接引用的過程。)

初始化:初始化類的一些靜態變量。

內存是分為四個區的:方法區、堆內存、棧內存和代碼區。

類裝載的時候:static塊或常量等class的唯一標示會放在方法區當中。也就是說表明這個class是唯一的就是在方法區中保存的。還會產生一個空對象存放在堆內存,當new 一個對象出來的時候,其實就是在堆內存當中拷貝一個對象,當然還是存放到堆內存當中的,然后棧內存干啥的呢,其實棧內存是一個線程保持一個的,換句話說也就是一個人一個棧內存誰也別搶,堆內存相對就是共享的,棧內存存放基本數據類型和引用數據類型,引用數據就是直接指向了棧內存的類對象了。至于代碼區,存放的是class二進制數據了吧。




總結

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

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