运行时数据区

运行时数据区

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lxDX73NB-1625682065760)(C:\Users\14584\AppData\Roaming\Typora\typora-user-images\image-20210523205605944.png)]

一个JVM进程对应一个方法区和堆,多个线程共享。

一个线程对应独立的栈,本地方法栈,程序计数器。

每个JVM只有一个Runtime实例,是运行时环境,相当于图上运行时数据区的框框。

JVM中的线程

Hotspot JVM的线程是内核级线程内核线程:建立和销毁都是由操作系统负责、通过系统调用完成的。

虚拟机中,每个线程都与操作系统本地线程直接映射,java线程结束后,本地线程也会回收。

jmv有许多后台线程主要有:

虚拟机线程

周期任务线程

Gc线程

编译线程

信号调度线程

程序计数器(pc寄存器 program counter register)

jvm的pc寄存器是对物理机的pc寄存器的抽象

很小的一块内存空间,是运行速度最快的存储区域。

作用:存储指向下一条指令的地址,由执行引擎读取下一条命令。

字节码指令中,前面的1,2,3,4…序号叫偏移地址,存储在pc寄存器中。

OOM,全称“Out Of Memory”,翻译成中文就是“内存用完了”
pc寄存器面试问题

pc寄存器存储字节码指令地址有有什么用?

为什么使用pc寄存器记录当前线程的执行地址?

答:cup在不停切换各个线程,所以当切换回来的时候,要知道该线程执行到哪一条命令了

pc寄存器为什么设定线程私有的?

因为每个线程都有自己的执行进度,当前字节码指令地址各不相同,所以每个线程独立pc寄存器

cpu时间片

cpu分给每个线程执行的时间。线程是并发执行的。

并行:多条路同时进行

串行:一条路依次进行

并发:一条路交替进行

虚拟机栈

java的指令根据来设计的

栈的优点是:指令集小,编译器容易实现

缺点:性能下降,实现同样功能需要更多指令,执行性比寄存器差

栈是运行时的单位,堆是存储的单位

形象理解:栈好比菜谱,堆好比锅,锅里有对象。

一个线程有一个栈,栈的内部保存着一个个栈帧,一个栈帧保存一个方法

随线程创建和停止

方法执行时入栈,方法结束时出栈

栈不存在垃圾回收问题

开发中遇到哪些异常

Stack OverflowError异常:线程请求分配的栈容量超过了虚拟机允许栈最大容量

outOfMemoryError异常:没有足够的内存去创建虚拟机栈

设置栈大小(调优)

-Xss命令修改栈的大小,详情看视频。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值