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,减少参数个数,减少局部变量,注意局部变量的作用域

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值