JVM-Stacks 虚拟机栈
简单理解一下JVM有那些部分组成如下:
简单说明一下数据结构栈和虚拟机栈的区别:
定义:
(1)每个线程运行时所需要的内存,称为虚拟机栈
(2)每个栈由多个栈帧(Frame)组成,对应着每次方法调用时所占用的内存
(3)每个线程只能有一个栈帧,对应着当前正在执行的那个方法演示:
解以:
(1)垃圾回收不涉及到栈内存,栈在弹出栈后自动回收。
(2)栈内存分配不一定分配越大就越好,分配大了只是跟多次的方法递归调用,反而会影响线程数目变小。
(3)方法内的局部变量在什么情况下线程安全:
如果方法内局部变量没用逃离方法的作用访问,它是线程安全的
如果是局部变量引用对象,并逃离方法的作用方法,需要考虑线程安全
栈帧内存溢出的两种情况,如下:
线程整段案例(1)
CPU占用过多如:死循环导致其他线程调用
在未开启死循环的情况下CPU未站任何内存
开启死循环后,占用过多CPU内存调用
线程整段案例(2)
程序运行很长时间未结果:导致原因死锁