




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
GC JAVATOOLS 谢刚2009 7 27 GC GC是一个自动管理内存的程序 主要职责是分配内存 保证被引用的对象始终在内存 把不被应用的对象从内存中释放GC会自动计算对象被引用的情况 只要对象不再被引用 相应的内存就会被回收 另外 GC非常重要的一点就避免内存碎片 道理跟windows的磁盘整理一样 把使用中各个内存块整合起来 这样才能保证有足够的空间来存储大对象 理想中的GC 该回收的回收 不该回收的绝不回收GC要快而且GC运行时 不能导致应用程序的停顿 限制内存碎片 对象被回收以后 所使用的内存会被回收 如果不加处理内存中就会出现大量的内存碎片 这样就有可能导致因为没有足够的连续空间分配给某些大对象而导致OutofMemory 消除内存碎片的的手段之一就是 内存压缩 可扩展性 Scalability 内存的分配和回收都不能成为应用程序的瓶颈 GC的性能评判标准 吞吐量 Throughput 全部时间中不用于GC的比例 重点 暂停时间 GC过程中应用程序执行暂停的时间 重点 GC的开销 全部时间中用于GC的比例 GC的频率 通过跟应用程序的执行比较来得到GC的执行频率 支持GC运行所需使用的内存大小 例如heap的大小 GC的及时性 Promptness 一个对象从被废弃到内存被回收之间的时间差 堆 HEAP JVM管理的内存叫堆 在32Bit操作系统上有4G的限制 而64Bit的就没有 JVM初始分配的内存由 Xms指定 默认是物理内存的1 64但小于1G JVM最大分配的内存由 Xmx指定 默认是物理内存的1 4但小于1G XX MinHeapFreeRatio 40 XX MaxHeapFreeRatio 70服务器一般设置 Xms Xmx相等以避免在每次GC后调整堆的大小 收集算法 一 复制 copy 将堆内分成两个相同空间 从根 ThreadLocal的对象 静态对象 开始访问每一个关联的活跃对象 将空间A的活跃对象全部复制到空间B 然后一次性回收整个空间A优点 遍历对象成本小 由于只遍历活跃对象缺点 复制成本高 需要较多的内存 标记清除 mark sweep 收集器先从根开始访问所有活跃对象 标记为活跃对象 然后再遍历一次整个内存区域 把所有没有标记活跃的对象进行回收处理 优点 不用复制缺点 遍历整个空间的成本较大暂停时间随空间大小线性增大 而且整理后堆里的碎片很多 收集算法 二 标记整理 mark sweep compact 这个算法有 个阶段 mark 标识回收对象 sweep 清除 compact 压缩 综合前两者的做法和优点 先标记活跃对象 然后将其合并成较大的内存块 收集算法 三 分代 Generations 分代根据对象的生命周期长短 把堆分为3个代 Young 年轻代 新生代 Old 年老代 老生代 Permanent 永生代 优点 根据不同代的特点采用不同的收集算法 扬长避短 堆内存分布图 Xms1024m Xmx1024m堆大小 XX NewSize 256m XX MaxNewSize 256m新生代大小 XX PermSize 128m XX MaxPermSize 128m永生代大小 Xss128K单线程栈的大小 XX MaxTenuringThreshold 2新生代对象经过2次进入老年代 YOUNG Young Nursery 年轻代 研究表明大部分对象都是朝生暮死 随生随灭的 因此所有收集器都为年轻代选择了复制算法 Young里面又分为3个区域 一个Eden 所有新建对象都会存在于该区 两个Survivor区 用来实施复制算法 每次复制就是将Eden和第一块Survior的活对象复制到第2块 然后清空Eden与第一块Survior 由于新生代的空间通常都比较小而且可能存在大量不再被引用的对象 所以针对新生代的GC执行频率高 速度快 Old Tenured 年老代 Old Tenured 年老代 年轻代的对象如果能够挺过数次收集 就会进入年老代 年老代使用标记整理算法 因为年老代的对象都没那么容易死的 采用复制算法就要反复的复制对象 很不合算 只好采用标记清理算法 但标记清理算法其实也不轻松 每次都要遍历区域内所有对象 XX MaxTenuringThreshold 2Perm permanent 永生代 例如类和方法对象以及它们的描述对象 串行收集器 SerialCollector 新生代串行新生代串行收集老生代和永生代的串行收集 mark sweep compact 只使用一个cpu 并且回收时 应用程序会暂停 XX UseSerialGC 并行收集器 ThroughputCollector 新生代并行收集 stop the world和coping收集器 但是多线程年老代和永生代任然串行 mark sweep compact XX UseParallelGC XX UseParallelOldGC 并行压缩回收器 XX ParallelGCThreads XX MaxGCPauseMillis XX GCTimeRatio 并发Mark Sweep收集器 CMS CMS的新生代回收收集的方式和并行回收一致CMS的老生代回收 XX UseConcMarkSweepGC XX UseParNewGC XX CMSParallelRemarkEnabled XX CMSInitiatingOccupancyFraction 60 XX CMSFullGCsBeforeCompaction 5 XX UseCMSCompactAtFullCollection 吞吐量优先 java server Xloggc gc log Xmx1024m Xms1024m XX NewSize 256m XX MaxNewSize 256m XX PermSize 128m XX MaxPermSize 128m Xss128k XX UseParallelGC XX ParallelGCThreads 8 XX UseParallelOldGC 短暂停优先 java server Xloggc gc log Xmx1024m Xms1024m XX NewSize 256m XX MaxNewSize 256m XX PermSize 128m XX MaxPermSize 128m Xss128k XX UseConcMarkSweepGC XX ParallelGCThreads 8 XX UseParNewGC XX CMSInitiatingOccupancyFraction 60 XX CMSParallelRemarkEnabled XX UseCMSCompactAtFullCollection 可选 XX CMSFullGCsBeforeCompaction 5 可选 其他参数 XX PrintGCDetails XX PrintGCTimeStamps XX DisableExplicitGC Xloggc filename JAVATOOLS jinfojpsJstatjmapJconsolejstack JSTAT 一个极强的监视VM内存工具 可以用来监视VM内存内的各种堆和非堆的大小及其内存使用jstat classpid 显示加载class的数量 及所占空间等信息 jstat compilerpid 显示VM实时编译的数量等信息 jstat gcpid 可以显示gc的信息 查看gc的次数 及时间 其中最后五项 分别是younggc的次数 younggc的时间 fullgc的次数 fullgc的时间 gc的总时间 jstat gccapacity 可以显示 VM内存中三代 young old perm 对象的使用和占用大小 如 PGCMN显示的是最小perm的内存使用量 PGCMX显示的是perm的内存最大使用量 PGC是当前新生成的perm内存占用量 PC是但前perm内存占用量 其他的可以根据这个类推 OC是old内纯的占用量 jstat gcnewpid new对象的信息 jstat gcnewcapacitypid new对象的信息及其占用量 jstat gcoldpid old对象的信息 jstat gcoldcapacitypid old对象的信息及其占用量 jstat gcpermcapacitypid perm对象的信息及其占用量 jstat printcompilationpid 当前VM执行的信息 JMAP 显示java进程内存使用的相关信息jmappid打印内存使用的摘要信息jmap heappidjavaheap信息jmap histo live统计对象count live表示在使用jmap histopid mem txt打印比较简单的各个有多少个对象占了多少内存的信息 一般重定向的文件jmap dump format b file mem datpid将内存使用的详细情况输出到mem dat文件用jhat命令可以参看jhat port7000mem dat然后使用 http 10 10 92 119 7000 查看类相关信息 JINFO 能输出并修改运行时的java进程的运行参数jinfo flagpid打印name的值jinfo flag pid取消或者设置某个属性jinfo flag pid设置属性值jinfo flagspid输出所有属性值jinfo sysprops输出JAVA属性jinfopid输出所有的 jconsole 是一个用java写的GUI程序 用来监控VM 并可监控远程的VM服务器端配置 mkdir JAVA HOME jconsole pwdcp JAVA HOME jre lib management jmxremote password template JAVA HOME jconsole jmxremote password chmod600 JAVA HOME jconsole jmxremote passwordvijmxremote password去掉 monitorRoleRED前的注释并将RED修改为你要设置的密码 安全起见 只开放有只读权限的用户 修改 RESIN HOME bin wrapper pl 为 JAVA ARGS添加三个参数 JAVA ARGS JAVA ARGS Dcom sun management jmxremote port 1010 Dcom sun management jmxremote password file usr local jdk jconsole jmxremote password Dcom sun management jmxremote ssl false Dcom sun management jmxremote ssl false执行hostname i 如果显示的是127 0 0 1 则需要修改 etc hosts文vi etc hosts 修改如下 127 0 0 1localhostlocalhost localdomainlocalhost服务器的真实IP地址localhostlocalhost localdomainlocalhost JSTACK jstack 如果java程序崩溃生成core文件 jstack工具可以用来获得core文件的javastack和nativestack的信息 从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题 jstack工具还可以附属到正在运行的java程序中 看到当时运行的java程序的javastack和nativestack的信息jstack l 连接正在运行的进程jstack F m l 连接挂起的进程jstack m l 连接core文件jstack m l server id 连接远程服务器 参考资料
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新疆维吾尔自治区喀什市2024–2025学年高三语文上学期12月模拟考试试题【含答案】
- 部队日常管理课件
- 部队分队管理课件
- 2025年国家公务员录用考试《申论》(行政执法类)试卷(含答案)
- 2025消费者在签订格式合同等书面协议时应注意什么
- 一周带饭午饭菜谱
- 2025标准版房地产中介服务合同模板
- 福建省厦门外国语海沧附属校2026届中考物理考前最后一卷含解析
- 2026届湖南省郴州市资兴市兴华实验校中考押题语文预测卷含解析
- 2025民间借款合同简化版
- 餐饮食堂食品安全法培训
- (备考)2023年国家电网招聘考试试题及答案
- 三年级英语.26个英文字母书写大小写临摹字帖【通用版】
- 电解铝企业隐患排查清单参考模板范本
- 质量控制与质量保证课件
- 带状疱疹及带状疱疹后神经痛课件
- 子女教育金理财保险
- 山东省日照市各县区乡镇行政村村庄村名居民村民委员会明细及行政区划代码
- 新高考背景下2023届高三化学一轮复习备考策略讲座
- 高校助学贷款结清凭证
- 英语阅读教学【讲座课件】
评论
0/150
提交评论