Java虚拟机常量池和本地变量表、自己定义的数值自动装入常量池
從此文可以大體了解,
? ??https://blog.csdn.net/bcbobo21cn/article/details/109108970
自己的程序中定義的數(shù)值,像 int a=999; ,這樣的,999這個值是自動裝入虛擬機常量池的;下面來看一下具體情況是不是;
hello4.java;此程序只是定義數(shù)值,啥也不做;然后反匯編之;
public class hello4 {public static void main(String[] args) { int a11 = -21474999;int a16 = -32769;int a07 = 32768;int a08 = 65535;int a09 = 65536;int a10 = 21474999;} }構(gòu)建;反匯編;
看一下對于每個定義的數(shù)值執(zhí)行了2條指令:ldc,istore_n;
ldc: 從運行時常量池中提取數(shù)據(jù)并壓入操作數(shù)棧;
istore_<n>: 將一個int類型數(shù)據(jù)保存到本地變量表中;
? ? 也就是說,自己程序給定的數(shù)值,是自動裝入了虛擬機常量池;然后用ldc放入操作數(shù)棧,用istore指令在本地變量表中再存一份;
? ? 常量池在網(wǎng)上資料有很多解釋;什么是本地變量表,還有一個詞叫局部變量表,目前還不清楚二者的區(qū)別;
看一下下圖的描述;
從這圖看;每個線程有一個java虛擬機實例,其中包含一個虛擬機棧;各個類的方法調(diào)用的棧幀在虛擬機棧中;一個具體的棧幀中包含本地變量表、操作數(shù)棧等這些;本地變量表就放各種具體類型的數(shù)值;?
使用如下命令可以查看常量池;javap -verbose hello4
看 Constant pool:后面;自己程序給定的數(shù)值都在常量池中,這是自動裝入的;常量池中還有一些固定的符號,如 hello4 這些;
此命令還有如下輸出;
? ? 還有一個叫行號表,LineNumberTable ,的東西;先到這里;
總結(jié)
以上是生活随笔為你收集整理的Java虚拟机常量池和本地变量表、自己定义的数值自动装入常量池的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Matlab创建特殊数组学习
- 下一篇: 一台机器上有几个java虚拟机