1,一个java程序占用着一个jvm的实例,占用着一个进程
2,(一)jvm里面的堆区是先进后出的结构,主要是存java的8个包装类型,也可以引用堆区里面的对象,堆的数据当没有作用域的时候自动释放,不经过GC,同时,栈区的数据存在共享机制,int a =1 ; int b =1,对于b,首先会扫描栈区有没有1,如果有1,就共享出这个数据,而且不会互相影响,没有则会创建一个新的数据区
(二)jvm里面的堆区,是先进先出的数据结构,主要是用来存对象和数组的,栈区有引用指向堆区,这就是指针,当堆区里面的对象没有引用的时候,就是成为垃圾,但是这个垃圾何时回收,是看GC机制的。
3,GC只是回收堆区和栈的方法区里面的数据,数据区的数据是自动释放的。按年代来划分GC回收,可以分为新生代(伊甸园和两个幸存者空间,两个幸存者空间不能同时为空),老年代,和持久代,一开始的对象会被放在新生代,新生代里面的GC比老年代的频率多很多,但是老年代的GC会比新生代长很多,老年代里面有card_table,指向新生代的对象,因而不用搜整一个表。
下次了解GC的算法