PC寄存器:存儲的是數字 0, 3, 6, 10, 17 這樣的字節碼偏移量。
LineNumberTable:是一個映射表,它將上述的偏移量“翻譯”成我們程序員能看懂的源代碼行號。
JVM堆
JVM堆由兩部分組成:年輕代+老年代
年輕代包括三部分:eden區,s0,s1 s0+s1被稱作幸存者區
老年代主要保存生命周期長的對象
jdk1.7和1.8堆的區別
1.7的堆中有一個區域是永久代,用來存放類信息,靜態變量,常量,編譯后的代碼
1.8移除了永久代,把數據存儲到本地內存的元空間中,防止內存溢出。
什么是虛擬機棧
線程運行時需要的內存稱為虛擬機棧
垃圾回收是否涉及棧內存
不涉及,垃圾回收主要是用來回收堆內存
棧內存空間越大越好嗎
未必,棧內存大了會導致能活動的線程數變少
方法內的局部變量是否安全
形參也是一種局部變量
棧內存溢出情況
棧幀過多導致棧內存溢出 例如遞歸
棧幀過大導致棧內存溢出
棧和堆的區別
棧主要是用來存放局部變量和方法調用,堆主要是用來存儲java對象和數組的。
堆中有垃圾回收機制,而棧沒有。
棧是線程私有的,堆是線程共有的。