当前位置: 首页 > news >正文

【学习笔记】深入理解Java虚拟机学习笔记——第5章 调优案例分析与实战

第5章 调优案例分析与实战

5.1 概述

5.2 案例分析

5.2.1 大内存硬件上的程序部署策略

为防止大内存一次Full GC时间过长,可以考虑使用响应速度优先的垃圾回收器,还可以通过将一个10GB堆内存的应用分解为5个2GB堆内存应用,并通过负载均衡来调用,以减小堆内存,加快Full GC速度,加快响应时间

5.2.2 集群间同步导致的内存溢出

分析内存转储快照,以发现占用大量内存的对象以及具体原因。

5.2.3 堆外内存导致的溢出错误

除java方法区和堆内存外,java运行所用内存:P186
NIO会用到大量堆外内存
【如发现OOM异常堆栈中出现unsafe等关键信息,可以尝试将堆内存调小,为直接内存创造更大可用范围,或手动进行FullGC,让JVM顺便对直接内存进行回收】

5.2.4 外部命令导致系统缓慢

java执行shell脚本会创建进程,非常消耗资源,尽量避免,使用其他方式替代,注意观察程序运行问题是自身引起还是被系统其他因素影响

5.2.5 服务器虚拟机进程崩溃

web请求生成大量socket,无法及时返回,超过jvm承受能力后会导致崩溃

5.2.6 不恰当数据结构导致内存占用过大

使用HashMap存储<Long,Long>只有18%空间利用率

5.2.7 由Windows虚拟内存导致的长时间停顿

虚拟机内存会影响程序性能

5.2.8 由安全点导致长时间停顿

【int类型的循环不会让线程进入安全点,需要改为long类型】

5.3 实战:Eclipse运行速度调优

5.3.1 调优前的程序运行状态

5.3.2 升级JDK版本的性能变化及兼容问题

Eclipse有自己的Bug list网站,而我们也要提升自己的解决问题的能力。P196

5.3.3 编译时间和类加载时间的优化

java编译后形成.class字节码,需要解释运行,c/c++编译形成二进制文件,可直接运行,但java即时编译,形成的二进制代码一般更高效

5.3.4 调整内存设置,控制垃圾收集频率

根据机器与应用实际情况调整

5.3.5 选择收集器降低延迟

根据实际情况确定垃圾回收线程数

http://www.xdnf.cn/news/935461.html

相关文章:

  • 第12篇:数据库中间件日志设计与追踪系统落地实践
  • MySQL知识回顾总结----数据库基础
  • 计算机常用快捷键分类汇总,涵盖 Windows、macOS 以及通用软件场景
  • STM32[笔记]--1.前置准备
  • AI系统的构建
  • 基于React 的 AntD 库进行前端开发过程中的问题汇总
  • 空间转录组数据下游分析(二)
  • 玄机——某次行业攻防应急响应(带镜像)
  • Java求职者面试指南:计算机基础与源码原理深度解析
  • 智警杯备赛--机器学习算法实践
  • 深度学习登上Nature子刊!特征选择创新思路
  • C# 表达式和运算符(表达式和字面量)
  • 【JavaScript-Day 35】从 window 到 location,一文掌握浏览器对象模型 BOM
  • Web前端开发:JavaScript中的eval()函数
  • triton学习笔记7: GEMM相关
  • uniapp跳转到webview组件的时候,要注意:移除所有不可见字符(包括零宽空格)
  • Linux系统之grub-mkrescue详解
  • vue.js not detected解决方法
  • Oracle实用参考(13)——Oracle for Linux物理DG环境搭建(2)
  • 第四篇:服务商(工人端)-02服务商入驻审核
  • SCADA|RESTful学习,Apipost通过GET获取KingSCADA实时数据
  • 软件测试—学习Day11
  • HTTP 重定向详解
  • Vulkan 3D Tiles渲染器开发笔记1-脚手架搭建
  • Linux nano命令的基本使用
  • 代码随想录算法训练营第60期第六十天打卡
  • 十一(2) 类的实例化
  • 打卡第48天
  • 系统思考:跳出症状看全局
  • 第35周综合就业指南