java ram(randam access memory): 分成:stack,heap,static storage, constants storage.
stack:对像的删除存取比较快,存放的是已知的对像(类型,生命周期), 存放 基本数据类型,对象的引用
heap:在里面创建对像(即用new关键字来产生对象),存放用new关键字生成的对象
static stroage: 静态变量
constants storage: 常量
eg: String s = new String();
该语句产生两个对象,
一个是对象s的应用(代表string 对像的引用,位于stack 内)
一个是真实的s这个string对象(位于heap内)
------------------------------------------------------
== : 比较的是对像的引用。
equals :比较的是对像值,但默认的是使用对象的hashcode 来比较,hashcode 默认的既是对象的引用地址,所以在不覆写equals 和hashcode的程序里面,equals 便会默认的比较对象的引用。
-------------------
GC:
java的GC回收在heap内的没有引用到的垃圾对象,分两步:
1。找到可回收的垃圾
A: reference counter : 即对象每次增加,减少引用都会有个计数器来保存该引用,引用数目为0的为垃圾对象
B: Tracing Collector :从stack上开始寻找对象,有引用到的便是非垃圾对象,引用对象的子引用继续在stack上寻找,以此类推。
2。回收垃圾
A:stop and copy: 暂停(stop)正在执行的程序, 在两个heap之间来copy有用对象,废弃垃圾对象,同时整理heap使其紧凑相连,
copy结束后的heap便是紧凑没有垃圾对象的了。
B:mark and sweap: 对应tracing Collector ,在tracing过程中已经做了标识(mark)从而可以sweap垃圾对像。