黑马JVM总结(十九)

(1)GC调优1

通过官网查看查看JVM的参数: 

 

可以使用java命令查看当前环境下的虚拟机参数:

学会使用一些工具如前面学的jmap ,jconsole等等工具

(2)GC调优2

垃圾回收调优只是众多调优中的一个方向,想要你的应用程序有更多的提升,要从各个领域进行分析进行调优,不光是GC这块,只是GC这块影响比较明显,可能影响你的网络延迟,因为一旦发生了Stop the World你的应用程序响应时间就会变长 ,下面的也是一种调优的方向:

 

对垃圾回收这块确定的调优 目标:需要确定自己的应用程序是用来干什么的,到底是做一些科学运算,还是做互联网项目,如果是科学运算追求的是高吞吐量,延长一点响应时间不是紧要的,这种情况下,就要追求一种高吞吐量的垃圾回收器,如果做的是互联网项目,那么响应时间呢,就是一个非常重要的指标了,因为每次的垃圾回收呢延长了你的响应时间,那么就会给用户造成不好的体验 。确定目标后选择合适的垃圾回收器

高吞吐量的垃圾回收器没有太多的选择只有一个ParallelGC

如果是低延迟响应时间优先可以选择CMS、G1、ZGC

jdk9中使用的是G1,它比CMS更好,相当于集成了CMS和ParallelGC之长特别适合管理超大的堆内存,可以做到低延迟,也可以想ParallelGC的吞吐量,确定是以吞吐量为目标或者响应时间为目标

ZGC是jdk12提出的一个体验的垃圾回收

还有一种叫做Zing的垃圾回收器,它对外宣称是0停顿,几乎没有Stop the World的时间,可以管理超大的内存

(3)GC调优3

在学jdbc的时候一下子查询出所有表的数据,把大量的数据加载到堆内存里 ,这样的堆内存在大,也经受不了多个这样的sql语句把大量的数据加载到堆内存里,像这种应该加一个limit限制一下返回的记录总数

另外一点数据是否臃肿:加载了一些不必要的数据比如说查询用户,来一个表连接把用户的信息全部查询出来,比如用户得详情,用户订单等等,数据查询出来以后不一定都用得上,在一次响应里只用到了一部分数据而不是所有,很多不是要什么查什么,而是一次性的把数据都查询出来,就可能造成内存得浪费

对象的大小:包装类比基本类型占用的大,这样呢可以从一方面来减少GC的压力,这样的对象呢极少成多,能节约的内存是相当可观的

存在内存泄露:错误的做法是定义了一个静态的Map变量,然后不断的想map中存放对象,这样呢就会造成内存可能溢出,最后可能发生GC,甚至内存溢出

像这种长时间存活的对象建议用可以使用软弱引用,软弱引用在内存吃力时做一下回收

像这种类似缓存的数据不建议使用java中的实现,因为毕竟不是专业做缓存的,可以使用第三方的缓存实现像Redis,他们都会考虑对象的过期,第三方的缓存实现不会造成对java堆的压力,

(4)GC调优_新生代1

当new一个对象时首先会在伊甸园中分配买这个分配速度是非常非常快的,每个线程呢都会在伊甸园中分配一个私有的区域,叫做TLAB这个区域,当new一个对象时首先在TLAB中看有没有个内存可以分配,有的话在这个区域呢做一个分配,因为我们对象的分配也有一个线程安全的问题比如说线程1用这个内存,在分配还没有结束时线程2也要这个内存,机会造成问题,因此需要做一个线程的并发安全保护,能不能减少线程对内存分配的一个冲突呢?TLAB线程局部缓冲区,它可以让每个线程用自己私有这块伊甸园内存做对象的分配,这样呢即是多个线程创建对象时也不会造成对内存的一个干扰 

死亡对象的回收代价为0,我们知道新生代垃圾回收采用的是复制算法,复制算法的特点是我要把伊甸园,幸存区From中的幸存对象复制到幸存区To中去,复制完之后呢伊甸园的的内存都释放出来了因此呢死亡对象回收代价0

新生代的幸存对象很少又采用复制算法导致Minar时间很短

(5)GC调优_新生代2

怎么做新生代的垃圾调优呢?不就是把新生代调大一些嘛?但是调大情况下会出现一些问题:

