![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
每日学习-jvm篇
封狼&
每天学习一点点
展开
-
内存分配与回收策略(118页)——摘自《深入理解java虚拟机》(每天学一点Day20191207)
内存分配与回收策略(118页)1.Minor GC和Full GC新生代GC(Minor GC):指发生在新生代的垃圾收集动作,因为Java对象大多具备朝生夕死的特性,所有MinorGC非常频繁,一般回收速度也比较快。老年代GC(Major GC/Full GC):指发生在老年代的GC,出现了Major GC,经常会伴随至少一次的MinorGC(Parallel Scavenge收集器的收集...原创 2019-12-07 12:48:46 · 108 阅读 · 0 评论 -
关于JVM虚拟机的垃圾收集器7种——摘自《深入理解java虚拟机》(每天学一点Day20191114)
虚拟机的垃圾收集器(98页)1.Serial(串行)收集器:最基本、发展历史最悠久的收集器。虚拟机运行在Client模式下的默认新生代收集器。新生代采用复制算法暂停所有用户线程。老年代采用标记-整理算法暂停所有线程。单线程收集器:它只会使用一个CPU或者一条收集线程去完成垃圾收集工作,同时在它进行垃圾收集时,必须暂停其他所有的工作线程,直到他收集结束。优点:简单而高效,对于限定单个CPU的环...原创 2019-11-14 19:43:55 · 117 阅读 · 0 评论 -
HotSpot虚拟机的算法实现——摘自《深入理解java虚拟机》(每天学一点Day20191111)
HotSpot的算法实现(95页)1.枚举根节点(GC停顿):分析工作必须在一个能确保一致性的快照中进行——这里“一致性”的意思是指在整个分析其间整个执行系统看起来就像是被冻结在某个时间点上。这里GC进行时必须停顿所有Java执行线程(Stop The World),即使在号称不会发生停顿的CMS收集器中,枚举根节点时也是必须要停顿的。2.安全点:程序执行时,并非在所有地方都能停顿下来开始GC...原创 2019-11-11 19:19:17 · 161 阅读 · 0 评论 -
关于几种垃圾回收算法——摘自《深入理解java虚拟机》(每天学一点Day20191111)
垃圾回收算法(90页)1.标记-清除算法(Mark-Sweep):首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。不足:一个是效率问题,标记和清除两个过程的效率都不高;另一个是空间问题,标记清除后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后再程序运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前出发GC。2.复制算法(Coping):可以解决效率问...原创 2019-11-11 17:39:38 · 107 阅读 · 0 评论 -
判断对象已死——摘自《深入理解java虚拟机》(每天学一点Day20191109)
判断对象已死:1》引用计数算法:无法解决相互循环引用的问题。例如:objA.instance=objB及objB.instance=objA等2》可达性分析法:通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可引用的。GC Roots的...原创 2019-11-09 15:08:17 · 123 阅读 · 0 评论 -
关于OutOfMemoryError异常——摘自《深入理解java虚拟机》(每天学一点Day20191107)
关于OutOfMemoryError异常(73页)1.虚拟机运行时区域除了程序计数器外,其他几个区域都有发生OutOfMemoryError异常OOM2.堆异常:当堆出现异常时,异常堆栈的提示是:java.lang.OutOfMemoryError,进一步提示“java heap space”。接下来确认是否内存泄漏,内存泄漏的话,根据泄漏对象的类型信息和GC Roots引用链的信息,获取泄漏...原创 2019-11-07 19:27:45 · 102 阅读 · 0 评论 -
Jvm运行区域——摘自《深入理解java虚拟机》(每天学一点Day20191106)
1.程序计数器:可看做当前线程所执行的字节码的行号指示器。(此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域)2.Java虚拟机栈:描述的是java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。2.1局部变量表存放了编译器可知的各种基本数据类型、对象引用和...原创 2019-11-06 19:34:00 · 94 阅读 · 0 评论 -
关于虚拟机对象——内容摘自《深入理解Java虚拟机》(每天学一点Day20191106)
1.对象的创建:1)当虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。2)在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定,为对象分配空间的任务等同于把一块确定大小的内存从Java堆中划分出来。3)关于堆中的内存:1》假设Java堆中内存...原创 2019-11-06 19:29:17 · 109 阅读 · 0 评论 -
JVM入门介绍(1)(每天学一点Day20190925)
1.程序计数器(Program Counter Register)定义:一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号原创 2019-09-26 09:40:12 · 68 阅读 · 0 评论