![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 77
技术砖家--Felix
I'm felix li
展开
-
JVM的内存结构
JVM,堆,方法区,直接内存,程序技术器原创 2022-10-20 15:01:41 · 273 阅读 · 0 评论 -
JVM调参,看这一篇就够了
JVM相关参数调试通过实战的 方式来进行参数调试,观察结果才能真正理解含义,下面将通过一段代码,来一个一个参数的进行测试。代码示例后面的代码都是通过对下面这段代码进行参数调试来验证相关参数的意义。public class JConsoleTest { public byte[] bytes; private final static&n原创 2022-08-23 15:47:30 · 706 阅读 · 0 评论 -
JVM运行时内存
Java堆从GC的角度可以细分为:新生代(Eden区,From Survivor区和To Survivor区)和老年代。新生代Eden区Java新对象的出生地(如果新创建的对象占用内存很大,则直接分配到老年代)。当Eedn区内存不够的时候就会触发MinorGC,对新生代区进行一次垃圾回收。SurvivorFrom上一次GC的幸存者,座位这一次GC的被扫描者。SurvivorTo保留了一次MinorGC过程中的幸存者MinorGC的过程(复制->清空->互换)MinorGC采用原创 2021-12-29 19:38:26 · 149 阅读 · 2 评论 -
如果线上遇到了OOM,该如何解决?
为什么会 OOMOOM 全称 “Out Of Memory”,表示内存耗尽。当 JVM 因为没有足够的内存来为对象分配空间,并且垃圾回收器也已经没有空间可回收时,就会抛出这个错误为什么会出现 OOM,一般由这些问题引起分配过少:JVM 初始化内存小,业务使用了大量内存;或者不同 JVM 区域分配内存不合理代码漏洞:某一个对象被频繁申请,不用了之后却没有被释放,导致内存耗尽内存泄漏:申请使用完的内存没有释放,导致虚拟机不能再次使用该内存,此时这段内存就泄露了。因为申请者不用了,而又不能被虚拟机分转载 2021-12-27 15:06:14 · 308 阅读 · 1 评论 -
Stop-the-World(STW)
Stop-the-World,简称 STW,指的是 GC 事件/过程4发生过程当中停止所有的应用程序线程的执行。 这让我想起了我丈母娘对我喊 着: “我扫垃圾的时候你站在原地不要动”。垃圾回收器的任务是识别和回收垃圾对象进行内存清理。为了让垃圾回收器可以正常且高 效地执行,大部分情况下会要求系统进入一个停顿的状态。停顿的目的是终止所有应用程序的 执行,只有这样,系统中才不会有新的垃圾产生,同时停顿保证了系统状态在某一个瞬间的一 致性,也有益于垃圾回收器更好地标记垃圾对象。因此,在垃圾回收时,都会产生应用程原创 2021-07-20 15:36:16 · 628 阅读 · 0 评论 -
Full GC & Minor GC
Full GC & Minor GC新创建的对象都存放在年轻代。因为大多数对象很快变成引用不可达(死 亡〉,所以大多数对象在年轻代中创建,然后消失。当对象从这块内存区域消失时,我们说发 生了一次“MinorGC”,工作流程如图 所示,存活对象根据幸存区、老年代区间的实际大 小进行调整。存活下来的年轻代对象被复制到老年代。 老年代的内存区域一般大于年轻代。 因为它拥有更大的规模,为了提高系统整体性能,所以 GC 发生的次数比在年轻代的少。对象从老年代消 失时,我们说“M句orGC”或“Full原创 2021-07-20 11:54:30 · 95 阅读 · 0 评论 -
JVM老年代和年轻代
年轻代&老年代( Young Generation & Old Generation)年轻代:年轻代其实分为两部分,分别是1个Eden区和2个Survivor区(分别叫from和to),默认比例是8:1,一般情况下,新创建的对象都会被分配到Eden区,(除非一些特别大的对象会直接放到老年代),当Eden没有足够的空间的时候,就会触发jvm发起一次Minor GC,如果对象经过一次Minor GC还存活,并且又能被Survivor空间接受,那么将被移动到Survivor空间当中,对象在Survi原创 2021-07-19 15:51:17 · 912 阅读 · 0 评论 -
GC四种垃圾回收算法
引用计数(Reference Counting)算法引用计数算法在每个对象都维护着一个内存字段来统计它被多少”部分”使用—引用计数器,每当有一个新的引用指向该对象时,引用计数器就+1 ,每当指向该引用对象失效时该计数器就-1 ,当引用数量为0的时候,则说明对象没有被任何引用指向,可以认定是”垃圾”对象.由于只维护局部信息,所以不需要扫描全局对象图就可以识别并释放死对象;但也因为缺乏全局对象图信息,所以无法处理循环引用的状况。更高级的引用计数实现会引入“弱引用”的概念来打破某些已知的循环引用,但那原创 2021-07-19 15:48:33 · 838 阅读 · 0 评论 -
Java 的强引用、弱引用、软引用、虚引用
Java四种引用转载 2021-07-14 11:18:03 · 55 阅读 · 0 评论 -
GC对四种引用的区别(强,软,弱,虚)
强引用( Strong Reference }:在一个线程内,无需引用直接可以使用的对象,除非引 用不存在了,否则强引用不会被 GC 清理。我们平时声明变量使用的就是强引用,普通 系统 99%以上都是强引用,比如, Strings =”Hello World”。软引用( Soft Reference l : JVM 抛出 OOM 之前, GC 清理所有的软引用对象。垃圾 回收器在某个时刻决定回收软可达的对象的时候,会清理软引用,并可选地把引用存放 到一个引用队列(Reference Queue) , 类.原创 2021-07-14 10:55:49 · 3164 阅读 · 1 评论 -
JRE和JDK的区别
定义JRE(Java Runtime Enviroment)是Java的运行环境。面向Java程序的使用者,而不是开发者。如果你仅下载并安装了JRE,那么你的系统只能运行Java程序。JRE是运行Java程序所必须环境的集合,包含JVM标准实现及 Java核心类库。它包括Java虚拟机、Java平台核心类和支持文件。它不包含开发工具(编译器、调试器等)。JDK(Java Development Kit)又称J2SDK(Java2 Software Development Kit),是Java开发工具.转载 2021-04-23 17:04:46 · 108 阅读 · 0 评论 -
内存溢出和内存泄漏的区别、产生原因以及解决方案
内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。memory leak会最终会导致out of memory!内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。内转载 2021-04-22 09:57:49 · 160 阅读 · 2 评论 -
JVM原理分析
JVM原理jvm虚拟机有Classic VM:JDK1 与 JDK2 的官方默认虚拟机,世界第一种 java 虚拟机。通过纯解释器执行 Java 代码,即时编译器只能通过外挂的形式存在,并且不能与解释器一起运行。(那个时候的 Java 很慢)Exact VM:Sun 公司为了解决 Classic VM 的效率问题而计划研发的,但只在 Solaris 系统上发布过,后来就被 HotSpot 取代了因其使用准确式内存管理而闻名。(知道内存中某一块区域存放的是哪一种数据结构,有利于垃圾收集)HotS原创 2021-04-02 14:42:28 · 140 阅读 · 1 评论 -
最详细的Java内存区域划分及总结
程序计数器程序计数器的功能类似于计算机组成原理中的PC寄存器,用于存放下一条指令所在单元的地址。当执行一条指令时,首先需要根据PC中存放的指令地址,将指令由内存取到指令寄存器中,此过程称为“取指令”。与此同时,PC中的地址或自动加1或由转移指针给出下一条指令的地址。此后经过分析指令,执行指令。完成第一条指令的执行,而后根据PC取出第二条指令的地址,如此循环,执行每一条指令。虽然JVM的程序计数器...原创 2019-11-14 15:19:14 · 421 阅读 · 0 评论