JVM
文章平均质量分 52
救救头发
记录个人学习笔记
展开
-
JVM参数设置
#常用的设置-Xms:初始堆大小,JVM 启动的时候,给定堆空间大小。-Xmx:最大堆大小,JVM 运行过程中,如果初始堆空间不足的时候,最大可以扩展到多少。-Xmn:设置堆中年轻代大小。整个堆大小=年轻代大小+年老代大小+持久代大小。-XX:NewSize=n 设置年轻代初始化大小大小-XX:MaxNewSize=n 设置年轻代最大值-XX:NewRatio=n 设置年轻代和年老代的比值。如: -XX:NewRatio=3,表示年轻代与年老代比值为 1:3,年轻代占整个年轻代+年老原创 2022-02-16 16:40:57 · 321 阅读 · 0 评论 -
垃圾收集器
原文地址:一篇文章掌握整个JVM,JVM超详细解析!!!_小杰爱吃蛋的博客-CSDN博客_jvm什么是垃圾收集器?垃圾收集器是垃圾回收算法(引用计数法、标记清楚法、标记整理法、复制算法)的具体实现,不同垃圾收集器、不同版本的JVM所提供的垃圾收集器可能会有很在差别。以JDK1.8为例:新生代收集器:Serial、ParNew、Parallel Scavenge 老年代收集器:CMS、Serial Old、Parallel Old 整堆收集器:G1...原创 2022-02-14 20:32:56 · 135 阅读 · 0 评论 -
垃圾回收算法
原文地址:一篇文章掌握整个JVM,JVM超详细解析!!!_小杰爱吃蛋的博客-CSDN博客_jvm1.引用计数算法每个对象在创建的时候,就给这个对象绑定一个计数器。每当有一个引用指向该对象时,计数器加一;每当有一个指向它的引用被删除时,计数器减一。这样,当没有引用指向该对象时,计数器为0就代表该对象死亡,这时就应该对这个对象进行垃圾回收操作。优点:引用计数算法的实现简单,判定效率也很高。缺点:很难解决对象之间相互循环引用的问题。2.标记–清除算法为每个对象存储一个标记位,记录.原创 2022-02-14 20:19:31 · 68 阅读 · 0 评论 -
垃圾回收机制
原文地址:一篇文章掌握整个JVM,JVM超详细解析!!!_小杰爱吃蛋的博客-CSDN博客_jvm1.在 Java 中,堆被划分成两个不同的区域:新生代 、老年代;主要原因是可以根据各个年代的特点进行对象分区存储,更便于回收,采用最适当的收集算法:新生代中,每次垃圾收集时都发现大批对象死去,只有少量对象存活,便采用了复制算法,只需要付出少量存活对象的复制成本就可以完成收集;而老年代中因为对象存活率高、没有额外空间对它进行分配担保,就必须采用“标记-清理”或者“标记-整理”算法。2.老年代就一个区.原创 2022-02-14 13:15:58 · 90 阅读 · 0 评论 -
如何判断对象是否存活
1.引用计数法什么是引用计数法:每个对象在创建的时候,就给这个对象绑定一个计数器。每当有一个引用指向该对象时,计数器加一;每当有一个指向它的引用被删除时,计数器减一。这样,当没有引用指向该对象时,计数器为0就代表该对象死亡优点:引用计数算法的实现简单,判定效率也很高缺点:很难解决对象之间相互循环引用的问题2 .可达性分析法该种方法是从GC Roots开始向下搜索,搜索所走过的路径为引用链。当一个对象到GC Roots没用任何引用链时,则证明此对象是不可用的,表示可以回收。原创 2022-02-14 09:36:54 · 182 阅读 · 0 评论 -
对象的访问定位
建立对象就是为了使用对象,我们的 Java 程序通过栈上的 reference 数据来操作堆上的具体对象。对象的访问方式由虚拟机实现而定,目前主流的访问方式有① 使用句柄和② 直接指针两种:1.句柄:如果使用句柄的话,那么 Java 堆中将会划分出一块内存来作为句柄池,reference 中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自的具体地址信息2.直接指针:如果使用直接指针访问,那么 Java 堆对象的布局中就必须考虑如何放置访问类型数据的相关信息,而 refere..原创 2022-02-14 09:36:08 · 304 阅读 · 0 评论 -
对象的内存布局
在 Hotspot 虚拟机中,对象在内存中的布局可以分为 3 块区域:对象头、实例数据和对齐填充。1.Hotspot 虚拟机的对象头包括两部分信息,第一部分用于存储对象自身的运行时数据(哈希码、GC 分代年龄、锁状态标志等等),另一部分是类型指针,即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。2.实例数据部分是对象真正存储的有效信息,也是在程序中所定义的各种类型的字段内容。3.对齐填充部分不是必然存在的,也没有什么特别的含义,仅仅起占位作用。 因为 Hotspot原创 2022-02-14 09:34:58 · 228 阅读 · 0 评论 -
内存分配方式
为新生对象分配内存时,采用哪种方式,取决于 Java 堆内存是否规整。而 Java 堆内存是否规整,取决于 GC 收集器的算法是"标记-清除",还是"标记-整理"。指针碰撞:1.适用:堆内存规整(没有内存碎片)的情况下2.原理:用过的内存全部整合到一边,没有用过的内存放在另一边,中间有一个分界值指针,只需要向着没用过的内存方向将该指针移动对象内存大小位置即可3.GC收集器:Serial、ParNew空闲列表:1.适用:堆内存不规整的情况下2.原理:虚拟机会维护一个列表。该列表中会原创 2022-02-14 09:34:19 · 114 阅读 · 0 评论 -
对象的创建过程
1:类加载检查虚拟机遇到一条 new 指令时,首先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载过、解析和初始化过。如果没有,那必须先执行相应的类加载过程。2:分配内存在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需的内存大小在类加载完成后便可确定,为对象分配空间的任务等同于把一块确定大小的内存从 Java 堆中划分出来。分配方式有 “指针碰撞” 和 “空闲列表” 两种,选择哪种分配方式由 Java 堆是否规整决定,而 Jav原创 2022-02-14 09:33:37 · 89 阅读 · 0 评论 -
JVM运行时数据区
运行时数据区:java运行时的东西是放在哪里的JDK 1.8 之前:JDK 1.8 :线程私有的:程序计数器 虚拟机栈 本地方法栈线程共享的:堆 方法区 直接内存 (非运行时数据区的一部分)方法区:方法区是所有线程共享的内存区域,它用于存储已被Java虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。 当方法区无法满足内存分配需求时,抛出OutOfMemoryError异常。堆:1.java堆是java虚拟机所管理的内存中最大的一块,是被所原创 2022-02-14 09:32:46 · 221 阅读 · 0 评论