常见jvm参数配置

垃圾收集器做一个实战的调优,你自己可以下去做一个小实验,以后你要做架构师的时候,生产环境关于JVM调优的时候,

一般都是架构师去做的,这个时候你可以大致的去了解一下,今天会讲到一个性能测试工具,JMeter,是用来测试HTTP

请求的吞吐量的,待会我也会说一下吞吐量的一个意思,我们今天可能会讲到哪些内容呢,关于JVM参数的一个调优,

我们怎么去配一个JVM的基本的参数,堆内存大小,配置新生代的一个比例参数,老年代的几个参数,做开发的一般的都会

遇到方法区异常,还有栈异常,栈溢出的,其实还是比较常见的,我们怎么做一个参数的一个配置,内存溢出和内存泄露的区别,

因为很多在初学的时候,在字面上对于溢出和泄露,两个概念肯定会搞混淆,内存泄露其实是包含了内存溢出的,

具体什么意思,讲到市面上比较流行的垃圾收集器,串行回收和并行回收,CMS,四种收集器会详细讲一下,测试一个吞吐量
JVM参数的配置,这个有没有人配过的,配置过一些参数的,你们没有遇到过内存溢出吗,遇到内存溢出肯定是会配置内存参数的,

调堆内存的一个大小,其实JVM参数调优还是比较重要的,如果你们做到架构师的级别的时候,基本上生产环境每台服务器的配置,

都是由你来做的,其实JVM相关的参数,有非常非常多,我在这里可能只讲比较常用的,你们下次可以研究一下更细节的,我只说

几个比较常见的,第一个我会讲到-XX:+PrintGC,只要是在我们JAVA运行的时候,你配置这样一个JVM参数,当它每次GC做一个

回收的时候,都会去打印一个日志,还有一个是-XX:+UseSerialGC,是专门做串行回收的,串行回收现在一般用的比较少,

-XX:+PrintGCDetail是可以更加详细的打印一些GC信息,-Xms这个常用的是起什么作用呢,表示堆初始值,表示我堆内存的时候,

我最开始初始的时候的堆内存大小是多少,这是你们以后经常会遇到的,堆的初始值一定要和最大值设置成相等的,

如果不相等的情况下,-Xmx表示配置堆的最大的可用值,

表示配置堆的最大的一个大小,堆内存默认配置的是4个G,如果你们没有配置JVM参数的话,默认是4个G的,但是有人会说

如果我的电脑是2个G呢,2个G的话它就根据你的实际内存来定的,因为在我之前做生产服务器的时候,比如我的是8G内存,

他默认就是4个G,不是8个G的,还有一个叫-Xmn,表示新生代的最大可用值,如果新生代一旦满的情况下,会发生这个GC的,

如果新生代满的情况下,会产生什么GC,Minor GC,Full GC是会把新生代和老年代都会回收的,还有一个参数,

-XX:SuvivorRatio这个参数也是用的比较多的,他是配置eden区和from/to区的一个比列大小,eden区一般比from大两倍,

相当于eden区占两份,from/to占一份,还有一个参数-XX:NewRatio=2主要是配置新生代和老年代的一个占比,这个几个参数

你们可以记下了,配置垃圾收集器,G1,还有CMS,在做JVM配置的时候,初始值一定和要最大值相等,

如果不等的情况下,如果我现在的堆初始值是10,最大值是512M,这样的话会有什么问题呢,就会产生垃圾回收机制不停的在回收,

因为我的空间太小了,不停的申请,不停的回收,不停的去申请内存,这个一定要相等的,不要配置初始值是0M,然后堆的最大值是512M,

这样的话性能是不好的,减少垃圾回收的次数,垃圾回收的时候如果每次都在回收的情况下,这个时候其他的工作线程是会停顿一段

时间的,但是我们人为的看不出来,这个时候我们都是看不出来的,为什么看不出来呢,有的时候是因为你的服务器配置太好了,

他的回收可能不是很频繁,所以对整个程序影响不大,如果你的初始值和堆内存配置不大的情况下,这个时候垃圾回收机制不停的

回收的情况下,这样会导致程序会一直停下,运行一下,停一下,这样对应用程序不好的,本身垃圾回收机制会导致其他线程暂停的,

为什么暂停呢,如果说你不暂停的情况下,如果又产生新的垃圾呢,那我怎么去回收呢,所以他这么做的目的,保证回收的时候

稍微干净一点,这是我要讲的第一个原则,第二个原则是什么呢,一定要把新生代堆的空间,一定要比老年代要小,垃圾回收器回收的

时候,尽量在新生代里做回收,不要在老年代做回收,老年代的对象已经经历过很多考验了,基本上都是经历过15次的考验,

如果非常成熟的情况下,会从eden区晋升到from区或者to区,然后到老年代里面去,这样他是非常稳定的,为什么要垃圾回收到新生代

回收呢,新生代的对象可能一次之后就不再使用了,所以要把新生代的比列稍微小一点,什么时候垃圾回收机制会频繁回收呢,

就是我的空间比较小的情况下,他的回收次数比较多,如果在生产环境的时候,你会发现好多公司怎么配的,一般把新生代配置为

1:2,就是新生代占比1份,老年代占比2份,这样的话,我新生代占比越小的情况下,垃圾回收机制就可能越频繁,如果老年代占比

越大的情况下,垃圾回收机制就可能不会那么频繁去回收,这样的话对整个性能就会非常好,大体回收原则
常见参数配置
-XX:+PrintGC      每次触发GC的时候打印相关日志
-XX:+UseSerialGC      串行回收
-XX:+PrintGCDetails  更详细的GC日志
-Xms               堆初始值
-Xmx               堆最大可用值
-Xmn               新生代堆最大可用值
-XX:SurvivorRatio  用来设置新生代中eden空间和from/to空间的比例.
-XX:NewRatio       配置新生代与老年代占比 1:2
含以-XX:SurvivorRatio=eden/from=den/to
总结:在实际工作中,我们可以直接将初始的堆大小与最大堆大小相等,
这样的好处是可以减少程序运行时垃圾回收次数,从而提高效率。
-XX:SurvivorRatio     用来设置新生代中eden空间和from/to空间的比例.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值