垃圾回收器

一、简介:回收算法是内存回收的方法论,垃圾收集器就是内存回收的具体实现

垃圾回收器分类:

1.Serial收集器:串行收集器是最古老、最稳定及效率高的收集器,可能会产生较长的停顿,只使用一个线程去回收。新生代、老年代使用串行回收;新生代复制算法、老年代标记-压缩;垃圾收集的过程中会服务暂停

参数控制:-XX:+UseSerialGC 串行收集器

2.ParNew收集器:Serial收集器的多线程版本。新生代并行,老年代串行;新生代复制算法、老年代标记-压缩

参数控制:-XX:+UseParNewGC ParNew收集器

                    -XX:  ParallelGCThreads 限制线程数量

3.Parallel收集器:类似于ParNew收集器,Parallel收集器更关注系统的吞吐量。可以通过参数来打开自适应调节策略。虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或最大吞吐量;也可以通过参数控制GC的时间不大于多少毫秒或者比例;新生代复制算法、老年代标记-压缩

参数控制:-XX:+UseparallelGC 新生代并行,老年代串行

4.Parallel Old 收集器:Parallel的老年代版本,使用多线程和“标记-整理”算法

参数控制:-XX:+UseparalledOldGC 新生代串行,老年代并行

5.CMS收集器:是一种以获取最短回收停顿时间的收集器。目前适用于很大一部分Java应用集中于互联网网站或者B/S系统服务器上,这类应用尤其重视服务的响应速度,希望系统停顿时间最短,以给用户较好的体验

操作如下图:

6.G1收集器

常见的收集器组合:在吞吐量和响应时间权衡

总结:

二、jdk1.7和jdk1.8区别

1.jdk1.7,java类信息、常量池、静态变量都存放在Perm(永久代)里,jdk1.8,将类元数据放到本地内存,将常量池和静态变量放到java堆里。HostSpot VM将会为类的元数据明确分配和释放本地内存:解决原来产生大量类的full gc

2.-XX:PermSize和-XX:MaxPermSize参数替换成-XX:MetaspaceSize和-XX:MaxMetaspaceSize

3.优势:perSize:原来的jar包及自己项目的class存放的内存空间,这部分是参数-permSize固定的,如果Jar包多,经常会遇到permSize溢出,且每个项目都会占到自己的permGen空间。改成metaSpaces,各个项目共享class内存空间,比如二个项目都用了fast-json开源包,在metaSpaces只存一份class,提高内存利用率,更利于垃圾回收

4.元空间并不在虚拟机中,而使用本地内存。只受本地内存限制。

5.-XX:MetaspaceSize,初始化空间大小,达到该值会触发垃圾收集,同时GC会对该值调整;如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,在不超过MaxMetaspaceSize,适当提高该值

-XX:MaxMetaspaceSize:最大空间,默认是没有限制的

三、JVM参数分为三类

1.标准参数(-),所有JVM实现都必须实现这些参数的功能。例如:-verbose:class(输出jvm载入类的相关信息,当jvm报告说找不到类或者类冲突可以进行诊断);-verbose:gc(输出每次GC的相关情况);-verbose:jni(输出native方法调用情况,诊断jni调用错误信息)

2.非标准参数(-X):例如-Xms512m(堆),-Xmx512m,-Xmn200m(新生代),-Xss128(java栈大小)

3.非Stable参数:不稳定参数,将来可能随时去掉(-XX):-XX:PermSize=64m;-XX:MaxPermSize=512m

四、JVM调优的参数设置

 

-XX:heapDumpOnOutOfMemoryError:内存溢出导出堆信息到文件中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值