
java虚拟机
辜智强 -buaa
这个作者很懒,什么都没留下…
展开
-
java对象的创建
下图是java对象的创建过程 类加载检查:虚拟机遇到一条new指令时,首先去检查这个指令的参数是否能够在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已经被加载过、解析和初始化过,如果没有,那么必须进行相应的类加载过程 分配内存:在类加载检查通过后,接下来虚拟机将为新生代对象分配内存,对象所需要的内存大小在类加载完成后便可 以确定,为定向分配内存空间等同于把一块确定大小的内...原创 2019-10-06 09:06:33 · 87 阅读 · 0 评论 -
对象的内存布局和访问定位
对象的内存布局 在hotspot虚拟机中,对象的内存布局可以分为3块区域:对象头,实例数据和对齐填充 hotspot虚拟机中的对象包括两部分信息,第一部分是用于存储对象自身的自身运行时数据(哈希码,GC分代年龄,锁状态标志),另一部分是类型指针,即对象指向他的类的元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例 实际数据部分是对象真正存储的有效信息,也是在程序中所定义的各种类型的字段内...原创 2019-10-06 10:29:39 · 155 阅读 · 0 评论 -
java内存区域与内存溢出异常
堆溢出 java堆内存的OOM异常是实际常见的内存溢出异常情况,当出现java堆内存溢出的情况时,异常堆栈信息OOM,并且会进一步提示java heap space。 需要使用内存映象分析工具对dump出来的堆转储快照进行分析,弄清楚是内存泄露还是内存溢出 如果是内存泄露,可进一步通过工具查看泄露对象的GC Roots的引用链,于是就能够找到泄露对象是通过怎么样的路径与GC Roots相关联并且...原创 2019-10-06 12:23:14 · 141 阅读 · 0 评论 -
JVM垃圾回收机制
如何判断对象已经死去 引用计数法 给对象添加一个引用计数器,每当有一个地方引用他时,计数器就加一,当引用失效时,引用计算器就减一,任何时候计数器为0的对象就是不可能再被使用的 这个方法实现简单,效率高,但是目前主流的虚拟机都没有选择这个算法来管理内存,主要的原因是他很难解决对象之间的循环引用带来的问题。 public class ReferenceCountingGc { Object i...原创 2019-10-06 20:42:39 · 107 阅读 · 0 评论 -
类加载过程
概述 虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制 与那些在编译器需要进行连接的工作的语言不同,在java语言里,类的加载,连接和初始化的过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一点性能开销,但是会为java应用程序提供更高的灵活性,java里天生可以动态拓展的语言特性...原创 2019-10-06 21:48:36 · 115 阅读 · 0 评论 -
类加载器及双亲委派模型
类加载器 虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到虚拟机外部去实现,以便让应用程序决定如何去获取所需要的类,实现这个动作的代码模块称为“类加载器” 对于任意一个类,都需要由加载他的类加载器和这个类本身一同确立其在java虚拟机中的唯一性,每一个类加载器都有一个独立的类名称空间,比较两个类是否相等,只有在同一个类加载器加载的前提下才有意义。 jv...原创 2019-10-08 20:55:39 · 80 阅读 · 0 评论