![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java虚拟机
文章平均质量分 51
程序员铁蛋
这个作者很懒,什么都没留下…
展开
-
Java堆中的年轻代为什么要设置Survivor区?为什么还要设置两个Survivor区?
1 年轻代只设置一个Eden区行不行?如果只设置一个Eden区,那么没进行一次MinorGC,存活的对象就会被送入老年代,老年代很快被填满,就会触发MajorGC,因为MajorGC之前会先进行一次MinorGC,所以也可以看做是发生了Full GC,Full GC消耗的时间要远远大于Minor GC,这样会增加系统停顿时间。那么,你们也许会想,可以增加老年代的空间,减少Full GC的频率,可以是频率虽然降低了,但是由于老年代存储的对象太多,一旦发生Full GC,单次GC的时间增加了,系统停顿时间依然原创 2021-03-06 23:54:27 · 921 阅读 · 2 评论 -
JVM垃圾收集器
介绍JVM堆内存主要分为新生代和老年代,其中新生代占用1/3堆空间,老年代占用2/3堆空间,其中新生代又细分为Eden区、Survivor区、SurvivorFrom区,分别是8:1:1。JVM针对新生代和老年代分别提供了不同的垃圾收集器。针对新生代的垃圾收集器有:Serial、ParNew、Parallel Scavenge;针对老年代的垃圾收集器有:Serial Old、Parallel Old、CMS;还有不分新生代和老年代的垃圾收集器G1,G1垃圾收集器是针对不同区域的G1分区收集算法。新生代原创 2021-02-08 16:45:40 · 96 阅读 · 0 评论 -
Java中常用的垃圾回收算法
如何确定垃圾Java中采用可达性分析算法来确定对象是否应该被回收,可达性分析算法通过一系列的GC Roots的点作为起点向下搜索,GC Roots主要包括栈中的引用(当前正在调用的方法中局部变量的引用)、方法区中静态变量和常量的引用、本地方法栈中的引用。当一个对象到任意GC Roots都没有引用链的时候证明该对象可以回收。标记-清除算法(内存碎片多)标记-清除法首先会标记可回收的对象,在清理完对象后,并没有重新整理可用的内存空间,如果内存中回收的小对象比较多,会引起内存碎片化的问题,后期大对象则无法获原创 2021-02-08 13:33:40 · 170 阅读 · 0 评论 -
JVM堆
Java中常用的垃圾回收算法有复制法、标记-清除法、标记-整理法、分代收集算法。复制算法标记-清除算法标记-整理算法分代收集算法原创 2021-02-08 11:14:31 · 67 阅读 · 0 评论 -
类加载器和双亲委派模型
类加载器JVM提供了三种类加载器:启动类加载器、扩展类加载器、应用程序类加载器。他们所加载的内容如下:启动类加载器:加载JAVA_HOME/lib下面的jar;扩展类加载器:加载JAVA_HOME/lib/ext下面的jar;应用程序类加载器:加载用户路径下的jar,比如我们自己写的代码,会加载classpath路径下的类;除了上述三种方式,我们可以继承ClassLoad类来自定义自己的类加载器。双亲委派模型双亲委派模型:当一个类加载器收到类加载请求的时候,不会自己去加载这个类,而是向上请原创 2021-02-07 15:35:57 · 106 阅读 · 1 评论 -
new一个对象的过程
如上图所示,在JVM创建一个对象的时候,首先判断当前类是否已经加载,如果类没有加载,需要先执行类加载机制,当加载完成后再为对象分配空间、初始化等等。类加载过程如下:加载:读取某个类的class文件到方法区内,并在堆中为这个类创建对应的Class对象,在加载时候可以通过类文件、jar、war包的形式读取;验证:验证class文件是否符合当前虚拟机的规范;准备:为类的静态变量(无final修饰)和常量(final修饰)赋默认初始值,放入到方法区中,值得注意的是,常量直接赋予初始值,设置为多少就赋予多.原创 2021-02-07 15:00:14 · 2803 阅读 · 0 评论 -
JVM的内存结构
JVM主要包含几个区域:堆:堆是JVM中线程共享的内存区域,堆上存储对象、数组、变量等信息。堆中细分为年轻代和老年代,其中年轻代又细分为Eden、SurvivorTo、SurvivorFrom等3个部分,默认比例是8:1:1。虚拟机栈:虚拟机栈是线程私有区域,每个方法执行的时候都会在栈中创建一个栈帧,方法的调用过程就对应了入栈和出栈的过程。每个栈帧包含局部变量表、操作数栈、动态链接、方法返回地址。局部变量表用于存储方法参数和局部变量,是一个数组结构;操作数栈用于保存计算过程中的中间结果,存储一些原创 2021-02-07 14:23:08 · 55 阅读 · 0 评论 -
什么是GC Root
1 GC ROOT的定义我们知道,JVM中判断一个对象是否标记为可回收的对象是根据可达性分析算法,顾名思义,可达性分析需要知道当前对象(是否需要回收的对象)的起点,而这个起点对象在当前时刻一定是存活的,才能保证对当前对象是否需要回收的判断是正确的,所以GC Root表示:当前时刻存活的对象。2 GC ROOT对象都有哪些?先说概念:当前正在被调用的方法里局部变量引用的对象,即虚拟机栈的局部变量表中引用的对象;方法区中静态变量引用的对象;方法区中常量引用的对象;本地方法栈中Native方法引用原创 2021-02-07 11:44:43 · 5892 阅读 · 1 评论