Java性能调优System的gc垃圾回收方法

news2024/11/19 1:19:07

java性能调优System的gc垃圾回收方法

java性能调优System的gc垃圾回收方法示例解

一、什么是System.gc()?

System.gc()是用Java,C#和许多其他流行的高级编程语言提供的API。当它被调用时,它将尽最大努力从内存中清除垃圾(即未被引用的对象)。名词解释:GC,Garbage Collection,垃圾回收,下文会经常使用。

二、谁可以调用System.gc()?

System.gc() 可以从应用程序堆栈的各个部分调用:

  • 您自己开发的应用程序可以显式的调用 System.gc() 方法。
  • System.gc() 也可以由您的第三方库,框架触发。
  • 可以由外部工具(如VisualVM)通过使用JMX触发
  • 如果您的应用程序使用了RMI,RMI会定期调用 System.gc() 。

三、调用System.gc()有什么弊端?

当 System.gc() 或 Runtime.getRuntime().gc()API被调用时,将触发完整的GC事件。在GC完成之前,整个JVM将冻结(即正在运行的所有服务将被暂停),通常完整的GC需要很长时间才能完成。因此在不合适的时间运行GC,将导致不良的用户体验,甚至是崩溃。JVM具有复杂的算法,该算法始终在后台运行,进行所有计算以及有关何时触发GC的计算。当您显式调用System.gc()调用时,所有这些计算都将被抛掉。

四、哪些场景适合显式调用System.gc()?

GC操作应该由JVM自行控制,在绝大部分的场景都不建议程序员手动写代码显式进行System.gc()操作,但是也不排除其中个别例外:在我们开发多个微服务时,每个服务都有多个备份节点。在非业务高峰时段,我们可以从微服务-负载均衡的节点池中取出其中一个JVM实例。然后通过该JVM上的JMX显式触发System.gc()调用,一旦GC事件完成并且从内存中清除了垃圾,将该JVM放回到微服务-负载均衡的节点池中。当然这个过程需要很好的微服务管理及服务发布机制配合,这样既能保证JVM垃圾内存的有效清理,又不影响业务的正常运行。

五、如何检测您的应用程序正在进行System.gc()?

如: System.gc() 可以从多个渠道进行的调用,而不仅仅是从您的应用程序源代码进行的调用。因此,搜索您的应用程序代码System.gc() 字符串,不足以知道 GC是否正在被调用。这就构成了一个挑战:如何检测应用程序是否正在进行垃圾回收?这就是GC日志派上用场的地方。

// java 8 启用GC日志:
// -XX: PrintGCDetails -Xloggc:<gc-log-file-path> ,例如下面这行代码
-XX: PrintGCDetails -Xloggc:/opt/tmp/myapp-gc.log
// java 9 启用GC日志:-Xlog:gc*:file=<gc-log-file-path> ,例如下面这行代码
-Xlog:gc*:file=/opt/tmp/myapp-gc.log

建议始终在所有生产服务器中始终启用GC日志,因为它有助于您排除故障并优化应用程序性能。启用GC日志只会增加微不足道的开销。还可以将您的GC日志上传到垃圾收集日志分析器工具,例如GCeasy,HP JMeter等。这些工具将生成丰富的垃圾收集分析报告。

上图摘自GCeasy生成的报告。

六、如何禁止GC显式调用或调整调用GC的频率?

如果我们就是想避免程序员显式调用GC,避免不成熟的程序员在不合适时间调用GC,避免人为造成的GC崩溃,该怎么办?可以通过如下方法:

搜索和替换

在代码库中搜索 System.gc() 和Runtime.getRuntime().gc()。如果看到匹配项,则将其删除。但是这种方法无法避免第三方库、框架或通过外部源进行调用,那么参考第二种方法。

通过JVM参数强制禁止

通过传递JVM参数 -XX: DisableExplicitGC来强制禁止显式调用。这种方式强制、有效,应用程序内的任何GC显式代码调用System.gc() 都将被禁止生效。JVM自身的GC策略不受此参数影响,只禁止人为的触发GC。

RMI

如果您的应用程序正在使用RMI,则可以控制GC调用的频率 。启动应用程序时,可以使用以下JVM参数配置该频率:

-Dsun.rmi.dgc.server.gcInterval=n

-Dsun.rmi.dgc.client.gcInterval=n

