Garbage First
1 G1 的基本概念
1 : HotSpo
t:现有的垃圾回收器: Serial GC
, Parallel GC
,Concurrent Mark Sweep Gc
这三个GC不同:
1:如果你想要最小化的使用内存和并行开销:选Serial GC
2:如果你想要最大化应用程序的吞吐量选用Parallel GC
3:如果想要最小化GC的中断或停顿时间选CMS GC
*2 G1
是Garbage First, 意思: G1是一个并行回收器,它把内存分割为很多不相关的区间(Region
),每一个区间可以属于老年代或年轻代,并且每个区间上是可以物理上不连续的,老年代区间这个设计理念本身是为了服务于并行后台线程,这些线程的主要工作是寻找未被引用的对象,而这样就会产生一种现象,即某些区间的垃圾多余其它区间,(垃圾回收时都是需要停下应用程序,不然没办法防止应用程序的干扰
),然后G1
可以集中精力在垃圾最多的区间上,并且只需要一点点时间就可以清空这些区间垃圾,腾出完全空闲的时间.总而言之:G1侧重点在于处理垃圾最多的区间,所以叫Garbege First
*3 : G1内部主要有四个操作阶段:
1:年轻代回收 (A young Collection)
2: 运行在后台的并行循环(A background Concurrent Cycle)
3: 混合回收(A mixed Collection)
4: 全量回收 (A full GC)
2 进程和线程
1: 子进程和父进程有不同的代码和数据空间
,而多个线程共享数据空间
,每个线程都有自己的执行堆栈和程序计数器
为其执行上下文
3 ava###1 G1 的基本概念
1 : HotSpo
t:现有的垃圾回收器: Serial GC
, Parallel GC
,Concurrent Mark Sweep Gc
这三个GC不同:
1:如果你想要最小化的使用内存和并行开销:选Serial GC
2:如果你想要最大化应用程序的吞吐量选用Parallel GC
3:如果想要最小化GC的中断或停顿时间选CMS GC
*2 G1
是Garbage First, 意思: G1是一个并行回收器,它把内存分割为很多不相关的区间(Region
),每一个区间可以属于老年代或年轻代,并且每个区间上是可以物理上不连续的,老年代区间这个设计理念本身是为了服务于并行后台线程,这些线程的主要工作是寻找未被引用的对象,而这样就会产生一种现象,即某些区间的垃圾多余其它区间,(垃圾回收时都是需要停下应用程序,不然没办法防止应用程序的干扰
),然后G1
可以集中精力在垃圾最多的区间上,并且只需要一点点时间就可以清空这些区间垃圾,腾出完全空闲的时间.总而言之:G1侧重点在于处理垃圾最多的区间,所以叫Garbege First
*3 : G1内部主要有四个操作阶段:
1:年轻代回收 (A young Collection)
2: 运行在后台的并行循环(A background Concurrent Cycle)
3: 混合回收(A mixed Collection)
4: 全量回收 (A full GC)
2 进程和线程
1: 子进程和父进程有不同的代码和数据空间
,而多个线程共享数据空间
,每个线程都有自己的执行堆栈和程序计数器
为其执行上下文
3 java 里面的4中引用类型
1: 强引用 在一个线程内,无需直接引用直接可以使用的对象,除非引用不存在了,否则不会被GC清理了,
==
操作用于表示两个操作数所指向的堆地址空间地址是否相同,不表示两个操作数所指向的对象是否相等
2: 软用于,JVM抛出OOM之前,GC会清理所有的软引用对象,垃圾回收器在莫个时刻决定回收软可达的对象的时候,会清理软引用,并可选的把引用放到一个引用队列(Reference Queue
),类似弱引用,只不过java虚拟机会尽量让软引用存活时间长一点,破不得一才清理.
3**弱引用** (Weak Rederence
) 弱引用和软引用的最大不同在于:当GC在进行回收时,需要通过算法检查是否回收软引用对象,而对于弱引用对象,GC总是进行回收.弱引用对象更容易,更快被GC回收.GC在运行时一定回收弱引用对象,但是关系复杂的弱引用对象群常常需要好几次GC的运行才能完成
4**虚引用**(Phantom Reference): 主要目的是在一个对象所占用的内存被实际回收之前得到通知,从而进行一些相关清理工作,虚引用在创建时必须提供一个引用队列作为参数,其次虚引用对象的get方法总是返回null,因此无法通过虚引用来获得被引用的对象
5:**finalization机制**: finalize方法和c++中的析构函数类似,但是java采用的是基于垃圾回收器的自动内存管理机制
,所以finalize方法在本质上不同于c++的析构函数,当垃圾回收器发现没有引用指向一个对象时,会调用这个对象的finalize方法,通常这个方法会进行一些资源释放和清理的工作,比如关闭文件,套接字或数据库链接
由于finalize方法存在,虚拟机中的对象一般处于三种可能的状态
(1)可达到状态(2)可复活状态(腹泻了finalize方法)(3)不可到达状态,垃圾回收器自由释放对象所占用内存
最后更新:2017-09-21 18:02:55