jvm
刘小烦好烦
这个作者很懒,什么都没留下…
展开
-
虚拟机栈的异常
常见异常 OOM: 由于当前程序线程数过多,会导致出现虚拟机栈内存溢出问题 不过这个异常很少见,因为系统创建线程的开销远大于创建虚拟机栈的开销大 SOF: 由于方法递归的层次太深,a->b->c->d->.. 出现的方法调用深度方法的局部变量由很大关系 ...原创 2021-03-20 20:25:00 · 112 阅读 · 0 评论 -
栈帧的结构
栈帧的结构 标题栈的结构分为四层 局部变量 当前方法的局部变量 基本数据类型存值,引用数据类型存地址 数据槽(slot)->专门对应于我们存储数据的字节 一个数据槽4个字节,所有基本数据类型和引用数据类型基本上都是占用一个槽,只有double和long占用两个槽,为了代码的快速分配 一般情况下非静态方法的第一个位置存放的是当前对象的引用(this) 操作数栈 对方法中的变量提供计算的区域 常量信息,常量数据的引用 常量数据会专门存放到常量池中,基本数据类型、引用数据类型都存放常量原创 2021-03-19 22:03:10 · 171 阅读 · 0 评论 -
栈帧的作用
每一个线程都会对一个虚拟机栈 线程中的每个方法都会创建一个栈帧() 栈帧可以把它理解为一个数据结构(数组,map) 存放了本次方法执行过程中所需要的所有数据 如果一个线程中有多个方法的调用a->b->c->d 发挥虚拟机栈的作用 先进后出,后进先出,会对栈帧进行压栈操作 方法的调用就类似于栈帧的压栈和出栈 当前正在执行的方法,它的栈帧一定在栈顶,我们只能获取到栈顶位置,栈帧中的数据 ...原创 2021-03-19 21:37:27 · 189 阅读 · 0 评论 -
虚拟机栈
虚拟机栈 存放当前线程中所声明的变量 java的数据类型 基本数据类型 引用数据类型 基本数据类型和引用数据类型划分的标准是什么? 变量在声明的时候,是否能够确认占用内存的大小 数据类型 是否能确认占用内存大小 基本数据类型 能 引用数据类型 不能 基本数据类型 名称 字节 byte 1 short 2 int 4 long 8 float 4 double 8 boolean 1位 char 2 引用数据类型 类 接口 数原创 2021-03-18 22:36:12 · 54 阅读 · 0 评论 -
程序计数器
程序计数器 JVM内存划分 程序计数器只为当前的线程所服务 cpu将时间片分配给线程,然后线程开始执行对应代码(指令) Thread1 --> 50 Thread2 -->33 Thread3 --> ? 程序计数器会记录当前线程要执行指令的内存地址 因为指令也会被存放到JVM的内存中(加载类的过程中) 它只占用一小部分内存区域,只记录一个地址,所以我们认为程序计数器是不会出现内存溢出问题的分区。 ...原创 2021-03-18 22:10:54 · 62 阅读 · 0 评论