JVM复习(一)启动流程和基本结构

JVM启动流程

  • java命令接一个带有main方法的启动类
  • 首先装载配置,根据版本号等信息查找JVM配置文件jvm.cfg
  • 根据配置文件定位需要的dll(jvm.dll)
  • 从dll初始化虚拟获得相关的接口(JNIEnv),比如findclass等
  • 找到main方法并运行

JVM基本结构

PC寄存器指向下一条指令的地址,每个线程拥有一个PC寄存器,在线程创建时创建,执行本地方法时,PC值为undefined未定义

方法区保存装载的类信息,如类型的常量池(JDK7移动到了堆)、字段、方法信息、方法字节码,通常和perm永久区关联在一起

Java堆:(实例域、静态域、数组元素应用系统对象都保存在Java堆中,所有线程共享Java堆,GC回收

Java栈线程私有自动回收,不会发生内存泄漏,由一系列帧组成,每个帧保存一个方法的局部变量表(参数、局部变量)、栈操作数(Java没有寄存器,参数传递使用)、常量池指针,每一次方法调用创建一个帧,并压栈

栈上分配:小对象在没有逃逸的情况下,可以直接分配到栈上,减轻GC压力

递归次数太多,可能发生栈溢出,要让递归被更多的调用

1、增大栈空间,设置xss

2、减小局部变量表,如少用double和long,减少参数个数,减少局部变量,注意局部变量的作用域

猜你喜欢

转载自blog.csdn.net/qq_37575994/article/details/102581688
今日推荐