第八章:面向性能的软件构造

构造性能的度量,原则与方法

1.内存管理模式:堆 栈

操作系统的内存映射已经在深入理解计算机系统这门课中学习过了。

内存对象模型

每个对象存储在内存的一段连续空间之中。

对象在堆中分配内存,对象引用指向对象指向对象在堆中的起始地址,非基本数据类型的变量等价于对象引用。一个引用指向一个其他对象,一个对象可以被多个引用指向。

对象管理的模式

三种:静态,基于堆,基于栈

静态内存分配:在编译阶段就已经确定分配的内存

基于栈的和基于堆的都是动态内存分配:运行时分配内存,建立新的内存对象。

static mode

将程序load进内存的时候或开始执行的时候,确定所有对象的分配,不支持递归,不支持动态创建可边长的复杂数据类型。

stack-based mode

栈存储方法调用及方法执行过程中的内部数据,新进后出,无法支持复杂的数据类型。

heap-based mode

堆:将内存分为多个小块,每块包含一个对象或者未被占用。自由的内存管理模式,可管理复杂的动态数据结构。

Java内存管理模型

主要问题:如何在堆上创建新对象,当对象不再有引用指向时,如何删除对象,释放内存

(1)Stack:

每个线程之间都有自己的栈,各线程之间彼此不可见,多线程之间传递数据,是通过复制而非引用

所有的基本数据类型都在栈上创建

(2)Heap:

所有的对象都在堆上创建,局部变量的对象也是在堆上创建。

堆上创建的对象可以被所有线程共享引用,如果两个线程同时调用同一个对象的某个方法,他们分别保留这个方法的局部拷贝。


GC

三种模式下的内存回收:

(1)static:无需内存回收,所有的都是已经确定的

  (2)stack:按照block整体进行

(3)heap:较复杂

内存回收:

(1)对象的活性:

对象之间的引用关系构成了有向图,从root可以到达的对象成为活对象,不可达的对象为死对象

(2)垃圾回收

垃圾回收器根据对象活性判断是否需要回收,死对象需要被回收。

非自动垃圾回收

全靠程序员手动回收垃圾,主要有一下方法

1.防御式编程:复制对象而非引用,在局部回收内存

2.配对原则:有new操作就有对应的delete()操作


GC的四种基本算法

引用计数

为每个object

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值