更新時間:2019-12-11 14:16:17 來源:動力節點 瀏覽2047次
Java屬于面向對象的編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特征。Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程。
一、虛擬機內存圖解
JAVA程序運行與虛擬機之上,運行時需要內存空間。虛擬機執行JAVA程序的過程中會把它管理的內存劃分為不同的數據區域方便管理。
虛擬機管理內存數據區域劃分如下圖:
(一)、數據區域分類:
方法區: (Method Area)
虛擬機棧: (VM Stack)
本地方法棧 :(Native Method Stack)
堆: (Heap)
程序計數器 :(Program Counter Register)
直接內存: (Direct Memory)
(二)、說明:
1、程序計數器
行號指示器,字節碼指令的分支、循環、跳轉、異常處理、線程恢復(CPU切換),每條線程都需要一個獨立的計數器,線程私有內存互不影響,該區域不會發生內存溢出異常。
2、虛擬機棧
是線程私有的,聲明周期與線程相同,虛擬機棧是Java方法執行的內存模型,每個方法被執行時都會創建一個棧幀,即方法運行期間的基礎數據結構,棧幀用于存儲:局部變量表、操作數棧、動態鏈接、方法出口等,每個方法執行中都對應虛擬機棧幀從入棧到處棧的過程。
是一種數據結構,是虛擬機中的局部變量表,對應物理層之上的程序數據模型。
局部變量表,是一種程序運行數據模型,存放了編譯期可知的各種數據類型例如:
Boolean、byte、char、short、int、float、long、double、對象引用類型(對象內存地址變量,指針或句柄),程序運行時,根據局部變量表分配棧幀空間大小,在運行中,大小是不變的異常類型:stackOverFlowError 線程請求棧深度大于虛擬機允許深度 OutOfMemory 內存空間耗盡無法進行擴展。
3、 本地方法棧
與虛擬機棧類似,虛擬機棧為Java程序服務,本地方法棧支持虛擬機的運行服務,具體實現由虛擬機廠商決定,也會拋出 stackOverFlowError、OutOfMemory異常。
4、堆
是虛擬機管理內存中最大的一部分,被所有線程共享,用于存放對象實例(對象、數組),物理上不連續的內存空間,由于GC收集器,分代收集,所以劃分為:新生代 Eden、From SurVivor空間、To SurVivor空間,allot buffer(分配空間),可能會劃分出多個線程私有的緩沖區,老年代。
5、方法區
與堆一樣屬于線程共享的內存區域,用于存儲虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼(動態加載OSGI)等數據。理論上屬于java虛擬機的一部分,為了區分開來叫做 Non-Heap非堆。
這個區域可以選擇不進行垃圾回收,該區域回收目的主要是常量池的回收,及類型的卸載class,內存區不足時會拋出OutOfMemory異常
運行時常量池:
方法區的一部分,Class的版本、字段、接口、方法等,及編譯期生成的各種字面量、符號引用,編譯類加載后存放在該區域。會拋出OutOfMemory異常。
6、直接內存
直接內存不屬于虛擬內存區域,是一種基于通道與緩沖區的IO方式,可以使用本地函數直接分配堆外內存,在堆中存儲引用的外部內存地址,通過引用完成對直接引用內存的操作,1.4之后提供的NIO顯著提高效率,避免了堆內存與Native內存的來回復制操作,不受虛擬機內存控制,會拋出OUtOfMemory異常。
以上就是動力節點Java培訓機構小編介紹的“Java自學容易嗎?看完這些你就知道了”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
相關內容
相關閱讀
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習