JVM基础

什么是JVM:

       JVM是一种规范或者说是一种理念。现在主要有三种JVM。
       Sun公司的HotSpot(我们常说的JVM)
       BEA公司的JRockit
       IBM公司的J9vm

虚拟机内存结构图:

虚拟机内存图

堆区:

jdk1.7版本及之前的版本堆区内存图:
在这里插入图片描述
注:当我们创建对象时候是在堆内存的新生代内存区中的伊甸园区进行创建的对象。策划

程序运行过程中内存分配图:

在这里插入图片描述

官方文档精华描述图:

在这里插入图片描述
注:jdk1.6版本之前常量池放在方法区
       jdk1.7版本常量池放到了堆内存中
       jdk1.8版本常量池放到了元空间中

jdk1.8:

       jdk1.8将最初的永久代取消了,由元空间进行替代。
       目的是为了将HotSpot与JRockit两个虚拟机为标准

jdk1.8 堆内存图:

在这里插入图片描述

GC是什么:

       频繁收集       Young区:复制算法(Copying)
       较少收集       Old区
       基本不动       Perm区

什么是复制算法:

在这里插入图片描述
在这里插入图片描述

简单的语言描述复制算法的原理:

       当对象在Eden区和from区(from区就是新生代的两个小的区域,不一定是哪一个)不停创建后,当这两片内存空间占用达到90%的时候进行一个Minor GC,如果对象还能够存活,并且还能被另一块空间所容纳(也就是to区域),则使用复制算法将这些依然存活的对象复制到另一块区域中即to区。这时候之前的Eden区域和from区域已经是空的了,这时候当创建对象的时候把刚刚清理掉的from区当作to区,把to区当作from区继续进行 Minor GC。

复制算法的补充:

       如果说对象存活率达到了高于百分之十那么就会像老年代借用一块内存作为分配担保。

标记-清除算法:

       如同他的名字一样,算法分为“标记”和“清除”两个阶段:首先标记出所有的需要回收的对象,在标记完成后统一进行回收。
       主要有两点不足:
                                   一个是效率问题
                                   一个是空间问题,会产生大量的内存碎片。

标记清楚算法示意图:

在这里插入图片描述

标记-整理算法:

       标记整理算法主要是发生在老年代,标记过程仍然是与“标记-清除”一样,但是后续步骤不是直接对可回收对象进行清理,而是让所有的存活对象都向一方移动,然后直接清除掉边界以外的内存。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值