java垃圾回收机制,system.gc会立即执行垃圾回收吗

  java垃圾回收机制,system.gc会立即执行垃圾回收吗

  00-1010一、什么是System.gc()?二。谁能调用System.gc()?三。调用System.gc()有什么缺点?四。哪些场景适合显式调用System.gc()?五、如何检测你的应用运行的是System.gc()?六。如何禁止GC显式调用或者调整调用GC的频率?搜索并替换被JVM参数强制禁止的RMI。

  00-1010System.gc()是Java、C #等多种流行的高级编程语言提供的API。当它被调用时,它会尽力从内存中清除垃圾(即未引用的对象)。解释:GC,垃圾回收,垃圾回收,下面会经常用到。

  

目录

System.gc()可从应用程序堆栈的不同部分调用:

 

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

  00-1010当System.gc()或Runtime.getRuntime()时。调用gc()API,将会触发完整的gc事件。在GC完成之前,整个JVM都会被冻结(也就是说,所有正在运行的服务都会被挂起),一次完整的GC通常需要很长时间才能完成。所以在不合适的时间运行GC会导致用户体验不好甚至崩溃。JVM有一个复杂的算法,它总是在后台运行,进行所有的计算和关于何时触发GC的计算。当您显式调用System.gc()调用时,所有这些计算都将被丢弃。

  

一、什么是System.gc()?

GC操作应该由JVM自己控制。在大多数场景下,不建议程序员手动编写代码来显式执行System.gc()操作,但也有一些例外:当我们开发多个微服务时,每个服务都有多个备份节点。在非高峰业务时间,我们可以从微服务负载平衡节点池中取出一个JVM实例。然后,System.gc()调用由JVM上的JMX显式触发,一旦gc事件完成并且垃圾从内存中清除,JVM将被放回微服务负载平衡的节点池中。当然,这个过程需要一个良好的微服务管理和服务释放机制,既能保证JVM垃圾内存的有效清理,又不影响业务的正常运行。

 

  00-1010正如第二小节所说:System.gc()可以从多个通道调用,而不仅仅是从你的应用程序源代码调用。因此,搜索您的应用程序代码System.gc()字符串不足以知道是否正在调用gc。这带来了一个挑战:如何检测应用程序是否正在进行垃圾收集?这就是GC日志派上用场的地方。

  //java 8启用gc日志记录://-xx3360 printgdetails-xlog GC 3360 GC-log-file-path例如下面一行代码-xx: printgdetails-xlog GC 3360/opt/tmp/myapp-GC . log//Java 9启用GC日志记录:-xlog 3360 GC * 3360 file=GC-log-file-path例如下面一行代码-xlog3360gc * 3360file=/opt启用GC日志记录只会增加微不足道的开销。您还可以将GC日志上传到垃圾收集日志分析器工具,如GCeasy、HP JMeter等。这些工具将生成丰富的垃圾收集分析报告。

  上图摘自GCeasy生成的报告。

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

  00-1010在代码库中搜索System.gc()和Runtime.getRuntime()。gc()。如果你看到一个匹配,删除它。但是这种方法无法避免第三方库、框架或者外部来源的调用,所以参考第二种方法。

  00-1010通过传递JVM参数-XX3360 DisableExplicitGC来强制禁止显式调用。该方法是强制有效的,应用中任何GC显式代码调用System.gc()都将被禁止生效。JVM自己的GC策略不受这个参数的影响,只禁止手动触发GC。

  00-1010如果您的应用程序使用RMI,您可以控制GC调用的频率。当您启动应用程序时,您可以使用以下JVM参数配置此频率:

  -dsun . RMI . dgc . server . GC interval=n

  -dsun . RMI . dgc . client . GC interval=n

  这些属性的默认值在

  JDK 1.4.2和5.0是60,000毫秒(即60秒),JDK 6和更高版本是3,600,000毫秒(即60分钟)。如果您的应用程序主机拥有丰富的内存资源,那么您可以将这些属性设置为非常高的值,以便将GC对应用程序的影响降到最低。这也是优化应用程序性能的方法之一。

  以上是java性能调优系统的gc垃圾收集方法的详细介绍。更多关于java性能调优系统的GC垃圾收集的信息,请关注热门IT的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: