JVM架构-运行时数据区

7 篇文章 0 订阅

在这里插入图片描述
一个class文件–》Class Loader(类加载器)–》Runtime Data Area(运行时数据区)–》Execution Engine(执行引擎)或Native Interface(本地方法接口)–》本地依赖库

Class Loader:依据特定格式,加载class文件到内存(详细信息可查看,类加载相关信息)
Execution Engine:对命令进行解析
Native Interface:融合不同开发语言的原生库为Java所用
Runtime Data Area:java内存空间的结构模型

=============================================================

Runtime Data Area

在这里插入图片描述

  • 运行时数据区
    • 线程私有
      1. 程序计数器(PC Register)
      2. 本地方法栈(Native Method tack)
      3. 虚拟机栈(VM Stack)
    • 线程共享
      1. 堆(Heap):GC主要区域
      2. 方法区(Method Area)

堆区:
这里面 Head(堆区) 的结构我们需要单独抽取来讲一下,因为这一块是jvm内存最大的一块,也是GC的主要地方
在这里插入图片描述
如上图:主要分为两大块,堆区和非堆区。
非堆区:我们也叫Metaspace(元数据区),jdk1.8之前是没有Metaspace的,是一个叫永久代的区域。
堆区:分为年轻代老年代,年轻代又分为Eden区Survivo区

  1. 一个新的对象是在Eden区产生,在Eden区满了,会进行Minor GC后,如果对象还未死亡(还有被引用),那么会进入Survivo区。
  2. 在Survivo区的对象,如果在进行Minor GC时候一直未死亡,会在两个Survivo区来回拷贝。
  3. 每经历过一次Minor GC对象年龄会+1,当年龄达到15岁(默认的,可以修改),该对象就会进入老年代。
  4. 老年代的死亡对象,会在Full GC时候回收

Minor GC是很频繁的,Full GC正常情况下不会很平繁执行。理想情况,保证Full GC执行次数尽可能少,每次执行时间尽可能短。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值