博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GC策略
阅读量:6785 次
发布时间:2019-06-26

本文共 1066 字,大约阅读时间需要 3 分钟。

hot3.png

JVM里的GC(Garbage Collection)的算法有很多种,如标记清除收集器,压缩收集器,分代收集器等等

现在比较常用的是分代收集(generational collection,也是SUN VM使用的,J2SE1.2之后引入),即将内存分为几个区域,将不同生命周期的对象放在不同区域里:young generation,tenured generation和permanet generation。绝大部分的objec被分配在young generation(生命周期短),并且大部分的object在这里die。当young generation满了之后,将引发minor collection(YGC)。在minor collection后存活的object会被移动到tenured generation(生命周期比较长)。最后,tenured generation满之后触发major collection。major collection(Full gc)会触发整个heap的回收,包括回收young generation。permanet generation区域比较稳定,主要存放classloader信息。

young generation有eden、2个survivor 区域组成。其中一个survivor区域一直是空的,是eden区域和另一个survivor区域在下一次copy collection后活着的objecy的目的地。object在survivo区域被复制直到转移到tenured区。

我们要尽量减少 Full gc 的次数(tenured generation 一般比较大,收集的时间较长,频繁的Full gc会导致应用的性能收到严重的影响)。

###一、堆内存GC

JVM(采用分代回收的策略),用较高的频率对年轻的对象(young generation)进行YGC,而对老对象(tenured generation)较少(tenured generation 满了后才进行)进行Full GC。这样就不需要每次GC都将内存中所有对象都检查一遍。

###二、非堆内存不GC

GC不会在主程序运行期对PermGen Space进行清理,所以如果你的应用中有很多CLASS(特别是动态生成类,当然permgen space存放的内容不仅限于类)的话,就很可能出现PermGen Space错误。

转载于:https://my.oschina.net/u/1985317/blog/903224

你可能感兴趣的文章
在服务器上排除问题的头五分钟
查看>>
安装 - FreeBSD + Nginx 环境搭建教程(推荐)
查看>>
学习cocos2d --- 场景创建
查看>>
小凡带你搭建本地的光盘yum源
查看>>
java 求最大公约数和最小公倍数
查看>>
vmware workstation的bridged NAT host-only区别与适用场景简介
查看>>
Linux基础知识
查看>>
Struts2中的OGNL详解
查看>>
隐藏/屏蔽服务器信息与web软件版本信息
查看>>
ifstat 网络流量统计工具
查看>>
VLC 2.2.6 Windows下搭建 rtsp流媒体服务器
查看>>
Django2 model操作数据库
查看>>
使用Azure Policy限制所有ASM资源
查看>>
在win7系统下使用TortoiseGit(乌龟git)简单操作Git@OSC
查看>>
强大的ghost.py 使用实例
查看>>
快速搭建NTP时间服务器
查看>>
网络基础
查看>>
碰到 oracle 10g ORA-00257
查看>>
服务器群集实验 ——SQL群集2
查看>>
企业级监控工具cacti安装配置全过程
查看>>