jvm
文章平均质量分 93
wangshiwen011
这个作者很懒,什么都没留下…
展开
-
“Stop the World”简单分析
1.引言有一个问题,GC的时候还能创建新的对象吗?假设允许GC期间,还可以继续让系统在年轻代的Eden区里创建新的对象,会是什么样的场景?根据上图所示,如果垃圾回收器一边想办法将Eden和Survivor2区里的存活对象标记出来转移到Survivor1区,然后还在想办法把Eden和Survivor2区里的垃圾对象清理掉,结果这个时候系统程序还在不停地在Eden里创建新的对象。这些新的对象有的很快成为了垃圾对象,有点是还有人引用的存活对象,怎么办?其实在垃圾回收过程中,同时还允许.原创 2020-07-20 23:37:28 · 378 阅读 · 0 评论 -
JVM中年轻代里的对象什么情况下进入老年代?以及老年代垃圾回收算法-标记整理算法
1.躲过15次GC之后进入老年代系统刚启动时,创建的各种各样的对象,都是分配在年轻代里。随着慢慢系统跑着跑着,年轻代满了,就会出发MinorGC ,可能1%的少量存活对像转移到空着的Survivor区中然后系统继续运行,继续在Eden区里分配对象.............类似静态变量等引用的对象,可能存活时间会久一些,无论年轻代中怎么垃圾回收,类似这种对象都不会被回收掉。而此对象每次在年轻代里躲过一次MinorGC被转移到一块Survivor区域中,他的年龄就会增加一岁默认的..原创 2020-07-20 22:24:17 · 5105 阅读 · 0 评论 -
JVM年轻代的垃圾回收算法-复制算法
1.背景引入针对年轻代的垃圾回收算法,叫做复制算法如下图,首先吧年轻代的内存分为两块:假设有如下代码,在“loadReplicasFromDisk()”方法中创建了对象,此时对象会分配在年轻代其中一块内存空间里而且是由“main线程”的栈内存中的“loadREplicasFromDisk()”方法的栈帧内的局部变量来引用的public class Kafka { public static void main(String[] args) { loadRep原创 2020-07-20 10:40:25 · 2099 阅读 · 0 评论 -
JVM内存中什么情况下一个对象会被垃圾回收
一旦年轻代快满了,那么垃圾回收的时候,到底哪些对象是能回收的,哪些对象是不能回收的呢?1.被哪些变量引用的对象是不能回收的?JVM中使用了一种可达性分析算法来判定哪些对象是可以被回收的,哪些对象是不可以被回收的这个算法的意思,就是说对每个对象,都分析一下有谁在引用他,然后一层一层往上去判断,看是否有一个GCRoots。在JVM规范中,局部变量就是可以作为GCRoots的只要一个对象被局部变量引用了,那么就说明他有一个GCRoots,此时就不能被回收了在JVM...原创 2020-07-20 09:35:21 · 628 阅读 · 0 评论 -
JVM内存相关的核心参数
-Xms:Java堆内存的大小-Xmx:Java堆内存的最大大小-Xmn:Java堆内存中的年轻代大小,扣除年轻代剩下的就是老年代的内存大小-XX:MetaspaceSize:永久代大小-XX:MaxMetaspaceSize:永久代最大大小-Xss:每个线程的栈内存大小JDK1.8之后,-XX:PermSize和-XX:MaxPermSize被替换为了-XX:MetaspaceSize和-XX:MaxMetaspaceSize;...原创 2020-07-20 00:07:17 · 207 阅读 · 0 评论 -
JVM年轻代和老年代中对象的分配与流动
平时代码创建出来的对象,一般分为两种: 一种是短期存活的,分配在Java堆内存之后,迅速使用完就会被垃圾回收,会分配到年轻代里。 另一种是长期存活的,需要一直生存在Java堆内存里,让程序后续不停地去使用,会分配到老年代里。一、对象什么时候进入年轻代?什么时候进入老年代?(1)大部分正常对象都优先在年轻代分配内存public class Kafka { private static ReplicaFetcher fetcher = new Repli...原创 2020-07-19 23:42:55 · 403 阅读 · 0 评论 -
(入门)JVM分代模型:年轻代、老年代、永久代
一、堆内存的年轻代和老年代我们在代码中创建的对象,都会进入到Java堆内存中;而根据写代码的方式不同,采用不同的方式来创建和使用对象,其对象的生命周期是不同的。所以JVM将Java堆内存划分了两个区域,分别是年轻代和老年代。年轻代,顾名思义,就是把创建和使用完之后立马就要回收的对象放在里面;老年代,就是创建之后需要一直长期存在的对象放在里面。比如下面的代码:public class Kafka { private static ReplicaFetcher fet原创 2020-07-19 23:00:41 · 502 阅读 · 0 评论 -
JVM的类加载机制
一、首先看一个简单的JVM整体运行原理简单说,首先是".java"代码文件编译成".class"字节码文件,然后类加载器把".class"字节码文件中的类加载到JVM中,接着JVM来执行这些类的代码。二、类加载过程类加载到使用,经历以下过程加载->验证->准备->解析->初始化->使用->卸载(1)JVM会在什么情况下去加载一个类?当代码中用到这个类的时候。例如有一个类(DemoMain.class),里面有一个main方法作为主入口一旦J原创 2020-07-18 21:12:50 · 174 阅读 · 0 评论