![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 80
向着五星的方向
阿里云专家博主,华为云云享专家,专注于Java全栈,大数据方向,欢迎大家三连,有事可以私聊!
展开
-
JVM之回收策略的详细解析
Concurrent Mode Failure:执行 CMS GC 的过程中同时有对象要放入老年代,而此时老年代空间不足(可能是 GC 过程中浮动垃圾过多导致暂时性的空间不足),便会报 Concurrent Mode Failure 错误,并触发 Full GC。在默认情况下,通过 System.gc() 或 Runtime.getRuntime().gc() 的调用,会显式触发 FullGC,同时对老年代和新生代进行回收,但是虚拟机不一定真正去执行,无法保证对垃圾收集器的调用。原创 2024-05-18 23:04:22 · 264 阅读 · 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 · 499 阅读 · 0 评论 -
JVM之内存分配的详细解析
已使用的内存和未使用的内存相互交错,虚拟机维护了一个列表,记录上哪些内存块是可用的,再分配的时候从列表中找到一块足够大的空间划分给对象实例,并更新列表上的内容。逃逸分析并不是直接的优化手段,而是一个代码分析方式,通过动态分析对象的作用域,为优化手段如栈上分配、标量替换和同步消除等提供依据,发生逃逸行为的情况有两种:方法逃逸和线程逃逸。User 对象的作用域局限在方法 fn 中,可以使用标量替换的优化手段在栈上分配对象的成员变量,这样就不会生成 User 对象,大大减轻 GC 的压力。原创 2024-05-06 21:43:30 · 1070 阅读 · 0 评论 -
JVM之本地内存以及元空间,直接内存的详细解析
虚拟机内存:Java 虚拟机在执行的时候会把管理的内存分配成不同的区域,受虚拟机内存大小的参数控制,当大小超过参数设置的大小时就会报 OOM又叫做堆外内存,线程共享的区域,本地内存这块区域是不会受到 JVM 的控制的,不会发生 GC;因此对于整个 Java 的执行效率是提升非常大,但是如果内存的占用超出物理内存的大小,同样也会报 OOM。原创 2024-04-18 23:46:54 · 528 阅读 · 0 评论 -
JVM之方法区的详细解析
2.运行时常量池(Java6之前常量池存放在方法区(永久代中),Java7中将常量池存放在了堆中,Java8之后将运行时常量池和静态常量池存放在元空间中,字符串常量池依然存放在堆中)1.8将这个字符串尝试放入串池,如果有则不会放入,如果没有则放入串池,会把串池中的对象返回(无论有没有都会返回),这个放入是创建一个引用,引用的地址就是这个对象的地址。常量池(编译器生成的字面量和符号引用)中的数据会在类加载的加载阶段放入运行时常量池。运行时常量池是方法区的一部分(一般所说的常量池实际上就是指运行时常量池)原创 2024-04-17 23:05:33 · 740 阅读 · 0 评论 -
JVM之本地方法栈和程序计数器和堆
在 Eden 区变满的时候,GC 就会将存活的对象移到空闲的 Survivor 区间中,根据 JVM 的策略,在经过几次垃圾回收后,仍然存活于 Survivor 的对象将被移动到 Tenured 区间。Tenured 区主要保存生命周期长的对象,一般是一些老的对象,当一些对象在 Young 复制转移一定的次数以后,对象就会被转移到 Tenured 区。分代原因:不同对象的生命周期不同,70%-99% 的对象都是临时对象,优化 GC 性能。jconsole:图形界面的,多功能的监测工具,可以连续监测。原创 2024-04-16 23:13:42 · 883 阅读 · 0 评论 -
JVM之JVM栈的详细解析
基于栈式架构的虚拟机使用的零地址指令更加紧凑,完成一项操作需要使用很多入栈和出栈指令,所以需要更多的指令分派(instruction dispatch)次数和内存读/写次数,由于操作数是存储在内存中的,因此频繁地执行内存读/写操作必然会影响执行速度,所以需要栈顶缓存技术。的,如果一个局部变量过了其作用域,那么之后申明的新的局部变量就可能会复用过期局部变量的槽位,从而达到节省资源的目的。操作数栈:在方法执行过程中,根据字节码指令,往栈中写入数据或提取数据,即入栈(push)或出栈(pop)原创 2024-04-15 23:33:15 · 1123 阅读 · 0 评论 -
JVM之JVM的基本介绍
JVM:全称 Java Virtual Machine,即 Java 虚拟机,一种规范,本身是一个虚拟计算机,直接和操作系统进行交互,与硬件不直接交互,而操作系统可以帮我们完成和硬件进行交互的工作特点:Java 虚拟机基于二进制字节码执行,由一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆、一个方法区等组成JVM 屏蔽了与操作系统平台相关的信息,从而能够让 Java 程序只需要生成能够在 JVM 上运行的字节码文件,通过该机制实现的跨平台性。原创 2024-04-13 22:50:45 · 942 阅读 · 0 评论