Java虚拟机、内存溢出、垃圾回收相关
一、java虚拟机
运行一个java程序,就会生成一个虚拟机实例,程序关闭,实例消亡。过main方法启动程序。 虚拟机内部有两种线程:守护线程和非守护线程。守护由虚拟机自己使用,例如执行垃圾回收的任务。main是非守护线程。
二、java虚拟机体系结构
类装载系统:装载类或借口
执行引擎:
运行时数据区:装载进来的class信息,程序对象,方法参数,返回值,局部变量。
方法区和堆是所有线程共享。虚拟机装在一个class文件时,从二进制文件中解析类型信息,把类型信息放到方法区中,程序运行时,把创建的对象放到堆中。
当一个线程创建时,会得到一个程序计数器,和java栈,计数器指向下一条将要执行的指令。栈保存了局部变量,参数,返回值,运算中间结果。栈由栈枕组成,一个栈帧是一个java方法调用的状态,线程调用一个方法,虚拟机就往栈中压入一个栈帧,方法返回时,栈帧弹出并抛弃。栈和计数器不能共享。
三、垃圾回收
Java堆中存放着程序创建的所有对象,GC可以自动释放堆中不再使用的对象
四、内存溢出
堆溢出:对象太多
栈溢出:函数调用太多
permgen space溢出:class太多