深入JVM之Java內存模型

深入JVM之Java內存模型

這裏寫圖片描述
所有的程序代碼都必須保存在.java的文件之中,這些稱爲源代碼。而這些源代碼並不能直接執行,必須使用javac.exe命令將其編譯爲.class文件,而後利用java.exe命令在JVM進程之中解釋此程序。
實際上當JVM將所需要的.class文件加載到JVM進程之中,那麼這個過程就需要一個類加載器(ClassLoader),有了類加載器的好處在於:可以隨意指定程序.class文件的所在路徑。
JVM:Java虛擬機,所有的程序都要求運行在JVM上,是因爲考慮到了可移植性問題,可是如果要想真正去執行程序,絕對不可能離開操作系統的支持。
在Java裏面可以使用native實現本地C函數的調用。但是這些都屬於程序運行的輔助手段,而真正的程序運行都在“運行時數據區”之中。

這裏寫圖片描述
在整個的運行時數據區之中,分爲如下幾塊內存空間:
●堆內存:保存所有引用數據類型的真實信息。
●棧內存:基本類型、運算、指向堆內存的指針。
●方法區:所有定義的方法的信息都保存在方法之中,此區屬於共享區。
●程序計數器:是一個非常小的內存空間,小的可以忽略。用於指向下一個將要執行的代碼。
●本地方法棧:每一次執行遞歸的方法處理的時候實際上都會將上一個方法入棧。

這裏寫圖片描述這裏寫圖片描述這裏寫圖片描述
在整個Java之中存在有對象池的概念,對象池是對整個常量池的一個規則破壞,因爲在JVM啓動的時候所有的常量都已經分配好內存空間了,但是String中的intern()方法卻可以打破這種限制,動態的進行常量池的內容設置。

這裏寫圖片描述
對於運行時數據區直接和Java中的線程對象有關聯。
關於共享區域大還是獨享區域大?共享區域大。所以最後重點落在了對堆內存操作的合理控制上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章