java runtime类 heap_Java 进阶(一) JVM运行时内存模型
1.JVM運行時數據區域的劃分
a.程序計數器(Program Counter Register)
一塊較小的內存空間,可以看作是當前線程所執行的字節碼的行號指示器。每個線程擁有獨立的一個計數器,如果當前執行的是Native方法,則計數器值為空。
b.JVM棧(Java Virtual Machine Stack)
描述Java方法執行的內存模型,每個方法在執行的同時都會創建一個棧幀(Stacks Frame)用于存儲局部變量表,操作數棧,動態鏈接,方法出口等信息。
每一個方法從調用直至執行完成的過程,就對應一個棧幀在JVM棧中入棧到出棧的過程。
c.本地方法棧(Native Method Stack)
與JVM棧發揮的作用非常相似,區別不過是JVM棧為JVM執行Java方法服務,而本地方法棧為JVM使用到的Native方法服務。
d.Java堆(Java Heap)
Java堆是被所有線程共享的一塊內存區域,在JVM啟動時創建。所有的對象實例以及數組都要在這里分配內存,但是隨著JIT編譯器的發展,漸漸變得不是那么絕對了。
e.方法區(Method Area)
存儲已被JVM加載的類信息,常量,靜態變量,即時編譯器編譯后的代碼等數據。
雖然JVM規范把方法區描述為堆的一個邏輯部分,但它卻有一個別名叫做Non-Heap。
f.運行時常量池(Runtime Constant Pool)
方法區的一部分。Class文件中除了有類的版本,字段,方法,接口等描述信息外,還有一項是常量池,用于存放編譯器生成的各種字面量和符號引用。
g.直接內存(Direct Memory)
不是JVM運行時數據區的一部分,也不是JVM規范中定義的內存區域。
例如:JDK1.4中新引入的NIO(New Input/Output)類,一種基于通道與緩沖區的I/O方式,可以使用Native函數庫直接操作堆外內存,然后通過存儲在Java堆中的DirectByteBuffer對象作為這塊內存的引用,避免了在Java堆和Native堆中來回復制數據。
總結
以上是生活随笔為你收集整理的java runtime类 heap_Java 进阶(一) JVM运行时内存模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python整数转字节数组_【转】Pyt
- 下一篇: java美元兑换,(Java实现) 美元