Ⅲ、运行时数据区
2020-02-10 本文已影响0人
唐騦忆
一、概述




二、程序计数器(PC寄存器)







注意:
并行:同一时间可以同时执行多个线程,区别于串行;
并发:同一时间内只有一个线程在执行,cpu一个核在多个线程之间切换,交替执行。
三、虚拟机栈





StackOverFlow经常在递归中出现。






3.1 局部变量表


使用jclasslib可以查看class文件信息




成员变量中类变量会在链接中赋默认值,初始化中赋给定值;实例变量会在对象创建时在堆空间分配实例变量空间并赋默认值。
局部变量必须显式赋值,否则编译不通过。

3.2 操作数栈



局部变量表相当于元件库,操作数栈相当于工作区元件,执行引擎只对操作数栈进行操作。

3.3 动态链接

为什么需要常量池:
为了减小字节码文件大小,将符号等常量信息都保存在方法区的运行时常量池中,使用间接引用替代。










3.4 方法返回地址


3.5 附加信息

3.6 虚拟机栈面试题


针对局部变量是线程安全的,只能单线程操作;成员变量或main方法里的变量是非线程安全的,可以多线程操作,产生并发冲突
四、堆
4.1 构成

YGC->FGC->OOM
JDK8永久代更换为元空间。






堆内存默认起始占物理内存1/64,最大占物理内存1/4。

调优:
1.-Xms与-Xmx相同,避免JVM与GC争抢内存,峰值忽高忽低。

五、方法区

六、本地方法栈
