2018-04-19

第1章:对象导论

没啥说的

第2章:一切都是对象

存储到什么地方:

1、寄存器:处理器内部,存储最快

2、堆栈(栈):RAM随机访问存储器,压栈、出栈,存放对象引用

3、堆:通用内存池,存放Java对象

4、常量存储:程序代码内部,ROM只读存储器

5、非RAM存储:流对象和持久化对象

基本类型

boolean,char,byte,short,int,long,double,float,void

第3章:操作符

了解:按位操作符、移位操作符

一元、三元操作符

三元操作符: boolean-exp ? value0 : value1

第4章:控制执行流程

第5章:初始化与清理

构造器中调用构造器:不能同时调用两个构造器,构造器置于起始处

finalize()用途:

Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.  A subclass overrides thefinalizemethod to dispose of  system resources or to perform other cleanup.

1、对象可能不被垃圾回收

2、垃圾回收并不等于销毁对象

3、垃圾回收与内存有关

原理假定:垃圾回收器准备好释放对象占用的存储空间,首先调用其finalize()方法,并在下一次垃圾回收时,才会真正回收对象占用的内存

垃圾回收器如何工作

寻找垃圾:

1、引用计数法:每个对象含有一个引用计数器,有引用连接对象时,引用计数+1,某个对象引用置为null或离开作用域,引用计数-1

问题:对象存在循环引用,对象应该被回收,引用计数却不为零

2、根源于堆栈和静态存储区的引用:思想:对于任何“活”的对象,一定能最终追溯到其存活在堆栈或静态存储区的引用。实现:对于发现的每个引用,必须追踪它所引用的对象,然后是此对象包含所有的引用,如此反复进行,直到所形成的网络全部被访问

处理垃圾:

1、停止-复制:暂停程序的执行,将所有存活对象从当前堆复制到另一个堆,没有被复制的全部是垃圾

问题:a、占用两个堆,来回倒腾,维护比实际需要多一倍空间;b、程序进入稳定时,只产生少量垃圾,仍然从内存自一处复制到另一处,浪费

2、标记-清扫:找到所有活的对象,给对象设一个标记,标记完成后,没有标记的对象将被释放

3、大内存块:内存分配以较大的“块”为单位,对象较大,会占用单独的块。每个块都用相应的代数记录是否存活,如果块在某处被引用,其代数会增加;(内存块怎么被回收、废弃?)

4、自适应技术:分代的、停止-复制、标记-清扫;

初始化

非静态实例初始化:实例初始化子句在两个构造器之前执行

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容