jvm调优个人总结

一、参数描述:
  1. 堆设置
    • -XX:+PrintGCDetails  打印垃圾回收信息
    • -Xms 为Heap区域的初始值,线上环境需要与-Xmx设置为一致,否则capacity的值会来回飘动
    • -Xmx 为Heap区域的最大值
    • -Xss(或-ss) 线程栈大小(指一个线程的native空间)1.5以后是1M的默认大小
    • -XX:PermSize与-XX:MaxPermSize  方法区(永久代)的初始大小和最大值(但不是本地方法区)
    • -XX:NewRatio  老年代与新生代比率
    • -XX:SurvivorRatio  Eden与Survivor的占用比例。例如8表示,一个survivor区占用 1/8 的Eden内存,即1/10的新生代内存,为什么不是1/9?因为我们的新生代有2个survivor,即S1和S22。所以survivor总共是占用新生代内存的 2/10,Eden与新生代的占比则为 8/10。
    • -XX:MaxHeapFreeRatio  GC后,如果发现空闲堆内存占到整个预估的比例小于这个值,则减小堆空间。
    • -XX:MinHeapFreeRatio  GC后,如果发现空闲堆内存占到整个预估的比例大于这个值,则增大堆空间。
    • -XX:NewSize    新生代大小
    • -Xmn参数含义是Young Generation的heap size。 
  2. 收集器设置
    • -XX:+UseSerialGC:设置串行收集器
    • -XX:+UseParallelGC:设置并行收集器
    • -XX:+UseParalledlOldGC:设置并行年老代收集器
    • -XX:+UseConcMarkSweepGC:设置并发收集器
  3. 垃圾回收统计信息
    • -XX:+PrintGC
    • -XX:+PrintGCDetails
    • -XX:+PrintGCTimeStamps
    • -Xloggc:filename
  4. 并行收集器设置
    • -XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数。
    • -XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
    • -XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)
  5. 并发收集器设置
    • -XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况。
    • -XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数。
二、参数设置
-Xms 与  -Xmx 值一般设置相同;
-Xmn  Sun官方推荐配置为整个堆的3/8。例如  -Xms :2048m  -Xmx:2048m  -Xmn:768m
-XX:PermSize,-XX:MaxPermSize  例如  -Xms :2048m  -Xmx:2048m  -XX:PermSize:256  -XX:MaxPermSize:512

三、 内存分配过程
1、JVM 会试图为相关Java对象在Eden Space中初始化一块内存区域。
2、当Eden空间足够时,内存申请结束;否则到下一步。
3、JVM 试图释放在Eden中所有不活跃的对象(这属于1或更高级的垃圾回收)。释放后若Eden空间仍然不足以放入新对象,则试图将部分Eden中活跃对象放入Survivor区。
4、Survivor区被用来作为Eden及Old的中间交换区域,当Old区空间足够时,Survivor区的对象会被移到Old区,否则会被保留在Survivor区。
5、当Old区空间不够时,JVM 会在Old区进行完全的垃圾收集(0级)。
6、完全垃圾收集后,若Survivor及Old区仍然无法存放从Eden复制过来的部分对象,导致JVM无法在Eden区为新对象创建内存区域,则出现“outofmemory”错误。

总结

名称
特征
作用
配置参数
异常
程序计数器
占用内存小,线程私有,
生命周期与线程相同
大致为字节码行号指示器
虚拟机栈
线程私有,生命周期与线程相同,使用连续的内存空间
Java 方法执行的内存模型,存储局部变量表、操作栈、动态链接、方法出口等信息
-Xss
StackOverflowError
OutOfMemoryError
java堆
线程共享,生命周期与虚拟机相同,可以不使用连续的内存地址
保存对象实例,所有对象实例(包括数组)都要在堆上分配
-Xms
-Xsx
-Xmn
OutOfMemoryError
方法区
线程共享,生命周期与虚拟机相同,可以不使用连续的内存地址
存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据
-XX:PermSize:
16M
-XX:MaxPermSize
64M
OutOfMemoryError
运行时常量池
方法区的一部分,具有动态性
存放字面量及符号引用
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值