JVM第一部分
PC寄存器:存储的是数字 0, 3, 6, 10, 17 这样的字节码偏移量。
LineNumberTable:是一个映射表,它将上述的偏移量“翻译”成我们程序员能看懂的源代码行号。
JVM堆
JVM堆由两部分组成:年轻代+老年代
年轻代包括三部分:eden区,s0,s1 s0+s1被称作幸存者区
老年代主要保存生命周期长的对象
jdk1.7和1.8堆的区别
1.7的堆中有一个区域是永久代,用来存放类信息,静态变量,常量,编译后的代码
1.8移除了永久代,把数据存储到本地内存的元空间中,防止内存溢出。
什么是虚拟机栈
线程运行时需要的内存称为虚拟机栈
垃圾回收是否涉及栈内存
不涉及,垃圾回收主要是用来回收堆内存
栈内存空间越大越好吗
未必,栈内存大了会导致能活动的线程数变少
方法内的局部变量是否安全
形参也是一种局部变量
栈内存溢出情况
栈帧过多导致栈内存溢出 例如递归
栈帧过大导致栈内存溢出
栈和堆的区别
栈主要是用来存放局部变量和方法调用,堆主要是用来存储java对象和数组的。
堆中有垃圾回收机制,而栈没有。
栈是线程私有的,堆是线程共有的。