![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
JustinNeil
年少是你未醒的梦话,风华是燃尽的彼岸花
展开
-
HotSpot虚拟机对象探秘
HotSpot虚拟机对象探秘对象的创建类加载检查分配内存指针碰撞空闲链表内存分配并发问题初始化零值设置对象头执行init方法对象的内存布局对象的访问定位对象的创建Java创建对象的过程包含:1.类加载检查2.分配内存3.初始化零值4.设置对象头5.执行init方法类加载检查虚拟机遇到一条new指令时,首先将去检查这个指令的参数能否在常量池定位到这个类的符号引用,并且检查这个符号引...原创 2019-08-02 19:07:46 · 147 阅读 · 0 评论 -
Full GC的触发条件
Full GC 的触发条件 对于Minor GC,其触发条件非常简单,当 Eden 空间满时,就将触发一次 Minor GC。而 Full GC 则相对复杂,有以下条件:1. 调用 System.gc() 只是建议虚拟机执行 Full GC,但是虚拟机不一定真正去执行。不建议使用这种方式,而是让虚拟机管理内存。2. 老年代空间不足 老年代空间不足的常见场景为前文所讲的大对象直接进入...原创 2019-08-17 08:56:06 · 2382 阅读 · 0 评论 -
双亲委派模型
双亲委派模型双亲委派模型简介双亲委派模型实现源码分析双亲委派模型的好处双亲委派模型简介每一个类都有一个对应它的类加载器。系统中的类加载器在协同工作的时候会默认使用双亲委派模型 。即在类加载的时候,系统会首先判断当前类是否被加载过。已经被加载的类会直接返回,否则才会尝试加载。加载的时候,首先会把该请求委派该父类加载器的 loadClass() 处理,因此所有的请求最终都应该传送到顶层的启动类...原创 2019-08-03 11:40:36 · 821 阅读 · 0 评论 -
JVM类加载器
JVM类加载器BootstrapClassLoader(启动类加载器)ExtensionClassLoader(扩展类加载器)AppClassLoader(应用程序类加载器)JVM中内置了三个重要的 ClassLoader,除了 BootstrapClassLoader 其他类加载器均由 Java 实现且全部继承自java.lang.ClassLoaderBootstrapClassLoade...原创 2019-08-03 10:46:24 · 120 阅读 · 0 评论 -
类加载过程
类加载过程加载验证准备解析初始化Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些 Class 文件呢?系统加载 Class 类型的文件主要三步:加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。加载类加载过程的第一步,主要完成下面3件事情:通过全类名获取定义此类的二进制字节流将字节流所代表的静态存储结构转换为方法...原创 2019-08-03 10:49:02 · 107 阅读 · 0 评论 -
Class类文件结构
类文件结构概述Class文件结构总结魔数Class文件版本常量池访问标志当前类索引、父类索引与接口索引集合字段表集合方法表集合属性表集合概述在Java中JVM可以理解的代码,就叫做字节码(后缀名为.class的文件),它不面向任何特定的处理器,只面向虚拟机。Java通过字节码的形式,在一定程度上解决了传统语言效率低的问题,同时又保留解释型语言可移植的特点,所以Java程序运行时比较高效。而且由...原创 2019-08-03 11:28:34 · 255 阅读 · 0 评论 -
JVM垃圾收集器
JVM垃圾收集器Serial收集器ParNew收集器Parallel Scavenge收集器Serial Old收集器Parallel Old收集器CMS收集器G1 收集器如果说收集算法是垃圾回收的方法论,那么收集器就是垃圾回收的具体实现,没有哪一个垃圾收集器是绝对完美的,我们能做的只是根据应用场景去选择合适的垃圾收集器。Serial收集器Serial(串行)收集器是最基本、历史最悠久的收集...原创 2019-08-03 10:17:53 · 116 阅读 · 0 评论 -
JVM垃圾收集算法整理
JVM垃圾收集算法标记-清除算法复制算法标记-整理算法分代收集算法JVM中的垃圾收集算法重要包含标记-清除算法,复制算法,标记-整理算法,分代收集算法。标记-清除算法该算法分为“标记前”和“清除”阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有标记的对象,标记的过程采用的是可达性分析算法。它是最基础的收集算法,后续的算法都是对其进行改进得到的,该算法主要有两个明显的不足:1.效...原创 2019-08-03 10:04:57 · 117 阅读 · 0 评论 -
JVM如何判断对象已死亡
JVM如何判断对象已死亡如何判断一个对象已经无效引用计数法可达性分析算法引用类型强引用软引用弱引用虚引用不可达的对象非死不可吗?如何判断一个常量是废弃常量如何判断一个类是废弃的类堆中几乎放着所有的对象实例,对堆垃圾回收前的第一步就是要判断那些对象已经死亡(即不能再被任何途径使用的对象)如何判断一个对象已经无效引用计数法给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加 1;当引用...原创 2019-08-03 10:59:52 · 919 阅读 · 1 评论 -
JVM内存分配与回收
JVM内存分配与回收概述Java堆空间对象优先在Eden区分配大对象直接进入老年代长期存活的对象将进入老年代动态对象年龄判断概述Java 的自动内存管理主要是针对对象内存的回收和对象内存的分配。同时,Java 自动内存管理最核心的功能是堆内存中对象的分配与回收。Java堆空间Java堆是垃圾收集器管理的主要区域,因此也被称作GC 堆(Garbage Collected Heap).从垃圾回...原创 2019-08-03 09:56:20 · 167 阅读 · 0 评论 -
类初始化时机
类初始化时机主动引用被动引用主动引用 虚拟机规范中并没有强制约束何时进行加载,但是规范严格规定了有且只有下列五种情况必须对类进行初始化(加载、验证、准备都会随之发生):遇到 new、getstatic、putstatic、invokestatic这四条字节码指令时,如果类没有进行过初始化,则必须先触发其初始化。最常见的生成这 4 条指令的场景是:使用 new关键字实例化对象的时候;读取或...原创 2019-08-17 10:03:13 · 315 阅读 · 0 评论