这些属性的默认值在

  • JDK 1.4.2和5.0是60000毫秒(即60秒)
  • JDK 6和更高版本是3600000毫秒(即60分钟)

如果您的应用主机内存资源非常富余,您可以将这些属性设置为很高的值,以便可以将GC带来的对应用程序的影响最小化。这也是应用程序性能优化的一种方式之一。

 

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

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

相关文章

ABHD5 调控细胞自噬依赖的嘧啶合成介导结肠癌对5-FU 的药物敏感性改变

​ 发表期刊&#xff1a;Nature Communications 影响因子&#xff1a;12.353 发表时间&#xff1a;2019年 合作单位&#xff1a;第三军医大学附属西南医院 今天百趣代谢组学将给大家分享Nature Communications上的一篇文章&#xff1a;ABHD5 blunts the sensitivity of col…

这 88 道阿里高级岗面试题,刷掉了 80% 以上的 Java 程序员

2022&#xff0c;可谓是招聘面试最难季。不少大厂&#xff0c;如腾讯、字节的招聘名额明显减少&#xff0c;面试门槛却一再拔高&#xff0c;如果不用心准备&#xff0c;很可能就被面试官怼得哑口无言。今天不谈其它&#xff0c;就说说我作为面试官面试的那些事儿。 从某电商项目…

JVM监控及诊断工具之命令行篇

文章目录1. 概述2. jps&#xff1a;查看正在运行的Java进程3. jstat&#xff1a;查看JVM统计信息4. jinfo&#xff1a;实时查看和修改JVM配置参数5. jmap&#xff1a;导出内存映像文件&内存使用情况6、jhat&#xff1a;JDK自带堆分析工具7 jstack&#xff1a;打印JVM中线程…

基于微信小程序的旅游系统-计算机毕业设计

项目介绍 随着人民生活水平的提高,旅游业已经越来越大众化,而旅游业的核心是信息,不论是对旅游管理部门、对旅游企业,或是对旅游者而言,有效的获取旅游信息,都显得特别重要.自助定制游将使旅游相关信息管理工作规范化、信息化、程序化,提供旅游景点、旅游线路,旅游新闻等服务本…

_5LeetCode代码随想录算法训练营第五天-C++哈希表

_5LeetCode代码随想录算法训练营第五天-C哈希表 LeetCode 242.有效的字母异位词LeetCode 349.两个数组的交集LeetCode 202.快乐数LeetCode 1.两数之和 本文截图参考代码随想录&#xff1a;https://programmercarl.com/ 哈希表 定义 哈希表是根据键值而直接进行访问的数据结…

shell 创建子进程及并行延时执行命令方法

shell 创建子进程方法 1. 什么是shell子进程 子进程&#xff0c;是从父子进程的概念出发的&#xff0c;unix操作系统的进程从init进程开始&#xff08;init进程为1,而进程号0为系统原始进程&#xff0c;以下讨论的进程原则上不包括进程0)均有其对应的子进程&#xff0c;就算是…

POI通过模板导出excel(包含表头合并处理)

最近接触到比较多poi相关的需求&#xff0c;总结一下通过模板导出以及表头合并的一些复杂情况处理。 简单使用的话可以参考下我之前写的 POI实现导入导出excel 目录&#xff1a;1、POI通过模板导出2、POI表头合并处理1、POI通过模板导出 其实通过模板导出的原理&#xff0c;无…

2021 年年度最佳开源软件

Svelte https://svelte.dev/ Svelte 是一种全新的构建用户界面的方法。传统框架如 React 和 Vue 在浏览器中需要做大量的工作&#xff0c;而 Svelte 将这些工作放到构建应用程序的编译阶段来处理。 与使用虚拟&#xff08;virtual&#xff09;DOM 差异对比不同。Svelte 编写的…

DAla-Gly-Gly,77286-90-9

Substrate for bacterial D-aminopeptidases.细菌d -氨基肽酶的底物。 编号: 191616中文名称: 三肽DAla-Gly-Gly英文名: DAla-Gly-GlyCAS号: 77286-90-9单字母: H2N-DAla-GG-OH三字母: H2N-DAla-Gly-Gly-COOH氨基酸个数: 3分子式: C7H13N3O4平均分子量: 203.2精确分子量: 203.0…

虚拟现实 VR 碰撞 3D 可视化,图扑打造一体化管控平台

