深入理解java虚拟机学习笔记
文章平均质量分 93
ijbuhv
这个作者很懒,什么都没留下…
展开
-
利用Instrumentation热更新
热更新一种方式是通过classLoader重新加载来进行,通过定义不同的classLoader,监听到文件变化时,卸载原来的classLoader,然后用新的classLoader加载新的jar包,tomcat采用的是这种方式。另外一种方式是利用AgentMain的方式来进行。其主要是利用tools包下的VirtualMachine将agent.jar方法。...原创 2020-07-14 19:57:19 · 745 阅读 · 1 评论 -
深入理解java虚拟机---虚拟机类加载机制
1 类加载的时机1.1 类的生命周期注:加载,验证,准备,初始化和卸载这5个阶段的顺序是确定的,而解析阶段则不一定,它在某些情况可以在初始化阶段之后。1.2 必须对类进行初始化的5种情况:遇到new,getstatic,putstatic,invokestatic这4条字节码指令时使用java.lang.reflect包的方法对类进行反射调用时当初始化一个类的时候,如果发现原创 2017-02-27 21:23:25 · 335 阅读 · 0 评论 -
深入理解java虚拟机--->虚拟机字节码执行引擎
1 运行时栈帧结构栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。每一个栈帧中包括有局部变量表 , 操作数栈,动态连接 , 方法返回地址。1.1 局部变量表局部变量表是一组变量值存储空间,用于存放方法参数和方法内部定义的局部变量。在java编译的class文件中,方法的Code属性中存储了max_locals确定了该方法的局部变原创 2017-02-28 18:33:13 · 524 阅读 · 0 评论 -
java内存回收
1 垃圾对象的判定1.1 引用计数法引用计数法判定一个对象是否为垃圾对象的方式是为每一个对象设置一个引用计数器,每当一个对象引用它时,这个引用计数器就加1,引用失效时,则其减1,当引用计数器为0时则为垃圾对象.这种方式不能处理循环引用。1.2 可达性分析算法通过一系列的GCRoots开始向下搜索,对于没有GCRoots能够达到的对象则判定为垃圾对象。java语言中GCRoots包括原创 2017-03-08 11:42:09 · 433 阅读 · 0 评论 -
深入理解java虚拟机---类文件结构
Class类文件的结构Class文件格式采用一张类似于C语言结构体的伪结构来存储数据,这种伪数据结构中只有两种数据类型:无符号数和表:无符号数属于基本的数据类型,以u1,u2,u4,u8来分别代表1个字节,2个字节,4个字节和8个字节的无符号数。表是由多个无符号数或者其他表作为数据项构成的复合数据类型。整个Class文件本质上就是一张表。如下图所示魔数和Class文件的版本原创 2017-02-27 11:34:14 · 381 阅读 · 0 评论 -
java内存区域与内存溢出异常
1 运行时数据区1.1 程序计数器程序计数器是一块较小的内存空间,主要功能是作为当前线程所执行字节码当前行号指示器。当其运行java方法时,指向的是虚拟机字节码指令的地址,当其运行native方法时,则为空。程序计数器是java虚拟机规范中唯一没有OutOfMemoryError情况的区域.1.2 虚拟机栈虚拟机栈描述的主要是java方法执行的内存模型,用于存储方法调用时的原创 2017-03-07 14:49:17 · 536 阅读 · 0 评论