
JVM
文章平均质量分 83
向着五星的方向
阿里云专家博主,华为云云享专家,专注于Java全栈,大数据方向,欢迎大家三连,有事可以私聊!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JVM之内存泄漏的详细解析
通过 readFromNet 方法把接收消息保存在 msg 中,然后调用 saveDB 方法把内容保存到数据库中,此时 msg 已经可以被回收,但是 msg 的生命周期与对象的生命周期相同,造成 msg 不能回收,产生内存泄漏。内部类持有外部类的情况,如果一个外部类的实例对象调用方法返回了一个内部类的实例对象,即使那个外部类实例对象不再被使用,但由于内部类持有外部类的实例对象,这个外部类对象也不会被回收,造成内存泄漏。,尽管短生命周期的对象不再使用,但是因为长生命周期对象持有它的引用而导致不能被回收。原创 2025-01-16 20:02:00 · 1047 阅读 · 0 评论 -
JVM之垃圾回收器ZGC概述以及垃圾回收器总结的详细解析
Serial GC、Parallel GC、Concurrent Mark Sweep GC 这三个 GC 不同:最小化地使用内存和并行开销,选 Serial GC最大化应用程序的吞吐量,选 Parallel GC最小化 GC 的中断或停顿时间,选 CMS GC。原创 2025-01-14 21:16:03 · 914 阅读 · 0 评论 -
JVM之垃圾回收器G1概述的详细解析
卡表(Card Table)在老年代中,是一种对记忆集的具体实现,主要定义了记忆集的记录精度、与堆内存的映射关系等,卡表中的每一个元素都对应着一块特定大小的内存块,这个内存块称之为卡页(card page),当存在跨代引用时,会将卡页标记为 dirty,JVM 对于卡页的维护也是通过写屏障的方式。:当很多对象晋升到老年代时,为了避免堆内存被耗尽,虚拟机会触发一个混合的垃圾收集器,即 Mixed GC,除了回收整个 young region,还会回收一部分的 old region,过程同 YGC。原创 2025-01-13 19:49:05 · 1668 阅读 · 0 评论 -
JVM之垃圾回收器CMS概述(续)的详细解析
重新标记:修正并发标记期间因用户程序继续运作而导致标记产生变动的那一部分对象,比初始标记时间长但远比并发标记时间短,需要 STW(不停顿就会一直变化,采用写屏障 + 增量更新来避免漏标情况):用于指定在执行完 Full GC 后对内存空间进行压缩整理,以此避免内存碎片的产生,由于内存压缩整理过程无法并发执行,所带来的问题就是停顿时间变得更长。并发标记:进行 GC Roots 开始遍历整个对象图,在整个回收过程中耗时最长,不需要 STW,可以与用户线程并发运行。,所以这个阶段可以与用户线程同时并发的。原创 2025-01-12 18:45:15 · 554 阅读 · 0 评论 -
JVM之垃圾回收器概述(续)的详细解析
在这种模式下,年轻代的大小、Eden 和 Survivor 的比例、晋升老年代的对象年龄等参数会被自动调整,虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或者最大的吞吐量。在注重吞吐量及 CPU 资源敏感的场合,都可以优先考虑 Parallel Scavenge + Parallel Old 收集器,在 Server 模式下的内存回收性能很好,对于老年代,回收次数少,使用串行方式节省资源(CPU 并行需要切换线程,串行可以省去切换线程的资源)原创 2025-01-11 18:48:17 · 1199 阅读 · 0 评论 -
JVM之垃圾回收器概述的详细解析
垃圾收集器分类:按线程数分(垃圾回收线程数),可以分为串行垃圾回收器和并行垃圾回收器除了 CMS 和 G1 之外,其它垃圾收集器都是以串行的方式执行按照工作模式分,可以分为并发式垃圾回收器和独占式垃圾回收器并发式垃圾回收器与应用程序线程交替工作,以尽可能减少应用程序的停顿时间独占式垃圾回收器(Stop the world)一旦运行,就停止应用程序中的所有用户线程,直到垃圾回收过程完全结束按碎片处理方式分,可分为压缩式垃圾回收器和非压缩式垃圾回收器。原创 2025-01-02 21:34:29 · 961 阅读 · 0 评论 -
JVM之回收算法的详细解析
如果找到的块大于 size,会将块分割成大小为 size 与 block - size 的两部分,返回大小为 size 的分块,并把大小为 block - size 的块返回给空闲列表。标记阶段和标记清除算法一样,也是从根节点开始,对对象的引用进行标记,在清理阶段,并不是简单的直接清理可回收对象,而是。,在垃圾回收时,将正在使用的对象复制到另一个内存空间中,然后将该内存空间清理,交换两个内存的角色,完成垃圾的回收。会产生大量不连续的内存碎片,导致无法给大对象分配内存,需要维护一个空闲链表。原创 2024-10-08 20:45:58 · 541 阅读 · 0 评论 -
JVM之回收策略的详细解析
Concurrent Mode Failure:执行 CMS GC 的过程中同时有对象要放入老年代,而此时老年代空间不足(可能是 GC 过程中浮动垃圾过多导致暂时性的空间不足),便会报 Concurrent Mode Failure 错误,并触发 Full GC。在默认情况下,通过 System.gc() 或 Runtime.getRuntime().gc() 的调用,会显式触发 FullGC,同时对老年代和新生代进行回收,但是虚拟机不一定真正去执行,无法保证对垃圾收集器的调用。原创 2024-05-18 23:04:22 · 415 阅读 · 0 评论 -
JVM之分代思想的详细解析
Java8 时,堆被分为了两份:新生代和老年代(1:2),在 Java7 时,还存在一个永久代新生代使用:复制算法老年代使用:标记 - 清除 或者 标记 - 整理 算法Minor GC 和 Full GCMinor GC:回收新生代,新生代对象存活时间很短,所以 Minor GC 会频繁执行,执行的速度比较快Full GC:回收老年代和新生代,老年代对象其存活时间长,所以 Full GC 很少执行,执行速度会比 Minor GC 慢很多Eden 和 Survivor 大小比例默认为 8:1:1。原创 2024-05-17 08:38:06 · 613 阅读 · 0 评论 -
JVM之内存分配的详细解析
已使用的内存和未使用的内存相互交错,虚拟机维护了一个列表,记录上哪些内存块是可用的,再分配的时候从列表中找到一块足够大的空间划分给对象实例,并更新列表上的内容。逃逸分析并不是直接的优化手段,而是一个代码分析方式,通过动态分析对象的作用域,为优化手段如栈上分配、标量替换和同步消除等提供依据,发生逃逸行为的情况有两种:方法逃逸和线程逃逸。User 对象的作用域局限在方法 fn 中,可以使用标量替换的优化手段在栈上分配对象的成员变量,这样就不会生成 User 对象,大大减轻 GC 的压力。原创 2024-05-06 21:43:30 · 1244 阅读 · 0 评论 -
JVM之本地内存以及元空间,直接内存的详细解析
虚拟机内存:Java 虚拟机在执行的时候会把管理的内存分配成不同的区域,受虚拟机内存大小的参数控制,当大小超过参数设置的大小时就会报 OOM又叫做堆外内存,线程共享的区域,本地内存这块区域是不会受到 JVM 的控制的,不会发生 GC;因此对于整个 Java 的执行效率是提升非常大,但是如果内存的占用超出物理内存的大小,同样也会报 OOM。原创 2024-04-18 23:46:54 · 889 阅读 · 0 评论 -
JVM之方法区的详细解析
2.运行时常量池(Java6之前常量池存放在方法区(永久代中),Java7中将常量池存放在了堆中,Java8之后将运行时常量池和静态常量池存放在元空间中,字符串常量池依然存放在堆中)1.8将这个字符串尝试放入串池,如果有则不会放入,如果没有则放入串池,会把串池中的对象返回(无论有没有都会返回),这个放入是创建一个引用,引用的地址就是这个对象的地址。常量池(编译器生成的字面量和符号引用)中的数据会在类加载的加载阶段放入运行时常量池。运行时常量池是方法区的一部分(一般所说的常量池实际上就是指运行时常量池)原创 2024-04-17 23:05:33 · 815 阅读 · 0 评论 -
JVM之本地方法栈和程序计数器和堆
在 Eden 区变满的时候,GC 就会将存活的对象移到空闲的 Survivor 区间中,根据 JVM 的策略,在经过几次垃圾回收后,仍然存活于 Survivor 的对象将被移动到 Tenured 区间。Tenured 区主要保存生命周期长的对象,一般是一些老的对象,当一些对象在 Young 复制转移一定的次数以后,对象就会被转移到 Tenured 区。分代原因:不同对象的生命周期不同,70%-99% 的对象都是临时对象,优化 GC 性能。jconsole:图形界面的,多功能的监测工具,可以连续监测。原创 2024-04-16 23:13:42 · 975 阅读 · 0 评论 -
JVM之JVM栈的详细解析
基于栈式架构的虚拟机使用的零地址指令更加紧凑,完成一项操作需要使用很多入栈和出栈指令,所以需要更多的指令分派(instruction dispatch)次数和内存读/写次数,由于操作数是存储在内存中的,因此频繁地执行内存读/写操作必然会影响执行速度,所以需要栈顶缓存技术。的,如果一个局部变量过了其作用域,那么之后申明的新的局部变量就可能会复用过期局部变量的槽位,从而达到节省资源的目的。操作数栈:在方法执行过程中,根据字节码指令,往栈中写入数据或提取数据,即入栈(push)或出栈(pop)原创 2024-04-15 23:33:15 · 1213 阅读 · 0 评论 -
JVM之JVM的基本介绍
JVM:全称 Java Virtual Machine,即 Java 虚拟机,一种规范,本身是一个虚拟计算机,直接和操作系统进行交互,与硬件不直接交互,而操作系统可以帮我们完成和硬件进行交互的工作特点:Java 虚拟机基于二进制字节码执行,由一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆、一个方法区等组成JVM 屏蔽了与操作系统平台相关的信息,从而能够让 Java 程序只需要生成能够在 JVM 上运行的字节码文件,通过该机制实现的跨平台性。原创 2024-04-13 22:50:45 · 1018 阅读 · 0 评论