jvm运行时的内存的构成

1、内存组成部分

内存由栈区、堆区、方法区、程序计数器、本地方法栈

2、组成部分各自的特点

2.1 按照线程可否共享的分为:

可共享区域:方法区、堆区

不可共享区域:栈区、程序计数器、本地方法栈。

2.2 详细介绍各内存部分

2.2.3 程序计数器:概念,程序计数器通过记录一条条代码的顺序指令,并且在内存里面找到相应的数据,然后执行。

2.2.4栈区:栈区里面包含了一条条的方法栈帧,每一个方法栈帧里面包含了,一张局部变量表,和一张操作表。栈区的特点是栈里面的数据生命周期都很短,在生命周期结束之后,自动的放弃内存空间,主要存放:对象名,基本类型,方法参数,引用名(基本类型或者是方法参数),栈一般只要2M.

2.25 本地方法栈:栈区指的是java方法栈,而本地方法栈可能是c方法栈,可能是其他的,那么他们之间靠什么连接呢,那就是本地方法接口JIN.

2.2.6 方法区:方法区包括了class的二进制文件,包含了虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据。

2.2.7 堆内存区:是jvm运行时最大的内存块,包括了新生代和老年代,新生代又分为伊甸区,幸存区0和幸存区1;当jvm运行时,创建了大量的对象,当伊甸区存满了的时候,触发了GC,GC过来扫描,回收一些没用的对象,然后幸存了一些对象,也就是还在被引用的对象,那这个时候这些对象就被复制和被排序的拉进幸存区0,关键的是,这些对象在物理上是连续的,所以访问效率很高,此时幸存区0被标记为正在使用的幸存区。此时再创建了一些对象,然后又GC了一些对象,你会发现,此时的伊甸区有了空间碎片,我们需要去清理这些空间碎片,这时候内存管理把伊甸区幸存的对象和幸存区0号的对象,都一一复制到幸存区1号,然后自动排序,他们在物理空间上也是连续的,此时伊甸区和幸存区全部被清空。往复之后,我们发现,有很多对象一直没有被清理,这时,内存管理觉得这些对象会长时间被引用,于是把这些对象存放到老年代。

这些就是我今天对jvm内存的收获吧,希望继续加油!我会持续更新的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值