JVM

JVM

JVM的内部体系结构分为三部分,分别是:类装载器(ClassLoader)子系统,运行时数据区,和执行引擎。
JVM的两种类装载器包括:启动类装载器和用户自定义类装载器,启动类装载器是JVM实现的一部分,用户自定义类装载器则是Java程序的一部分,必须是ClassLoader类的子类。在这里插入图片描述

堆分年轻代和年老代、持久代,1.7之前有持久代,1.8取消了持久代,被元空间取代,元空间不在JVM,占用的本地内存,元空间可以防止OOM,内存溢出,存的new对象;年轻代和年老代比例1:2。
年轻代:分Eden区8M,From区1M,To区1M。在这里插入图片描述
年轻代10M,年老代20M,new一个8M对象会放到Eden区,在new一个8M对象,Eden区如果放了一个8M对象,然而FROM和TO只能放1M,那么就会放到年老代,通过N次GC就可以放到年老代。GC判断内存超过98%(一般90%),就会GC。新生代存的是从GC中存活下来的,from和to只会有一个进行使用。
方法区:可以放在持久代,GC很多操作没有对其进行回收,存储的是类信息,指针,引用,即时编译代码等。

虚拟机栈

虚拟机栈用来存储别人方法,本地方法栈存储自己的,虚拟机栈存储的是当前线程需要使用的方法。一个方法一个栈帧。
例如一个线程:
局部变量表:定义变量,常量。
通过操作数栈进行操作、进行参数传递或者算数运算,算好之后在传回去。
动态链接:把链接这个过程推迟到了运行时再进行。
返回地址:正常返回给调用方;异常返回错误信息,无论正常异常根据返回地址返回给调用方,异常处理器通知返回到哪里,异常返回恢复局部变量表,操作数栈。

程序计数器

保证程序能够按照顺序执行。

JVM内存回收

JVM内存回收总是在指堆内存回收,所以以上对象的年轻代和年老代都是指的JVM的Heap空间,而持久代则是之前提到的MethodArea,不属于Heap堆内存。

GC的基本原理:将内存中不再被使用的对象进行回收,GC中用于回收的方法称为收集器,由于GC需要消耗一些资源和时间,Java在对对象的生命周期特征进行分析后,按照新生代、旧生代的方式来对对象进行收集,以尽可能的缩短GC对应用造成的暂停。

四种引用:强软弱虚。
(1)强引用:默认对象采用的都是强引用,在这个对象实例没有其他对象引用时,GC才会被回收;
(2)软引用:软引用是Java中提供的一种比较适合于缓存场景的应用,在内存不够用时才会被GC回收;
(3)弱引用:在GC时一定会被GC回收;
(4)虚引用:用来判断对象是否被GC回收。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值