java虚拟机疑问与解答

内存相关

1、哪些内存区域是共享的,哪些又是线程私有的? 
共享的:方法区、堆 
私有的:栈、本地栈、程序计数器

2、哪个内存区域不会有OOM? 
程序计数器

3、哪个区域会有StackOverFlowError? 
域区与本地栈

GC相关

1、如何打开GC日志? 
参考:http://ifeve.com/useful-jvm-flags-part-8-gc-logging/ 
这个地方还有系列介绍参数的博文值得一看 
-XX:+PrintGC 简单日志 
-XX:PrintGCDetails 详细参数 
-XX:+PrintGCTimeStamps和-XX:+PrintGCDateStamps 日期、时间戳 
-Xloggc 指定GC日志输出文件

2、如何看懂GC日志? 
GC日志与收集器关系很大,不同的收集器日志格式不一样,但是基本的共性数值还有是有: 
回收类型(Minor Or Full GC,后者会Stop The World)、什么时间点发生、 
特定区域(如年轻代)回收前后内存大小对比、堆内存回收前后内存大小的对比、运行时长等; 
观察这些参数就可以判断GC的相关操作情况。

3、不同收集器的表格整理

收集器多线程回收区域回收算法特点缺点可以配合回收器
Serial新生代复制运行在Client模式下,简单高效单线程,不适合运行在高性能的服务器上Serial Old
CMS
ParNew新生代复制Serial多线程实现暂无Serial Old
CMS
Parallel Scavenge新生代复制吞吐量优先、有参数可以控制吞吐量,最大停顿时间,还可以设置自适应调节vm参数暂无Serial Old
Parallel Old
CMS老年代标记-清除设计目标是低停顿、可以与用户线程(几乎)并发执行1、CPU资源敏感
2、无法处理浮动垃圾(收集过程中产生的新垃圾)
3、标记-清除算法会有碎片产生(顶不住要进行FullGC时会触发碎片整理)
Serial
ParNew
Serial Old(CMF)
Serial Old老年代标记-整理Serial老年代实现、也比较适合在client模式下使用单线程,不适合运行在高性能的服务器上Serial
ParNew
Parallel Scavenge
Parallel Old老年代标记-整理Parallel的老年代实现,也是吞吐量优先的算法暂无Parallel Scavenge
G1所有标记-整理,局部也类似有复制算法1、设计目标是低停顿,与CMS相同
2、并发与并行都可以
3、分代收集概念得以保留,虽然不需要其它收集器配合
4、标记-整理算法,没有垃圾
降低停顿,几乎可以预测的停顿时间模型,CMS无法预测
暂无不需要配合


3.1、不同的收集器组合的适用场景是什么?各有什么优缺点。

组合适用场景
Serial
Serial Old
单线程回收,适合在client模式下小内存,简单快速回收
ParNew
CMS
适合在高性能服务器上实现低停顿的垃圾回收,如B/S服务器等
Parallel Scavenge
Parallel Old
适合在高性能服务器上实现CPU敏感以及吞吐量优先的垃圾回收,比如大量计算的程序

4、诊断JVM故障时一般的步骤是什么?

查看日志:应用程序日志、GC日志;

查看堆内存转储文件,分析异常内存占用:jmap转储;

查看异常调用堆栈信息:jstack

VisualVm实时查看vm信息;

分析堆内存转储文件:Eclipse Heap Analysis Tools;

4.1、优化手段

应用程序优化;

服务器硬件升级;

调整VM参数;

32位替换64位vm,并开多个虚拟机等;

5、垃圾收集器按回收区域分类是怎么样的? 

年轻代收集器:Serial/ParNew/Parallel Scavenge 
老年代收集器:CMS/Serial Old/Parallel Old 
整个堆收集器:G1 
收集器关系图
参考博客:http://blog.csdn.net/u010723709/article/details/47355499 
搜索jvm垃圾收集器关系图即可

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值