JVM
文章平均质量分 69
王皮特
这个作者很懒,什么都没留下…
展开
-
再聊一下JVM虚拟机栈
1. 虚拟机栈 虚拟机栈是线程私有的, 与线程的生命周期同步。 在Java虚拟机规范中,对这个区域规定了两种异常状况: 1.StackOverflowError:当线程请求栈深度超出虚拟机栈所允许的深度时抛出。 2.OutOfMemoryError:当 Java 虚拟机动态扩展到无法申请足够内存时抛出 虚拟机栈的初衷是用来描述 Java 方法执行的内存模型,每个方法被执行的时候,JVM 都会在虚拟机栈中创建一个栈帧 栈帧 栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构, 每个原创 2021-03-16 15:57:11 · 66 阅读 · 0 评论 -
volatile关键字
1. volatile是什么? volatile是java虚拟机提供的一种轻量级同步机制。 2. volatile三个特征 保证可见性 不保证原子性 禁止指令重排 3. 如何保证可见性 java内存模型规定: 线程解锁前,必须把共享变量的值刷新回主内存。 线程加锁前,必须读取主内存的最新值到自己的工作内存。 加解锁是同一把锁。 因为JVM工作的实体是线程, jvm会为每个线程分配一片工作内存,工作内存是每个线程的私有的数据区域,而java内存模型规定所有变量都存储在主内存,主内存是共享的内存区域。所有线原创 2021-02-28 00:19:33 · 100 阅读 · 1 评论 -
JVM虚拟机内存
1 Java内存区域与内存溢出异常 1.1运行时数据区域 根据java虚拟机规范,Java的虚拟机啊锁需要的内存将会包括以下几个运行时数据区域。 1.1.1 程序计数器 程序计数器是一块较小的内存空间,线程私有。 字节码解释器工作就是通过改变这个计数器的值来选取吓一跳需要执行的字节码指令, 它是程序控制流的指示器,分支,循环,跳转,异常处理,线程恢复等基础功能。 如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址, 如果正在执行的是Native方法,这个计数器的值则为原创 2021-02-24 23:35:36 · 130 阅读 · 0 评论