一般来说,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调优策略的更多相关文章
-
Java虚拟机笔记(五):JVM中对象的分代
为什么要分代 为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用, ...
-
Java虚拟机内存模型及垃圾回收监控调优
Java虚拟机内存模型及垃圾回收监控调优 如果你想理解Java垃圾回收如果工作,那么理解JVM的内存模型就显的非常重要.今天我们就来看看JVM内存的各不同部分及如果监控和实现垃圾回收调优. JVM内存 ...
-
深入理解JAVA虚拟机(内存模型+GC算法+JVM调优)
目录 1.Java虚拟机内存模型 1.1 程序计数器 1.2 Java虚拟机栈 局部变量 1.3 本地方法栈 1.4 Java堆 1.5 方法区(永久区.元空间) 附图 2.JVM内存分配参数 2.1 ...
-
《Java虚拟机原理图解》3、JVM执行时数据区
[last updated :2014/11/7] JVM执行时数据区(JVM Runtime Area)事实上就是指JVM在执行期间,其对计算机内存空间的划分和分配.本文将通过下面几个话题来 ...
-
深入理解java虚拟机学习笔记(一)JVM内存模型
上周末搬家后,家里的宽带一直没弄好,跟电信客服反映了N遍了终于约了个师傅明天早上来迁移宽带,可以结束一个多星期没网的痛苦日子了.这段时间也是各种忙,都一个星期没更新博客了,再不写之前那种状态和激情都要 ...
-
关于学习java虚拟机的知识整理一:jvm内存区域
之前由于考研,对于虚拟机的认识疏忽了太多,现在重新整理回顾一下. 如上图所示,jvm的内存区域(运行时数据区)共分为5处:方法区(Method Area).虚拟机栈(vm Stack).本地方法栈(N ...
-
《实战Java虚拟机》,最简单的JVM入门书,京东活动,满200就减100了,该出手了
#京东满200—100单# 图书放血大卖了 <实战Java虚拟机>http://item.jd.com/11670385.html 参加京东满200减 100的大促,就在6.1这一天,仅此 ...
-
《深入理解java虚拟机》笔记(7)JVM调优(分代垃圾收集器)
以下配置主要针对分代垃圾回收算法而言. 一.堆大小设置 年轻代的设置很关键 JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用 ...
-
Java虚拟机详解(五)------JVM参数(持续更新)
JVM参数有很多,其实我们直接使用默认的JVM参数,不去修改都可以满足大多数情况.但是如果你想在有限的硬件资源下,部署的系统达到最大的运行效率,那么进行相关的JVM参数设置是必不可少的.下面我们就来对 ...
随机推荐
-
python之路十二
本节内容 数据库介绍 mysql 数据库安装使用 mysql管理 mysql 数据类型 常用mysql命令 创建数据库 外键 增删改查表 权限 事务 索引 python 操作mysql ORM sql ...
-
docker 私有镜像管理工具harbor 安装
因为各种原因,官方的离线安装包下载比较费事,经常不成功,所以通过分部安装解决问题 1. docker yum install libdevmapper* -y -H tcp://0.0.0.0:237 ...
-
函数buf_LRU_free_block
/******************************************************************//** Try to free a block. If bpag ...
-
策略模式-Strategy(Java实现)
策略模式-Strategy 在策略模式中,一个类(策略使用者)可以更改自己的执行策略. 比如以排序算法为例子, 多种排序算法都归属于排序算法, 但是实现的算法细节不同, 使用者可以很轻松地替换策略, ...
-
bzoj 1415
莫名互测题... 这题一看就是期望dp,可是不会转移,所以考试写50分暴力走人... #include <cstdio> #include <cmath> #include & ...
-
Python入门 模块
module 模块 atestmodule.py #!/usr/bin/env python3 # -*- coding: utf-8 -*- 'a test module' def addFunc( ...
-
Spring 学习01
一.Spring概念 1 spring是开源的轻量级框架 2 spring核心主要两部分: (1)aop:面向切面编程,扩展功能不是修改源代码实现 (2)ioc:控制反转, - 比如有一个类,在类里面 ...
-
Cocos2d-x移植Android 常见问题处理办法
1.函数.变量出现"could not be resolved "问题 出现此问题通常是没有找到cocos2d-x声明的头文件.在eclipse将cocos2d的头文件文件夹引入. ...
-
51nod 1052 (dp)
最大M子段和 N个整数组成的序列a[1],a[2],a[3],…,a[n],将这N个数划分为互不相交的M个子段,并且这M个子段的和是最大的.如果M >= N个数中正数的个数,那么输出所有正数的和 ...
-
hdu-Coins
http://acm.hdu.edu.cn/showproblem.php?pid=2844 Problem Description Whuacmers use coins.They have coi ...