JVM后篇

内存区域储存一些什么:

方法区:

存放方法,主要是指令数据,以字节码为代表的指令数据,也会有部分附属的方法基本信息(扩展来说,就是存放类信息)。

逻辑上,类的相关数据会存放在方法区

逻辑上,方法会存放在方法区

逻辑上,静态属性会存放在方法区

堆:

堆砌对象的地方,以对象为单位进行管理

属性空间随着对象走,所以逻辑上,属性是保存在堆中

栈:

以栈帧为基本单位

逻辑上,临时变量(局部变量)就是保存在栈区

随着方法本次执行出现,本次执行结束消亡

PC寄存器:

存储下一条要执行的指令位置

程序计数器:

变量的形态决定了,变量的保存位置(变量的属性不行)

变量的三大形态:

1、局部变量:

①普通的局部变量

②方法中的形参

③try-with-resource

④catch(...)

2、属性(类中的,没有static)

3、静态属性(类中的,有static)

执行引擎:

类加载器<->内存空间<->执行引擎

执行引擎:就是对CPU模拟,所以CPU怎么工作的,这个执行引擎就怎么工作

1、读取CPU中保存的值(一般是地址)

2、根据CPU中的值,去内存中(方法区),读取一条指令

3、执行具体的字节码

4、默认情况下PC值会加1(语句自动执行下一条)但有些字节码会修改PC的值(if,else...)

GC:垃圾回收

有了GC之后,相对的解放了开发人员的心智,让开发人员只需要考虑什么时候需要一块内存,不需要考虑什么内存不再需要

从权力和义务的角度来讲,逻辑上把内存的使用权和所有权分离出来,我们只享受一段内存的使用权,没有所有权

好处:不需要考虑内存释放的问题

坏处:内存的直接彻底与我们无缘了 

GC:堆内存管理

堆上的内存是以对象为基本单位进行管理

GC:垃圾对象的回收问题

如何判断是否是垃圾对象:

一、引用计数法:

这种有循环引用:

 

 为了避免这个问题又有了一个可达性分析法: 

这时我们已经找到了,垃圾对象了,就开始进行垃圾回收:

GC相当于房东,有很多房间,分配内存(把房子租出去),回收内存(把房子收回来)

回收:只是改变状态(把房子从出租中变为空闲)

整理内存:

 由于整理过程,是GC变得复杂,耗时变得无法接受,需要进行设计,来对GC性能进行优化

 现代JVM由于GC问题,把堆空间再次分区域进行归纳和管理----分代

   因为是4bit来记录年龄,即16

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值