在本文中,我们试图回答有关System.gc()API调用的最常见问题。 我们希望它会有所帮助。

什么是System.gc()?

System.gc()是用Java,Android,C#和其他流行语言提供的API。 当被调用时,它将尽最大努力从内存中清除累积的未引用对象(即垃圾)。

谁调用System.gc()?

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

  • 您自己的应用程序开发人员可能正在显式调用System.gc()方法。
  • 有时System.gc()可以由您的第三方库,框架甚至有时由应用程序服务器触发。
  • 可以通过使用JMX从外部工具(如VisualVM)触发
  • 如果您的应用程序正在使用RMI,则RMI会定期调用System.gc()。

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

当从您的应用程序调用System.gc()或Runtime.getRuntime()。gc()API调用时,世界各地的Full GC事件将被触发。 在世界各地的完整GC期间,整个JVM将冻结(即,正在运行的所有客户交易将被暂停)。 通常,这些完整GC需要很长时间才能完成。 因此,在不需要运行GC的不必要时间,它有可能导致不良的用户体验和SLA。

JVM具有复杂的算法,该算法始终在后台运行,进行所有计算以及有关何时触发GC的计算。 当您调用System.gc()调用时,所有这些计算都将被抛掉。 如果JVM仅在一毫秒后触发了GC事件,然后又从应用程序中再次调用System.gc(),该怎么办? 因为从您的应用程序中您不知道GC何时运行。

是否有任何良好/有效的理由来调用System.gc()?

从应用程序调用System.gc()的原因很多,我们还没有遇到。 但是,这是我们在一家大型航空公司的应用程序中看到的有趣的用例。 该应用程序使用1 TB的内存。 此应用程序的完整GC暂停时间大约需要5分钟才能完成。 是的,不要感到震惊,这是5分钟

您需要了解的所有有关System.gc()的信息相关推荐

  1. JVM:gc什么时候开始?System.gc()能保证gc一定发生吗?

    gc什么时候开始? "你能不能谈谈,java GC是在什么时候,对什么东西,做了什么事情?" 在什么时候: 1.新生代有一个Eden区和两个survivor区,首先将对象放入Ede ...

  2. java的System.gc()的理解

    目录 什么是System.gc() 实例1 实例2 什么是System.gc() 1.在默认情况下,通过System.gc()或者Runtime.getRuntime().gc()的调用,会显式触发F ...

  3. JVM学习笔记之-垃圾回收相关概念 System.gc()的理解 内存溢出与内存泄漏 STW 垃圾回收的并行与并发 安全点与安全区域 再谈引用:强引用 软引用 弱引用 虚引用 终结器引用

    System.gc()的理解 在默认情况下,通过System.gc()或者Runtime. getRuntime ( ).gc ()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试 ...

  4. jstat的小伙伴:找出system.gc的调用的小工具

    场景分析 现场环境中,造成gc频繁的可能性之一就是通过system.gc主动调用了gc.这种情况出现在开发人员业务代码,或者是jdk自身的代码中(例如nio).我们可以通过jstat -gccause ...

  5. 一个利用System.gc和finalize研究Java垃圾回收机制的练习

    源代码: package basic;public class finalizeTest {private String name;public void finalize(){System.out. ...

  6. System.gc()调用 - 适用的场景

    一.System.gc()调用 System.gc()用于调用垃圾收集器,在调用时,垃圾收集器将运行以回收未使用的内存空间.它将尝试释放被丢弃对象占用的内存.然而System.gc()调用附带一个免责 ...

  7. system.gc 性能_使用这些先进的GC技术提高应用程序性能

    system.gc 性能 应用程序性能是我们关注的重点,垃圾收集优化是取得小而有意义的进步的好地方 自动化垃圾收集(与JIT HotSpot编译器一起)是JVM中最先进,最有价值的组件之一,但是许多开 ...

  8. Java笔记-使用System.gc()进行内存回收

    这里注意是这样的,在某个项目里面有30多个java进程,100多个线程,运行30分钟后发现某个进程超级占用资源.第二天再去看的时候,整个系统的java进程占用内存都变小了. 身为C++程序员,对这种现 ...

  9. System.gc()与Object.finalize()的区别

    finalize()是由JVM自动调用的,你可以用System.gc(),但JVM不一定会立刻执行,JVM感觉内存空间有限时,才会开始执行finalize(),至于新的对象创建个数和被收集个数不同是因 ...

最新文章

  1. Hibernate Criterion
  2. 让你的主机运行ASP.NET 2.0 AJAX程序
  3. 【Kotlin】Kotlin 类的继承 三 ( super 关键字使用 | super@ 外部调用父类方法 | 子类选择性调用 父类 / 接口 方法 super )
  4. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第八章——自编解析与答案
  5. 数据库相关中间件介绍
  6. 通过案例对SparkStreaming透彻理解-3
  7. winmail计算机三级,2016年计算机三级网络技术机考模拟题(1)
  8. oracle如何搜索字段类型,Oracle通过字段类型查询字段
  9. 在 Mac 上如何使用时间机器备份文件?
  10. linux运维实战案例,Linux运维实战练习案例20151220~20151231
  11. WebRTC NAT穿透服务器 coturn服务搭建
  12. 数字图像处理之引言基础
  13. XSD文件详解(以Maven为例)
  14. 苹果6怎样分屏_皮皮喵最新版下载安卓版更新 0.2.6
  15. Findbugs使用指南及扫描内容解释
  16. Egret引擎游戏内存优化指南
  17. 如何制作实时库存报表
  18. 怎么快速做动态图?gif动图在线怎么制作?
  19. 软件设计师-数据结构知识
  20. 能自动翻译的软件-最精准的翻译软件

热门文章

  1. 【2018.5.19】模拟赛之二-ssl2433 文件名排序【字符串】
  2. 线段树-楼房重建-洛谷-P4198
  3. Windows 通过 SecureCRT 8.x 上传文件到Linux服务器
  4. jQuery 基础教程 (五)之使用jQuery创建动画效果
  5. Java 9 中的 GC 调优基础
  6. 软件开发的微信公众号分享
  7. java之正则表达式
  8. 2015蓝桥杯省赛---java---B---6(加法变乘法)
  9. 多线程----join插队
  10. stream 提取某字段_java8从list集合中取出某一属性的值的集合案例