太小容易触发Minar GC 太大了老年代不足容易触发Full GC时间更长

 

(6)GC调优_新生代3

尽可能的调大新生代:我们知道复制做占用的时间也是较多,因为涉及到占用内存块的移动,更新其他引用块的地址这个更耗时一些,但是因为新生代只有 少量的对象存活,那么复制时间也相对较 短,而标记时间较复制时间显得不是那么重要了,新生代调大主要的耗费还是在复制上,那么新生代真的很大也不会有明显的下降

一般设置下面的大小:一次响应产生的对象*并发量 

(7)GC调优_新生代_幸存区

幸存区的对象:下面两种

当前存活的对象:声明周期较短,下一次垃圾回收就被回收掉了,但是现在还在使用它不能回收 ,暂时不能回收

需要晋升的对象:将来可能被晋升的对象,大家都在引用它,但是它的寿命还不够没有达到阈值,暂时存在幸存区

打下需要融那这两类对象。

幸存区如果很小那么jvm会动态调整晋升的阈值 ,也许有些对象寿命还不够轮不到它晋升,但是由于幸存区的内存太少,那么我们会提前把幸存区的对象晋升到老年代中去 ,比如这个存活时间较短的对象,晋升了那么就以为这只有等到老年代空间不足时才能回收,变相的延长了对象的存活时间

我们希望幸存时间短的对象留在幸存区里面,下次垃圾回收把它回收掉,

另一方面老长时间存活的对象,应该被尽快被提升,可以设置晋升阈值

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/85417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读高性能MySQL(第4版)笔记14_备份与恢复(中)

1. 在线备份 2. 离线备份 2.1. 关闭MySQL做备份是最简单、最安全的 2.2. 所有获取一致性副本的方法中最好的 2.3. 损坏或不一致的风险最小 2.4. 根本不用关心InnoDB缓冲池中的脏页或其他缓存 2.5. 不需要担心数据在尝试备份的过程中被修改 2.5.1. 服务器不对应用提供访问…

【动态规划刷题 17】回文子串 最长回文子串

647. 回文子串 链接: 647. 回文子串 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串,即使是由…

zookeeper + kafka

Zookeeper 概述 Zookeeper是一个开源的分布式服务管理框架。存储业务服务节点元数据及状态信息,并负责通知再 ZooKeeper 上注册的服务几点状态给客户端 Zookeeper 工作机制 Zookeeper从设计模式角度来理解: 是一个基于观察者模式设计的分布式服务管理框架&…

Learn Prompt-GPT-4:能力

GPT-4能力大赏​ 常识知识推理​ 一个猎人向南走了一英里,向东走了一英里,向北走了一英里,最后回到了起点。他看到了一只熊,于是开枪打了它。这只熊是什么颜色的? 答案是白色,因为这种情况只可能发生在北…

Gin学习记录4——Controller和中间件

