返回顶部
首页 > 资讯 > 后端开发 > Python >java性能调优System的gc垃圾回收方法
  • 402
分享到

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

2024-04-02 19:04:59 402人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、什么是System.GC()?二、谁可以调用System.gc()?三、调用System.gc()有什么弊端?四、哪些场景适合显式调用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垃圾回收的资料请关注编程网其它相关文章!

--结束END--

本文标题: java性能调优System的gc垃圾回收方法

本文链接: https://lsjlt.com/news/142641.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java性能调优System的gc垃圾回收方法
    目录一、什么是System.gc()?二、谁可以调用System.gc()?三、调用System.gc()有什么弊端?四、哪些场景适合显式调用System.gc()?五、如何检测您的...
    99+
    2024-04-02
  • 详解 Java性能优化和JVM GC(垃圾回收机制)
    Java的性能优化,JVM GC(垃圾回收机制)在学习Java GC 之前,我们需要记住一个单词:stop-the-world 。它会在任何一种GC算法中发生。stop-the-world 意味着JVM因为需要执行GC而停止了应用程序的执行...
    99+
    2023-06-02
  • Java垃圾回收调优的方法是什么
    这篇文章主要讲解了“Java垃圾回收调优的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java垃圾回收调优的方法是什么”吧!性能调优目标要是可确定且可测量的,这非常重要。这些目标...
    99+
    2023-06-17
  • jvm垃圾回收GC调优基础原理分析
    目录核心概念(Core Concepts)Latency(延迟)Throughput(吞吐量)Capacity(系统容量)相关示例Tuning for Latency(调优延迟指标)...
    99+
    2024-04-02
  • 如何掌握JAVA性能调优和jvm垃圾回收
    这篇文章主要介绍“如何掌握JAVA性能调优和jvm垃圾回收”,在日常操作中,相信很多人在如何掌握JAVA性能调优和jvm垃圾回收问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • jvm垃圾回收GC调优基础原理是什么
    这篇文章主要介绍了jvm垃圾回收GC调优基础原理是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇jvm垃圾回收GC调优基础原理是什么文章都会有所收获,下面我们一起来看看吧。说明:Capacity: 性能,能...
    99+
    2023-06-29
  • jvm垃圾回收之GC调优工具分析详解
    进行GC性能调优时, 需要明确了解, 当前的GC行为对系统和用户有多大的影响。有多种监控GC的工具和方法, 本章将逐一介绍常用的工具。 JVM 在程序执行的过程中, 提供了GC行为的...
    99+
    2024-04-02
  • java垃圾回收原理之GC算法基础
    正文: 相关术语翻译说明: Mark,标记; Sweep,清除; Compact,整理; 也有人翻译为压缩,译者认为GC时不存在压缩这回事。 Copy,复制; copy 用作名词时一...
    99+
    2024-04-02
  • java垃圾回收之实现串行GC算法
    我们可以选择JVM内置的各种算法。如果不通过参数明确指定垃圾收集算法, 则会使用宿主平台的默认实现。本章会详细介绍各种算法的实现原理。 下面是关于Java 8中各种组合的垃圾收集器概...
    99+
    2024-04-02
  • java垃圾回收之实现并行GC算法
    Parallel GC(并行GC) 并行垃圾收集器这一类组合, 在年轻代使用 标记-复制(mark-copy)算法, 在老年代使用 标记-清除-整理(mark-s...
    99+
    2024-04-02
  • Java应用的垃圾回收优化方法是什么
    这篇文章主要讲解了“Java应用的垃圾回收优化方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java应用的垃圾回收优化方法是什么”吧!高性能应用构成了现代网络的支柱。LinkedI...
    99+
    2023-06-17
  • 如何分析Java性能优化中的垃圾回收机制
    这篇文章将为大家详细讲解有关如何分析Java性能优化中的垃圾回收机制,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。★JVM 的内存空间  在 Java 虚拟机规范中,提及了如下几种类型的内存...
    99+
    2023-06-02
  • JVM调优之垃圾定位、垃圾回收算法、垃圾处理器的区别有哪些
    本篇内容主要讲解“JVM调优之垃圾定位、垃圾回收算法、垃圾处理器的区别有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JVM调优之垃圾定位、垃圾回收算法、垃...
    99+
    2024-04-02
  • 怎么进行Java内存与垃圾回收调优
    本篇文章给大家分享的是有关怎么进行Java内存与垃圾回收调优,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。要了解Java垃圾收集机制,先理解JVM内存模式是非常重要的。今天我们...
    99+
    2023-06-17
  • JVM的垃圾回收机制详解与调优
    这篇文章主要讲解了“JVM的垃圾回收机制详解与调优”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JVM的垃圾回收机制详解与调优”吧!JVM的gc概述gc即垃圾收集机制是指jvm用于释放那些不...
    99+
    2023-06-03
  • Go函数性能优化:垃圾回收机制与性能的影响
    垃圾回收 (gc) 对 go 函数性能有影响,因为它会暂停程序以回收内存,从而中断执行。优化策略包括:减少分配使用池避免循环中的分配使用预分配的内存profile 应用程序 Go 函数...
    99+
    2024-05-03
    垃圾回收 性能优化
  • java性能优化常见的垃圾收集器有哪些
    本文小编为大家详细介绍“java性能优化常见的垃圾收集器有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“java性能优化常见的垃圾收集器有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。常见的垃圾回收器和...
    99+
    2023-07-02
  • Kubernetes中的垃圾回收方法是什么
    本篇内容介绍了“Kubernetes中的垃圾回收方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!考...
    99+
    2024-04-02
  • JVM调优中垃圾回收面临的问题是什么
    这篇文章将为大家详细讲解有关JVM调优中垃圾回收面临的问题是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。如何区分垃圾上面说到的“引用计数”法,通过统计控制生成对象和删除对象时的引用数来...
    99+
    2023-06-17
  • java性能优化四种常见垃圾收集器汇总
    目录前言常见的垃圾回收器和算法serial 串行垃圾收集器Parallel 多线程垃圾收集器CMS 收集器G1 收集器显式垃圾收集前言 本篇文章我们来具体看看如何选择合适的垃圾收集器...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作