一般来说,jvm的调优策略是没有一种固定的方法,只有依靠我们的知识和经验来对项目中出现的问题进行分析,正如吉德林法则那样当你已经把问题清楚写出来,就已经解决了一半。虽然JVM调优中没有固定的策略,但是本文会介绍几种比较常见的调优策略。

一、减少Full GC

  项目中如果出现了Full GC,由于Full GC是清理整个堆空间包括年轻代和永久代,时间会很长,会大大的减少程序的性能。减少Full GC的频率策略可以参考

  https://blog.csdn.net/qq_34939489/article/details/78133179

  出现Full GC一般来说是项目中的大对象直接存入了老年代,老年代的内存不够,JVM触发Full GC。又因为堆内存设置较大,那么JVM回收的时间就会较长。

  这样的话,就要考虑堆内存的设置,一般来说JVM的大小应该是物理内存的1/4(具体情况由项目来定),比如说你的物理内存是16G,那么你的堆内存最好设置为4G。如果服务器的内存过大,可以考虑配置多个web容器,利用nignx做单机的集群,每个堆内存配置相同(不超过物理内存的1/4),但是不能把所有的物理内存都分配出去,还需要留一部分作为本地内存。

二、内存溢出问题

  内存溢出在项目中多多少少都会遇见,本文主要介绍使用了大量NIO情况下的内存溢出。一般来说,内存溢出首先就考虑的是加大堆内存,但是如果你的项目大量使用了NIO,这种做法非但没有效果,反而会增加内存溢出出现的概率。因为NIO使用时,会申请堆外内存(分配JVM内存后剩下的物理内存),如果说堆外内存较小,NIO处理量又较大,就会出现内存溢出情况。出现了这种情况如果说项目对物理内存需求不大且服务器的物理内存太小(能够满足项目需求),可以考虑减少堆内存。

  其他的内存溢出问题,可以参考:https://blog.csdn.net/nocol123/article/details/76223098

三、处理不对等数据

  处理不对等数据是指,如果项目系统的功能是接受其他系统发过来的数据,如果当发生端系统是多个系统时,而接受端只有一个,那么接受端系统和发送端系统的数据就不对等,这种情况就会导致jvm的性能崩溃(一般来说,jvm会链接重置),面对这种情况,优先考虑的是增加一个缓冲,如果是某个系统要接受其他多个系统的请求,可以考虑选择使用消息队列来出来。

深入了解java虚拟机(JVM) 第八章 常见的jvm调优策略的更多相关文章

  1. Java虚拟机笔记(五):JVM中对象的分代

    为什么要分代 为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用, ...

  2. Java虚拟机内存模型及垃圾回收监控调优

    Java虚拟机内存模型及垃圾回收监控调优 如果你想理解Java垃圾回收如果工作,那么理解JVM的内存模型就显的非常重要.今天我们就来看看JVM内存的各不同部分及如果监控和实现垃圾回收调优. JVM内存 ...

  3. 深入理解JAVA虚拟机(内存模型+GC算法+JVM调优)

    目录 1.Java虚拟机内存模型 1.1 程序计数器 1.2 Java虚拟机栈 局部变量 1.3 本地方法栈 1.4 Java堆 1.5 方法区(永久区.元空间) 附图 2.JVM内存分配参数 2.1 ...

  4. 《Java虚拟机原理图解》3、JVM执行时数据区

    [last updated :2014/11/7]     JVM执行时数据区(JVM Runtime Area)事实上就是指JVM在执行期间,其对计算机内存空间的划分和分配.本文将通过下面几个话题来 ...

  5. 深入理解java虚拟机学习笔记(一)JVM内存模型

    上周末搬家后,家里的宽带一直没弄好,跟电信客服反映了N遍了终于约了个师傅明天早上来迁移宽带,可以结束一个多星期没网的痛苦日子了.这段时间也是各种忙,都一个星期没更新博客了,再不写之前那种状态和激情都要 ...

  6. 关于学习java虚拟机的知识整理一:jvm内存区域

    之前由于考研,对于虚拟机的认识疏忽了太多,现在重新整理回顾一下. 如上图所示,jvm的内存区域(运行时数据区)共分为5处:方法区(Method Area).虚拟机栈(vm Stack).本地方法栈(N ...

  7. 《实战Java虚拟机》,最简单的JVM入门书,京东活动,满200就减100了,该出手了

    #京东满200—100单# 图书放血大卖了 <实战Java虚拟机>http://item.jd.com/11670385.html 参加京东满200减 100的大促,就在6.1这一天,仅此 ...

  8. 《深入理解java虚拟机》笔记(7)JVM调优(分代垃圾收集器)

    以下配置主要针对分代垃圾回收算法而言. 一.堆大小设置 年轻代的设置很关键 JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用 ...

  9. Java虚拟机详解(五)------JVM参数(持续更新)

    JVM参数有很多,其实我们直接使用默认的JVM参数,不去修改都可以满足大多数情况.但是如果你想在有限的硬件资源下,部署的系统达到最大的运行效率,那么进行相关的JVM参数设置是必不可少的.下面我们就来对 ...

随机推荐

  1. 决策树与树集成模型(bootstrap, 决策树(信息熵,信息增益, 信息增益率, 基尼系数),回归树, Bagging, 随机森林, Boosting, Adaboost, GBDT, XGboost)

    1.bootstrap   在原始数据的范围内作有放回的再抽样M个, 样本容量仍为n,原始数据中每个观察单位每次被抽到的概率相等, 为1/n , 所得样本称为Bootstrap样本.于是可得到参数θ的 ...

  2. Redis 哨兵模式 带密码单机

    语法 https://segmentfault.com/a/1190000002680804 启动3台redis 6379,6380,6381 cp 多个redis.conf文件 开启daemoniz ...

  3. nested exception is java.lang.IllegalStateException: No persistence units parsed from {classpath*:META-INF/persistence.xml}

    Deploying inside Eclipse v3.6 raises the exception. The WEB-INF/classes/ folder in the .war doesn't ...

  4. 8 MySQL--单表查询

    单表查询: http://www.cnblogs.com/linhaifeng/articles/7267592.html 1.单表查询的语法 2.关键字的执行优先级(重点) 3.简单查询 4.whe ...

  5. js 实现图片上传 续

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  6. manjaro i3 配置笔记

    更改国内源 sudo pacman-mirrors -GB testing -c China 增加Arch linuxcn源 在/etc/pacman.conf文件末尾添加两行: [archlinux ...

  7. 【mysql数据库】一条语句添加多条数据

    insert into persons (id_p, lastname , firstName, city ) values (200,'haha' , 'deng' , 'shenzhen'), ( ...

  8. 在Spring使用junit注解进行单元测试

    在Spring中可以使用junit配合注解进行单元测试 一.常用注解 1.@RunWith(SpringJUnit4ClassRunner.class),让测试运行于spring测试环境2.@Cont ...

  9. Simple Style

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x ...

  10. 8-linux 安装 requests 时 pip install 安装不了

    安装提示更新:但是必须要sudo才行: sudo pip install --upgrade pip 安装 requests时有报错:这样写可以: sudo python -m pip install ...