一. Controller 用不同的Controller可以实现业务的分类,不同类型的请求可以共用同一套中间件 1.1 单文件Controller 几乎等同于函数封装,直接将ctrl的代码写入到一个文件里然后调用: package adminimport ("net/http""git…

数据结构与算法(六)--链表的遍历,查询和修改,删除操作

一、前言 上篇文章我们了解了链表的概念以及链表底层的搭建以及向链表中添加元素的操作。本次我们继续学习链表剩余的操作:遍历,查询和修改、删除操作。 二、链表查询以及遍历 ①获得链表的第index(0-based)个位置的元素(不常用&#xff0…

MySQL详细案例 1:MySQL主从复制与读写分离

文章目录 1. MySQL主从复制1.1 使用场景1.2 MySQL的复制类型1.3 主从复制的作用1.4 主从复制的工作过程1.5 实现MySQL主从复制1.5.1 前置准备1.5.2 主服务器mysql配置1.5.3 从服务器1 mysql配置1.5.4 从服务器2 mysql配置1.5.5 测试 1.6 主从复制的3种同步模式1.6.1 异步复制&a…

微信小程序底部安全区域高度获取

CSS 属性 safe-area-inset-bottom safe-area-inset-bottom 就是安全区的高度 padding-bottom:env(safe-area-inset-bottom); wx.getSystemInfoSync() wx.getSystemInfoSync()可以获取系统信息 let system wx.getSystemInfoSync() let bottomSafe system.screenHeight -…

一招解除csdn复制限制

先看这个代码 python读取英文pdf翻译成中文pdf文件导出代码 想要复制代码,csdn有限制怎么办(csdn流氓,无耻) 解除方法 ctrlu 看效果

Linux启动过程详解 Xmind导图笔记

参考大佬博客: 简要描述linux系统从开机到登陆界面的启动过程 Linux启动过程详解 Bootloader详解 来源:从BIOS开始画图了解Linux启动过程——老杨Linux

TSINGSEE视频AI智能分析技术:水泥厂安全生产智能监管解决方案

一、方案背景 随着人工智能技术的快速发展以及视频监控系统在全国范围内的迅速推进,基于AI视频智能分析技术的智能视频监控与智慧监管系统,也已经成为当前行业的发展趋势。在工业制造与工业生产领域,工厂对设备的巡检管理、维护维修、资产管…

【全志V3s】SPI NAND Flash 驱动开发

文章目录 一、硬件介绍V3s的启动顺序 二、驱动支持U-Boot驱动主线 Linux 驱动已经支持 三、烧录工具 xfel四、构建U-Boot(官方的Uboot)先编译一下开始spi nand flash 代码层面的适配修改menuconfig配置ARM architecture配置Support for SPI Nand Flash o…

rabbitMQ (1)

文章目录 1. RabbitMQ 介绍1.1 几个重要概念1.2 RabbitMq 的工作原理 2 RabbitMQ 安装3. RabbitMQ 入门操作3.1 添加依赖3.2 生产者代码3.3 消费者代码 4. Work Queues5. 管理端页面创建队列 1. RabbitMQ 介绍 引用 : RabbitMQ 是一个消息中间件:它接受…

Xilinx FPGA 程序固化重新上电程序不运行的问题

问题描述 FPGA直接下载bit文件,功能正常。 FPGA擦除FLASH,烧写FLASH,正常。 电源断电,重新上电,FALSH里面的程序没有启动,FPGA程序没有跑起来。–FLASH启动不正常。 解决办法 在XDC约束文件里边增加约束: ## Configuration options, can be used for all designs se…

[Linux入门]---Linux项目自动化构建工具-make/Makefile

目录 1.背景2.make指令输入make默认为Makefile文件第一条指令执行Makefile文件对gcc指令特殊处理及原理特殊符号 3.总结 1.背景 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数,其按类型、功能、模块分别放…

CNN(九):Inception v3算法实战

🍨 本文为🔗365天深度学习训练营 中的学习记录博客 🍖 原作者:K同学啊|接辅导、项目定制 1 理论基础 Inception v3论文 Inception v3由谷歌研究员Christian Szegedy等人在2015年的论文《Rethinking the Inception Architecture f…

Jmeter集成到jenkins

Jmeter集成到Jenkins Jmeter集成到Jenkins. 1 软件下载... 4 一:环境配置... 4 1.JDK安装:... 4 配置JDK环境变量... 5 2.Jmeter安装:... 5 配置jmeter环境变量... 6 3.安装Ant 7 配置Ant环境变量... 7 4.Git安装:... 8 配置git环境…

Untiy UDP局域网 异步发送图片

同步画面有问题,传图片吧 using System.Text; using System.Net.Sockets; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; using System.Net; using System; using System.Threading.Tasks; using Sy…

java内嵌浏览器CEF-JAVA、jcef、java chrome

java内嵌浏览器CEF-JAVA、jcef、java chrome jcef是老牌cef的chrome内嵌方案,可以进行java-chrome-h5-桌面开发,下面为最新版本(2023年9月22日10:33:07) JCEF(Java Chromium Embedded Framework)是一个基于…

Cesium 空间量算——生成点位坐标

文章目录 需求分析1. 点击坐标点实现2. 输入坐标实现 需求 用 Cesium 生成点位坐标,并明显标识 分析 以下是我的两种实现方式 第一种是坐标点击实现 第二种是输入坐标实现 1. 点击坐标点实现 //点位坐标getLocation() {this.hoverIndex 0;let that this;this.view…