我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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.io工具报告的GC原因

上图摘自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带来的对应用程序的影响最小化。这也是应用程序性能优化的一种方式之一。

以上就是java性能调优System的gc垃圾回收方法的详细内容,更多关于java性能调优Systemgc垃圾回收的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PHP接口性能优化之GC(垃圾回收)机制调优(PHP接口中GC机制的性能优化方法)

PHP接口性能优化之GC(垃圾回收)机制调优本篇文章重点介绍了优化PHP接口中GC(垃圾回收)机制的方法,以提高性能。优化方法包括:减少不必要的对象创建优化对象引用禁用延迟GC调整GC设置使用特定GC算法利用第三方扩展(如igbinary、xcache)通过这些优化,可以显著提高PHP接口在处理大量数据或复杂计算时的响应速度。
PHP接口性能优化之GC(垃圾回收)机制调优(PHP接口中GC机制的性能优化方法)
2024-04-02

详解 Java性能优化和JVM GC(垃圾回收机制)

Java的性能优化,JVM GC(垃圾回收机制)在学习Java GC 之前,我们需要记住一个单词:stop-the-world 。它会在任何一种GC算法中发生。stop-the-world 意味着JVM因为需要执行GC而停止了应用程序的执行
2023-06-02

Java垃圾回收调优的方法是什么

这篇文章主要讲解了“Java垃圾回收调优的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java垃圾回收调优的方法是什么”吧!性能调优目标要是可确定且可测量的,这非常重要。这些目标
2023-06-17

Java中的垃圾回收机制是如何工作的?如何优化Java的垃圾回收?(Java的垃圾回收器如何运作?有哪些策略可以优化Java的垃圾回收性能?)

Java垃圾回收机制通过根引用扫描、图遍历、标记和清除过程回收不再使用的对象。优化策略包括减少对象分配、使用大对象、避免循环引用、调整GC参数和使用最新JVM版本。监控GC性能并根据特定需求优化策略至关重要。
Java中的垃圾回收机制是如何工作的?如何优化Java的垃圾回收?(Java的垃圾回收器如何运作?有哪些策略可以优化Java的垃圾回收性能?)
2024-04-02

揭秘Java性能调优的奥秘:垃圾回收调优与线程池优化

GC调优和线程池优化是Java性能调优的重要方面。本文将揭秘Java性能调优的奥秘,并详细介绍GC调优和线程池优化的方法。
Java调优2024-11-30

Java应用的垃圾回收优化方法是什么

这篇文章主要讲解了“Java应用的垃圾回收优化方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java应用的垃圾回收优化方法是什么”吧!高性能应用构成了现代网络的支柱。LinkedI
2023-06-17

如何分析Java性能优化中的垃圾回收机制

这篇文章将为大家详细讲解有关如何分析Java性能优化中的垃圾回收机制,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。★JVM 的内存空间  在 Java 虚拟机规范中,提及了如下几种类型的内存
2023-06-02

Go函数性能优化:垃圾回收机制与性能的影响

垃圾回收 (gc) 对 go 函数性能有影响,因为它会暂停程序以回收内存,从而中断执行。优化策略包括:减少分配使用池避免循环中的分配使用预分配的内存profile 应用程序Go 函数性能优化:垃圾回收机制与性能的影响前言垃圾回收 (GC
Go函数性能优化:垃圾回收机制与性能的影响
2024-05-03

掌握这3个技巧,你也可以秒懂JAVA性能调优和jvm垃圾回收

JVM 是一个虚拟化的操作系统,类似于 Linux 和 Window,只是他被架构在了操作系统上进行接收 class 文件并把 class 翻译成系统识别的机器码进行执行,即 JVM 为我们屏蔽了不同操作系统在底层硬件和操作指令的不同。

垃圾收集器的秘密:深入理解JVM性能调优

Java虚拟机(JVM)的自动内存管理是Java开发者的福音,它通过垃圾收集(GC)机制自动回收不再使用的对象,极大地简化了内存管理。然而,不恰当的GC配置或不理想的垃圾收集器选择可能会对应用性能产生负面影响。

java性能优化常见的垃圾收集器有哪些

本文小编为大家详细介绍“java性能优化常见的垃圾收集器有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“java性能优化常见的垃圾收集器有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。常见的垃圾回收器和
2023-07-02

优化Go语言应用性能的内存优化和垃圾回收策略

优化Go语言应用的内存性能和垃圾回收策略可以通过以下几个方面进行改进:1. 降低内存分配:在Go语言中,频繁的内存分配会导致垃圾回收频繁触发。可以通过重用对象、使用对象池、减少临时变量等方式来降低内存分配的频率。2. 使用指针和零拷贝:在一
2023-10-12

提升Go语言应用性能的关键:内存优化与垃圾回收

Go语言的运行性能主要受到两个方面的影响,即内存优化和垃圾回收。下面将介绍一些提升Go语言应用性能的关键技巧。1. 减少内存分配:Go语言的垃圾回收机制会自动回收不再使用的内存,但频繁的内存分配和回收会导致性能下降。可以通过以下几种方式来减
2023-10-12

提升Go语言应用的性能与稳定性——内存优化与垃圾回收

提升Go语言应用的性能与稳定性的一个关键方面是进行内存优化和垃圾回收。Go语言通过自动垃圾回收(GC)机制来管理内存,并通过一些优化技术来减少GC的影响。以下是一些提高Go应用性能和稳定性的内存优化和垃圾回收的建议:1. 减少内存分配:避免
2023-10-08

实现高效的内存管理和垃圾回收器调优:Go语言的方法与技巧

1. 使用合适的数据结构:选择合适的数据结构可以减少内存的占用。例如,使用切片而不是数组可以避免不必要的内存浪费。2. 避免过度分配内存:在代码中避免频繁的内存分配操作。可以使用内存池来重复利用已分配的内存块,避免频繁的分配和释放操作。3.
2023-10-08

优化Go语言应用性能的内存优化策略与垃圾回收器管理

优化Go语言应用性能的内存优化策略与垃圾回收器管理可以通过以下几个方面来实现:1. 使用合适的数据结构:选择合适的数据结构可以减少内存的使用。例如,使用切片代替数组可以避免不必要的内存分配和拷贝。2. 减少内存分配:频繁的内存分配会导致内存
2023-10-08

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录