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