JVM理解

  1. class文件组成
    虚拟机指令、符号表、其他辅助信息

  2. 数据结构
    无符号数:字面量(数值)
    表:一个数据结构,以_info结尾这样

  3. class文件分析工具
    Notepad安装插件HexEditor

  4. class文件格式
    在这里插入图片描述

  5. java虚拟机字节码指令表

  6. 类生命周期
    1.加载

    1.获取二进制字节流
    2.静态存储结构转化为方法区的运行时数据结构
    3.Java堆里面生成一个类对象,作为方法区的访问入口。
 2.验证
	1.验证Class文件的标识:魔数Magic Number
	2.验证Class文件的版本号
	3.验证常量池(常量类型、常量类型数据结构是否正确、UTF8是否符合标准)
	4.Class文件的每个部分(字段表、方法表等)是否正确
	5.元数据验证(父类验证、继承验证、final验证)
	6.字节码验证(指令验证)
	7.符号引用验证(通过符号引用是否能找到字段、方法、类)
 3.准备
	为类变量分配内存并且设置类变量的初始化阶段。
	只对static类变量进行内存分配。
	static int n = 2;
	初始化值是0,而不是2。因为这个时候还没执行任何Java方法(<clinit>)。

	static final int n = 2;
	对应到常量池 ConstantValue,在准备阶段n必须被赋值成2。

	类变量:一般称为静态变量。
	实例变量:当对象被实例化的时候,实例变量就跟着确定。随着对象销毁而销毁。
 4.解析
	对类、字段、方法、接口进行解析
 5.初始化
	<clinit>静态变量,静态块的初始化
	<init>类的初始化
 6.使用
 7.卸载
  1. JVM怎么判断热点代码
    1. 抽样判断
      jvm周期性去栈顶查看被调用的方法.若经常出现的方法,就视为热点代码,这种方法实现起来简单,缺点是很难精确的知道一个方法的热度,容易受线程堵塞和外界因素的影响.

    2. 计算器判断
      通过计算器判断代码被调用的次数,虚拟机给方法或者代码块建立计算器,统计方法被调试次数,超过一定次数就视为热点代码,触发JIT编译。

      hotspot使用的是计算器判断,它使用了两类计数器:方法调用计数器和回边计数器.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值