软件构造中的GC+JVM

1.内存管理模型
①以对象的方式管理内存,每个对象占据内存中连续的一段,分配在堆中。对象引用可以指向堆中的其他对象。非基本数据类型的对象等价于数据引用。

②基于栈和堆的内存管理都是动态分配,即在运行时动态分配内存,建立新的内存对象。而静态内存分配在编译阶段就已经确定好了内存分配。

③每个线程都有其线程栈,各自管理,彼此之间不可见。多线程之间传递数据,通过复制而非引用。栈无法支持复杂的数据类型。所有的局部的基本数据类型都在栈上创建。

④本地方法栈、PC

⑤Method Area(hotspot中称为perm,是堆的一部分,后改名metaspace)储存类信息、常量、静态变量。

总结各个变量、引用的存储位置:
栈:方法中基本类型变量及其值,方法中引用类型变量的引用

堆:方法中引用类型变量的实体对象,类的非静态成员变量(包括基本类型变量,引用类型变量)

方法区(也可以说是堆中):已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据

2.GC中的基本概念
①根对象:判断可达性的起点,主要包括寄存器、静态区域数据、栈中数据所指的对象

②可达对象(活对象):从root可达的对象
③不可达对象(死对象):从root不可达的对象
④幽灵时间:对象从不可达到被回收的时间
3.四种GC策略
①引用计数:

为每个对象储存一个计数器,当有其他引用指向他的时候计数器+1,当其他引用与其断开连接时计数器-1,当计数器为0时回收。

优点:幽灵时间短

缺点:不全面容易漏、对并发支持弱、占用额外内存空间较大。

②标记-清除:

分为标记、清除两个阶段。标记阶段就是标注对象的活性(每个对象有一个标记位)。清除阶段就是清除被标记为死亡的对象。

优点:便于理解、操作时间短、与mutator松耦合、不移动对象。

缺点:需要停止程序以进行mark和sweep,导致幽灵时间过长,影响了程序本身的性能;造成了内存碎片化。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值