JVM
小油菜j
这个作者很懒,什么都没留下…
展开
-
常见的垃圾回收器
1.JDK诞生 Serial追随 提高效率,诞生了PS,为了配合CMS,诞生了PN,CMS是1.4版本后期引入,CMS是里程碑式的GC,它开启了并发回收的过程,但是CMS毛病较多,因此目前任何一个JDK版本默认是CMS 并发垃圾回收是因为无法忍受STW(Stop-The-World)2.Serial年轻代 串行回收单CPU效率最高,虚拟机是Client模式的默认垃圾回收器。Serial回收器使用单线程进行垃圾回收,使用复制算法。在 HotSpot 虚拟机中,使用-XX:+UseSerialGC 参..转载 2020-06-15 17:02:04 · 235 阅读 · 0 评论 -
JMM及类加载JVM调优总结
1:类加载-初始化 1. 加载过程 2. Loading 3. 双亲委派,主要出于安全来考虑2. LazyLoading 五种情况1. –new getstatic putstatic invokestatic指令,访问final变量除外–java.lang.reflect对类进行反射调用时–初始化子类的时候,父类首先初始化–虚拟机启动时,被执行的主类必须初始化–动态语言支持java.lang.invoke.MethodHandle解析的结果为REF_g...转载 2020-06-15 16:51:40 · 1658 阅读 · 1 评论 -
触发JVM进行Full GC的情况及应对策略
堆内存划分为 Eden、Survivor 和 Tenured/Old 空间,如下图所示:从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,对老年代GC称为Major GC,而Full GC是对整个堆来说的,在最近几个版本的JDK里默认包括了对永生带即方法区的回收(JDK8中无永生带了),出现Full GC的时候经常伴随至少一次的Minor GC,但...转载 2019-03-06 09:44:09 · 254 阅读 · 0 评论 -
深入理解JVM(八)——HotSpot垃圾收集器详解
HotSpot虚拟机提供了多种垃圾收集器,每种收集器都有各自的特点,没有最好的垃圾收集器,只有最适合的垃圾收集器。我们可以根据自己实际的应用需求选择最适合的垃圾收集器。根据新生代和老年代各自的特点,我们应该分别为它们选择不同的收集器,以提升垃圾回收效率。新生代垃圾收集器1. Serial垃圾收集器单线程只开启一条GC线程进行垃圾回收,并且在垃圾回收过程中停止一切用户线程,从而用...转载 2019-03-06 09:39:54 · 228 阅读 · 0 评论 -
深入理解JVM(七)——垃圾收集策略详解
Java虚拟机的内存模型分为五个部分,分别是:程序计数器、Java虚拟机栈、本地方法栈、堆、方法区。这五个区域既然是存储空间,那么为了避免Java虚拟机在运行期间内存存满的情况,就必须得有一个垃圾收集者的角色,不定期地回收一些无效内存,以保障Java虚拟机能够健康地持续运行。这个垃圾收集者就是平常我们所说的“垃圾收集器”,那么垃圾收集器在何时清扫内存?清扫哪些数据?这就是接下来我们要解决的...转载 2019-03-06 09:39:13 · 253 阅读 · 0 评论 -
深入理解JVM(六)——对象内存的分配策略
Java所承诺的自动内存管理主要是针对对象内存的回收和对象内存的分配。在Java虚拟机的五块内存空间中,程序计数器、Java虚拟机栈、本地方法栈内存的分配和回收都具有确定性,一般在编译阶段就能确定需要分配的内存大小,并且由于都是线程私有,因此它们的内存空间都随着线程的创建而创建,线程的结束而回收。也就是这三个区域的内存分配和回收都具有确定性,垃圾回收器不需要在这里花费太大的精力。而Java...转载 2019-03-06 09:38:14 · 195 阅读 · 0 评论 -
深入理解JVM(五)——JVM内存模型
JVM内存模型Java虚拟机(Java Virtual Machine=JVM)的内存空间分为五个部分,分别是:1. 程序计数器2. Java虚拟机栈3. 本地方法栈4. 堆5. 方法区。下面对这五个区域展开深入的介绍。1. 程序计数器1.1. 什么是程序计数器?程序计数器是一块较小的内存空间,可以把它看作当前线程正在执行的字节码的行号指示器。也就是说,程序计...转载 2019-03-06 09:37:37 · 178 阅读 · 0 评论 -
深入理解JVM(四)——揭开HotSpot对象创建的奥秘
对象的创建过程当虚拟机遇到一条含有new的指令时,会进行一系列对象创建的操作:检查常量池中是否有即将要创建的这个对象所属的类的符号引用;若常量池中没有这个类的符号引用,说明这个类还没有被定义!抛出ClassNotFoundException;若常量池中有这个类的符号引用,则进行下一步工作;进而检查这个符号引用所代表的类是否已经被JVM加载;若该类还没有被加载,就找该类的class...转载 2019-03-06 09:36:41 · 169 阅读 · 0 评论 -
深入理解JVM(三)——类加载的时机
类的生命周期一个类从加载进内存到卸载出内存为止,一共经历7个阶段:加载——>验证——>准备——>解析——>初始化——>使用——>卸载其中,类加载包括5个阶段:加载——>验证——>准备——>解析——>初始化在类加载的过程中,以下3个过程称为连接:验证——>准备——>解析因此,JVM的类加载过程也可以概括...转载 2019-03-06 09:36:02 · 175 阅读 · 0 评论 -
深入理解JVM(二)——类加载的过程
通过之前的介绍可知,类加载过程共有5个步骤,分别是:加载、验证、准备、解析、初始化。其中,验证、准备、解析称为连接。下面详细介绍这5个过程JVM所做的工作。加载注意:“加载”是“类加载”过程的第一步,千万不要混淆。1. 加载的过程在加载过程中,JVM主要做3件事情:通过一个类的全限定名来获取这个类的二进制字节流,即class文件:在程序运行过程中,当要访问一个类时,若发现这个类...转载 2019-03-06 09:35:06 · 184 阅读 · 0 评论 -
深入理解JVM(一)——Class文件结构
什么是JVM的“无关性”?Java具有平台无关性,也就是任何操作系统都能运行Java代码。之所以能实现这一点,是因为Java运行在虚拟机之上,不同的操作系统都拥有各自的Java虚拟机,因此Java能实现“一次编写,处处运行”。而JVM不仅具有平台无关性,还具有语言无关性。平台无关性是指不同操作系统都有各自的JVM,而语言无关性是指Java虚拟机能运行除Java以外的代码!这听起来非常...转载 2019-03-06 09:33:35 · 200 阅读 · 0 评论