GC的心得

GC

GC【垃圾回收】

heap + metaspace

1.什么是垃圾?
没有引用指向的对象

GC:
1.哪些对象要被回收 which
2.什么时候被回收 when
3.采用什么方式回收 how

1.哪些对象要被回收 which
1.引用计数法【了解】
给对象添加了一个引用计数器,引用一次 +1 引用失效 -1
计数器0 说明这个对象可以被回收

	缺点: 
		循环引用 ,会导致 这个对象回收不了 

		Obejcet a = new Object(); +1
		Obejcet b = new Object(); +1
		a.xxx=b  +1 
		b.xxx=a  +1
		a.xxx=b  +1 

		a =>2
		b =>3 

		a=null 	a =>1
		b=null  b =>2 

2.根节点可达性分析

什么是GCroot?
1.栈
2.方法区
3.native stack

2.when +how
采用什么方式回收?
1.理论:=》 gc算法
2.落地:=》垃圾收集器

gc算法:
1.标记清除: mark-sweep
标记: 标记哪些对象要被清除【根节点可达性分析】
清除:垃圾对象进行清除

	缺点: 内存碎片
	stop the world =》 stw 暂停应用

2.标记整理: 
	标记: 标记哪些对象要被清除【根节点可达性分析】 进行清除
	整理:移动活的对象 进行内存整理

3.复制:
	1.把内存分成大小相同的两片
	2.浪费了一些内存 
	3.没碎片

对象:
夭折:90%
老不死的:old 0-15 15 这个对象是足够的老
不灭的:class 、pool

年轻代参数:
-Xmnsize =》 年轻代
XX:SurvivorRatio=ratio =》 8:1:1

垃圾收集器 :
1.串行垃圾收集器
2.并行垃圾收集器
3.并发垃圾收集器
4.G1垃圾收集器【比较复杂】

1.串行垃圾收集器
1.一个线程处理垃圾回收
2.stw
app=>gc=>app

2.并行垃圾收集器
1.多个线程处理垃圾回收
2.比 串行垃圾收集器 stw时间短

3.并发垃圾收集器
你的程序线程 和 gc线程 并发执行
没有stw

分代算法:
年轻代 老年代
1.年轻代
1.年轻代:串行
-Xms5m -Xmx5m -XX:+PrintGCDetails -XX:+UseSerialGC

	DefNew 年轻代 串行垃圾回收器
	Tenured 老年代 串行垃圾回收器打印

2.年轻代:ParNew(并行)
	-Xms5m -Xmx5m -XX:+PrintGCDetails -XX:+UseParNewGC

	ParNew 年轻代 并行垃圾回收器
	Tenured 老年代 串行垃圾回收器打印

3.年轻代:Parallel Scavenge(并发)  jinfo 

	-Xms5m -Xmx5m -XX:+PrintGCDetails -XX:+UseParallelGC

	PSYoungGen 年轻代 并发垃圾回收器
	ParOldGen 老年代 并行垃圾回收器

注意: 
	可以从单单 一个方面入手 eg:年轻代  老年代的gc 就确定了

2.老年代

1.老年代:串行 【用不了】
	-Xms5m -Xmx5m -XX:+PrintGCDetails -XX:+UseSerialOldGC【参数没有找到】


2.老年代:Parallel old(并行)
	-Xms5m -Xmx5m -XX:+PrintGCDetails -XX:+UseParallelOldGC

	PSYoungGen 年轻代 并发垃圾回收器
	ParOldGen 老年代 串行垃圾回收器打印

3.CMS(并发标记清除)
	1.目的 
		gc =》 停顿的时间比较短

	-Xms5m -Xmx5m -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC

	ParNew 年轻代 并发垃圾回收器
	CMS 老年代 cms垃圾回收器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值