# :-: JVM性能调优
* [一、JVM和系统调用之间的关系](https://www.kancloud.cn/zlt2000/microservices-platform/989551#JVM_1)
* [二、JVM常用内存设置](https://www.kancloud.cn/zlt2000/microservices-platform/989551#JVM_6)
* [三、垃圾回收机制](https://www.kancloud.cn/zlt2000/microservices-platform/989551#_11)
* [四、垃圾回收器](https://www.kancloud.cn/zlt2000/microservices-platform/989551#_17)
* [五、JVM优化目标](https://www.kancloud.cn/zlt2000/microservices-platform/989551#JVM_21)
* [六、JVM参数设置例子](https://www.kancloud.cn/zlt2000/microservices-platform/989551#JVM_27)
## 一、JVM和系统调用之间的关系
![](https://box.kancloud.cn/0b7ead804a1c0ad99a5c72d53775227f_652x625.png)
> 方法区和堆是所有线程共享的内存区域;而java栈、本地方法栈和程序计数器是运行是线程私有的内存区域。
## 二、JVM常用内存设置
![](https://img.kancloud.cn/81/28/8128f56458ac53d496d0d7a18f75ba61_2256x1058.png)
> jdk1.8后`prmSize`替换为`metaspaceSize`
## 三、垃圾回收机制
![](https://box.kancloud.cn/20f61812fe7ebd758273caad400e7586_1010x418.png)
* 优先在Eden区分配。当Eden区没有足够空间分配时, VM发起一次Minor GC,将Eden区和其中一块Survivor区内尚存活的对象放入另一块Survivor区域。如MinorGC时survivor空间不够,对象提前进入老年代,老年代空间不够时进行Full GC
* 大对象直接进入老年代,避免在Eden区和Survivor区之间产生大量的内存复制, 此外大对象容易导致还有不少空闲内存就提前触发GC以获取足够的连续空间
## 四、垃圾回收器
![](https://box.kancloud.cn/b13f9fea4441821a7511457e3e6d10a8_892x563.png)
## 五、JVM优化目标
1. 调整堆内存的比例,尽量避免或减少FULL GC
2. 选择合适的垃圾回收器
3. 增加日志信息,用于应用出问题后还原事故现场
## 六、JVM参数设置例子
这个是4核8G服务器的jvm配置,JDK1.8
~~~
-Xmx5440M -Xms5440M \
-XX:MaxMetaspaceSize=512M -XX:MetaspaceSize=512M \
-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:+ParallelRefProcEnabled \
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$1_dump.hprof \
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:$1_gc_trace.log
~~~
> \-XX:+UseG1GC:使用G1回收器(jdk1.7以上、2G以上堆内存推荐使用)-XX:MaxGCPauseMillis: 设置GC的最大暂停时间(ms)
- 项目介绍
- 项目声明
- 项目简介
- 架构设计
- 项目亮点功能介绍
- 技术栈介绍
- 核心功能
- 运行环境
- 项目更新日志
- 文档更新日志
- F&Q
- 部署教程
- 环境准备
- JDK安装
- JDK1.8,17共存
- maven
- 分布式缓存Redis
- 单机版
- 集群
- 注册&配置中心alibaba/nacos
- 介绍
- Nacos安装
- Nacos配置中心
- Nacos注册发现
- Nacos生产部署方案
- 服务监控-BootAdmin
- 基本介绍
- 如何使用
- 整合Admin-Ui
- 客户端配置
- 链路追踪
- 基本介绍
- SkyWalking-1
- Skywalking-1
- 消息队列
- Kafka
- docker安装kafka
- Linux集群
- Maven私服
- nexus安装部署
- nexus使用介绍
- 全文搜索elasticsearch
- windows集群搭建
- docker安装es
- ElasticHD
- linux集群部署
- 统一日志解决方案
- 日志解决方案设计
- 介绍与相关资料
- ELK安装部署
- elasticsearch 7.5
- logstash-7.5
- kibana-7.5
- filebeat
- 服务监控-Prometheus
- Prometheus安装配置
- Prometheus介绍
- grafana
- 持续集成部署CICD
- 自动化部署Jenkins
- 安装部署win
- 打包发布远程执行
- 安装部署linux
- jenkins+gitlab+docker容器化工程自动化部署
- Git
- CICD说明
- 阿里云效
- CentOS_MYSQL安装
- docker
- 安装
- Docker安装Nginx
- Docker部署启动springboot
- dockerCompose
- harbor
- Docker私有镜像仓库
- Portainer
- Docker远程连接设置
- 打包工程
- 必要启动模块
- 核心模块
- 登录认证
- 缓存功能
- 日志模块
- 分布式锁
- 消息队列
- 异常处理
- 系统接口
- 参数验证
- es检索
- 数据导出
- 系统设计
- 系统总体架构
- 扩展模块(可选)
- 限流熔断alibaba/sentinel
- 使用Sentinel实现gateway网关及服务接口限流
- Sentinel使用Nacos存储规则及同步
- 服务调用Feign
- Feign基本介绍
- 如何使用
- 负载均衡
- 请求超时
- 请求拦截器
- 分布式任务调度
- XXL-JOB
- 分布式事务
- TX-LCN
- Seata
- Seata原理解析
- 数据库分库分表
- swagger文档
- 分布式ID生成器解决方案
- 服务网关CloudGateway
- 基本介绍
- 使用网关
- 路由配置
- 全局过滤器
- 服务认证授权架构设计
- 认证服务流程
- 授权服务流程
- 系统幂等性设计与实践
- 分布式日志链路跟踪
- 实时搜索系统设计
- 应用性能
- 压力测试工具
- Apache JMeter介绍和安装
- ApacheJMeter使用
- JVM
- JVM性能调优
- 常见JVM内存错误及解决方案
- JVM 分析工具详解
- Spring Cloud性能调优
- Linux运维
- Linux 常用命令
- Linux开启端口