第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、自适应技术:分代的、停止-复制、标记-清扫;
初始化
非静态实例初始化:实例初始化子句在两个构造器之前执行