1. 程式人生 > >Java虛擬機一 內存管理機制

Java虛擬機一 內存管理機制

內存區域 下一條 cnblogs 數據線 接口 java虛擬機 地址 溢出 一點

Java虛擬機的內存管理主要分兩點:內存分配以及內存回收。·

一、內存分配圖:

技術分享

註: 所占區域的大小與實際的內存大小比例並無直接關系。

解讀:

1、如圖,分成兩種顏色的內存區域,其中藍色的是線程隔離的數據區,也就是說每一個線程都有自己的這麽一個區域存放自己的數據,而青色區域則是線程共享的,裏面的數據為所有線程共有,原則上都有權限訪問。

2、程序計數器:

用途:用來給程序導航指路的。這個是一塊較小的內存空間,可以看做是當前線程執行的字節碼的行號指示器。理解就是虛擬機把java源代碼編譯成了字節碼,然後程序被執行,但是程序執行是需要順序的,什麽時候該執行什麽代碼呢?就是靠這個程序計數器來實現的,字節碼解釋器在工作的時候會改變這個計數器的值,來選取下一條需要執行的字節碼指令。

特點:

(1)、每個線程一個。大家知道,所謂的多線程事實上是把時間進行切片然後把細碎的時間無序的分配給多個線程使用,cpu在多個線程之間切換,看起來就像是多個線程同時執行。在頻繁的線程切換中藥保證每一個線程在被執行的時候都能夠正確的執行下一行代碼,就需要給每一個線程分配一個獨立的程序計數器。所以程序計數器是在藍色區域,是每一個線程都獨立擁有的,數據線程隔離。

(2)、因為是記錄一個虛擬機字節碼指令地址的,所以不會有內存溢出。

註意:如果線程執行的是一個java方法,這個計數器記錄的是正在執行的續集字節碼的指令地址,而如果正在執行的是一個Native方法,則計數器為空。
    Native方法:如果翻譯的話是翻譯成“本地方法”。理解的話就是一個java接口,但是它的實現不是使用java語言。詳細一點的介紹一篇博客:   http://blog.csdn.net/wike163/article/details/6635321。

// 該睡覺了。。。明天繼續

Java虛擬機一 內存管理機制