
JVM
文章平均质量分 95
JVM学习笔记
Kim_smile
Be brave to try
展开
-
深入理解Java虚拟机——类加载机制
文章目录类加载机制类的生命周期类的加载过程1、加载2、验证3、准备4、解析5、初始化类的初始化时机类加载器类与类加载器类加载器分类双亲委派模型工作过程源码分析双亲委派机制的好处类加载机制类的生命周期一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)七个阶段,其中验证、原创 2021-10-24 20:43:01 · 511 阅读 · 2 评论 -
CMS与G1垃圾收集器详解
CMS 收集器CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。它非常符合在注重用户交互体验的应用上使用.CMS 收集器是 HotSpot 虚拟机第一款真正意义上的并发收集器,它第一次实现了让垃圾收集线程与用户线程(基本上)同时工作。作用域:老年代垃圾收集算法:标记 - 清除算法线程数:并发线程特点:以缩短停顿时间为目标从名字中的Mark Sweep可以看出,CMS 收集器是基于 “标记-清除”算法实现的,它的运作过程相比于前面几种垃圾收集原创 2021-10-24 20:11:08 · 3147 阅读 · 0 评论 -
深入理解Java虚拟机——垃圾收集器与内存分配策略
文章目录对象已死?引用计数算法可达性分析算法再谈引用强引用:软引用:弱引用:虚引用:回收方法区垃圾收集算法标记 - 清除算法缺点:标记 - 复制算法标记 - 整理算法分代收集理论分代收集算法GC目标堆的内存细分垃圾收集器Serial 收集器ParNew 收集器Parallel Scavenge 收集器Serial Old 收集器Parallel Old 收集器CMS 收集器G1 收集器特点运行过程细节内存分配策略1、对象优先在 Eden 分配2、大对象直接进入老年代3、长期存活的对象将进入老年代4、动态对象原创 2021-10-24 19:50:16 · 2087 阅读 · 0 评论 -
字符串常量池与包装类详解
字符串常量池设计思想JVM为了提升性能和减少内存开销,避免重复创建字符串,其维护了一块特殊的内存空间,即字符串常量池。当需要使用字符串时,先去检查字符串常量池是否存在该字符串,若存在,则直接返回该字符串的引用地址;若不存在,则在字符串常量池中创建字符串对象,并返回对象的引用地址。String a = "abc"; // 放至常量池String b = "abc"; // 从常量池中取出System.out.println(a == b); // trzue注意:在 JDK7 之前,字符串常量池原创 2021-10-23 20:03:23 · 344 阅读 · 0 评论 -
深入理解Java虚拟机——HotSpot虚拟机对象探秘
文章目录对象的创建1、类加载检查2、分配内存3、初始化零值4、设置对象头5、执行 init 方法对象的内存布局对象的访问定位对象的创建1、类加载检查当虚拟机遇到一条 new 指令时,首先将去检查这个指令的参数是否能在Metaspace的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载过、解析和初始化过。如果没有,那必须先执行相应的类加载过程。(通过双亲委派模式,将类加载进内存)2、分配内存在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需的内存大小在类加载原创 2021-10-23 10:05:24 · 254 阅读 · 0 评论 -
深入理解Java虚拟机——Java内存区域
运行时数据区程序计数器(线程私有)虚拟机栈(线程私有)本地方法栈(线程私有)堆(线程共享)方法区(线程共享)Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域。JDK 1.8 和之前的版本略有不同:程序计数器程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这原创 2021-10-23 09:53:34 · 387 阅读 · 0 评论