工信部《虚拟现实产业发展白皮书 5.0 》中明确提出&#xff1a;“通过财政资金促进虚拟现实技术产业化&#xff0c;支持面向工业、文化、教育等重点行业的虚拟现实技术应用”。 虚拟现实 VR 技术以用户体验视角为中心&#xff0c;跟踪反馈在 3D 场景中的动作&#xff0c;借助软…

kali工具学习

目录 1.waybackurls 网络爬虫&#xff0c;url搜索 2.wafw00f 检测网站用了什么waf 3.theHarvester ip、邮箱、host搜集 4. oneforall 子域名搜集 5. nmap kali自带的扫描工具 6. whatweb 指纹查询 1.waybackurls 网络爬虫&#xff0c;url搜索 2.wafw00f 检测网…

阿里巴巴注册中心nacos

目录 一、配置中心介绍 1、Spring Cloud Config 2、Nacos替换Config &#xff08;1&#xff09;应用场景 二、读取Nacos配置中心的配置文件 1、在Nacos创建统一配置文件 2、以service-statistics模块为例 3、补充&#xff1a;springboot配置文件加载顺序 三、名称空间…

网络实验之VRRP协议

一、VRRP协议简介 虚拟路由冗余协议(Virtual Router Redundancy Protocol&#xff0c;简称VRRP)是由IETF提出的解决局域网中配置静态网关出现单点失效现象的路由协议。VRRP是一种路由容错协议&#xff0c;也可以叫做备份路由协议。一个局域网络内的所有主机都设置缺省路由&…

MySQL入门阶段这一篇就够了-学习笔记(手敲1.5万字)

前言 虽然在大一下学期&#xff0c;就已经接触到了MySQL&#xff0c;但是那个时候只是会用MySQL进行增删改查&#xff0c;在大三上学期&#xff0c;尝试投简历寻找实习时&#xff0c;对方公司对于程序员的MySQL水平有很高的要求&#xff0c;所以我开始系统化的学习MySQL。顺便…

想写出复用性强的组件?快来试试 Storybook 吧

简介 Storybook 是 UI 组件的开发环境&#xff0c;它允许开发者浏览组件库&#xff0c;查看每个组件的不同状态&#xff0c;以及交互地开发和测试组件。 Storybook 可帮助你记录组件以供重用&#xff0c;并自动对组件进行可视化测试以防止出现错误。 开始 在对 Storybook 有…

halcon measure_pos和measure_pairs详解

这两个算子作为halcon一维测量的关键&#xff0c;看了这两个算子的多个博客&#xff0c;也没搞清楚里面几个参数的意义和测量的原理&#xff0c;决定自己详细试一下&#xff0c;将测试的过程详细记录下来&#xff0c;供以后需要参考的朋友使用&#xff0c;本文将从以下几个点说…

使用bat脚本运行python脚本,bat出现闪退,怎么解决?

前言 本文是该专栏的第4篇,后面会持续分享python的各种干货知识,值得关注。 工作上为了方便,很多时候我们会设置一个bat脚本来双击运行python脚本,这样既方便又能在工作上节约大量时间。 但是,你或许会碰到这样的情况,当双击bat脚本的时候,bat窗口界面会直接出现闪退关…

DM8设置自动备份,达梦数据库,自动备份。详细步骤。常用命令,启动关闭数据库,查看DMAP状态

常用命令 DmServiceDAMENG.service改成自己bin目录下文件名 运维常见问题&#xff0c;官方文档 注意事项 登录客户端工具&#xff0c;一定要使用SYSDBA用户进行下面的客户端操作 登录数据库主机&#xff0c;一定要使用安装数据库时创建的dmdba用户 定时备份前请先配置本地…

引入新模块都在用这个注解,它是如何生效的?|原创

本文讲解了Enable 类注解是如何生效的以及其核心注解 Import 的原理&#xff0c;并且用 EnableAsync 注解来举例。点击上方“后端开发技术”&#xff0c;选择“设为星标” &#xff0c;优质资源及时送达在项目开发的过程中&#xff0c;我们会遇到很多名字为 Enablexxx 的注解&a…

OA系统解决方案

一、OA系统解决方案介绍 OA系统&#xff0c;即办公自动化系统&#xff08;Office Assistant简称OA&#xff09;&#xff0c;它是一个集成了企业信息发布、公文与信息管理、公文处理、知识管理、内部通讯、协同办公等办公与管理应用功能一体的协同 办公系统。OA系统解决方案则是…