java virtual Machine
好处:一次编写,到处运行。
自动内存管理,垃圾回收功能。
数组下表越界检查。
多态。
理解底层的底层原理:
整体框架: 程序计数器作用
用于保存 JVM中 下一条所要执行的指令的地址
特点(每个线程都有自己的程序计数器。)
线程私有
CPU会为每个线程分配时间片,当当前线程的时间片使用完以后,CPU就会去执行另一个线程中的代码。程序计数器是每个线程所私有的,当另一个线程的时间片用完,又返回来执行当前线程的代码时,通过程序计数器可以知道应该执行哪一句指令。不会存在内存溢出
虚拟机栈:线程运行时需要的内存空间。每个虚拟机栈内是由多个栈帧构成的。
定义
每个线程运行需要的内存空间,称为虚拟机栈
每个栈由多个栈帧组成,对应着每次调用方法时所占用的内存
每个线程只能有一个活动栈帧,对应着当前正在执行的方法
演示
栈帧:每个方法运行时占用的内存。
垃圾回收是否涉及栈内存?
不需要。因为虚拟机栈中是由一个个栈帧组成的,在方法执行完毕后,对应的栈帧就会被d出栈。所以无需通过垃圾回收机制去回收内存。栈内存的分配越大越好吗?
不是。因为物理内存是一定的,栈内存越大,可以支持更多的递归调用,但是可执行的线程数就会越少。方法内的局部变量是否是线程安全的?
如果方法内局部变量没有逃离方法的作用范围,则是线程安全的如果如果局部变量引用了对象,并逃离了方法的作用范围,则需要考虑线程安全问题
Java.lang.stackOverflowError 栈内存溢出发生原因
虚拟机栈中,栈帧过多(无限递归)每个栈帧所占用过大
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)