Java運行時數(shù)據(jù)區(qū)
1.程序計數(shù)器:是一塊較小的的內(nèi)存空間,是當前程序所執(zhí)行的字節(jié)碼的行號指示器。字節(jié)碼解釋器的工作時就是通過改變這個計數(shù)器的值來選取下一條需要執(zhí)行的字節(jié)碼指令,分支,循環(huán),跳轉(zhuǎn),異常處理
2.Java虛擬機棧:每個方法在執(zhí)行時都會創(chuàng)建一個幀棧,用于存儲局部變量表,操作數(shù)棧,動態(tài)鏈接方法出口等。
3.本地方法棧:與虛擬機棧比較相似,主要為虛擬機使用到的native方法服務。
4.java堆:此區(qū)主要用于存儲對象。java虛擬機規(guī)范中說,所有對象示例以及數(shù)組都要在堆上分配,但是隨著JIT編譯器的發(fā)展與逃逸技術的逐漸成熟,棧上分配,標量替換等,不是所有的對象都在堆上分配 。?
5.方法區(qū),與堆一樣,是線程共享的內(nèi)存區(qū)域,用于存儲被虛擬機加載的類信息,常量,靜態(tài)變量,即時編譯后的代碼等數(shù)據(jù)。對于HotSpot來說也叫永久帶。
6.運行時常量池:是方法區(qū)的一部分。class文件除了有類的版本,字段,方法,接口等描述信息外,還有一項信息是常量池,用于存放編譯期間生成的各種字面量和符號引用。注意:String的intern()方法(intern用來返回常量池中的某字符串,如果常量池中已經(jīng)存在該字符串,則直接返回常量池中該對象的引用。否則,在常量池中加入該對象,然后返回引用)
7.直接內(nèi)存