1. 程式人生 > >Java記憶體區域——程式計數器

Java記憶體區域——程式計數器

 

我們這個圖

這個圖中畫的大小並不能表示每一塊記憶體區域的大小,這只是一個概念模型,我們只是通過這個圖看一下有哪些區域,不要認為在這個圖中區域大就認為它所佔的記憶體區域就大。

這個怎麼理解呢?比如我們隨便寫一個程式碼

我們在用這個程式碼的時候,直接執行就可以了,這裡先不說這個方法是怎麼加到方法棧中的,當我們這個程式碼在執行的過程中,它是從上往下一行一行的去執行

其實這裡就用到了程式計數器,我們可以認為這個方法進棧之後,每一行程式碼都有一個標識,比如

首先執行第一行,然後執行第二行,以此類推,每次都從當前行找出來下一個要執行的語句來進行執行。

從第2行開始往下執行,當執行第4行時,因為a<b所以,程式計數器的值變成了7,就會去第7行執行。

可以把程式計數器理解成,當前執行緒所執行的位元組碼的行號指示器

就是每一個執行緒都會有它自己的程式計數器。

每一個執行緒是一個順序執行單元,每一個執行緒都會有它自己的程式計數器。比如說,一個方法不在main方法中,然後,每次開執行緒來呼叫這個方法的時候,每一個執行緒都有它自己的程式計數器。

執行緒是一個順序執行單元,那麼,每一個執行單元,它都會有一個單獨的程式計數器,那麼,在執行程式的過程中程式計數器是獨立的。

也就是我們這裡標的1,2,3,4,5

當然,它不是這樣的1,2,3,4,5。

為什麼這個區域沒有規定任何的記憶體溢位的情況呢?因為,我們並不操作這一塊,作為開發者來講,是不需要操作程式計數器的,程式計數器是由JVM內部維護的,所以是沒有記憶體溢位情況。

Java中是不能用goto的,goto就是跳到某一行,它就類似於操作程式計數器。goto是Java中唯一的一個保留字,保留字就是,Java中沒有,但是也不讓開發者用的一個單詞。保留字的目的就是為了可能在以後的版本中會增加這麼一個標識作為它的一個關鍵字來使用