Ⅲ、运行时数据区

2020-02-10  本文已影响0人  唐騦忆

一、概述

运行时数据区
1.8后运行时数据区
线程与进程独立
jvm线程与cpu线程

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

简介

详细作用

程序计数器作用
问题一
问题二
注意:

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

三、虚拟机栈


堆和栈
基本内容
特点
虚拟机栈异常

StackOverFlow经常在递归中出现。


设置虚拟机栈内存大小

栈帧

栈运行
栈帧的组成

3.1 局部变量表


局部变量与栈帧,栈

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


jclasslib

slot
slot重复利用

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


补充

3.2 操作数栈

定义

作用

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


栈顶缓存技术

3.3 动态链接

定义

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


方法的调用

方法的绑定
判断依据
调用指令

invokedynamic
重写的本质

重写方法调用

3.4 方法返回地址


方法返回地址

3.5 附加信息

附加信息

3.6 虚拟机栈面试题


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

四、堆

4.1 构成

堆构成

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


YGC
from与to交换

元空间
堆调优
元空间

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


获取jvm堆内存
调优:
1.-Xms与-Xmx相同,避免JVM与GC争抢内存,峰值忽高忽低。
具体设置

五、方法区

六、本地方法栈

上一篇 下一篇

猜你喜欢

热点阅读