广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >java什么时候触发gc
  • 258
分享到

java什么时候触发gc

java基础java触发gcgc 2022-02-03 12:02:08 258人浏览 猪猪侠
摘要

java什么时候触发gc一、内存回收策略和常见概念常见内存回收策略可以从以下几个维度来理解:1 串行&并行 串行:单线程执行内存回收工作。十分简单,无需考虑同步等问题,但耗时较长,不适合多cpu。并行:多线程并发进行回收工作。适合多CPU,

java什么时候触发gc

一、内存回收策略和常见概念

常见内存回收策略可以从以下几个维度来理解:

1 串行&并行

串行:单线程执行内存回收工作。十分简单,无需考虑同步等问题,但耗时较长,不适合多cpu。

并行:多线程并发进行回收工作。适合多CPU,效率高。

2 并发& stop the world

stop the world:JVM里的应用线程会挂起,只有垃圾回收线程在工作进行垃圾清理工作。简单,无需考虑回收不干净等问题。
并发:在垃圾回收的同时,应用也在跑。保证应用的响应时间。会存在回收不干净需要二次回收的情况。

3 压缩&非压缩©

压缩:在进行垃圾回收后,会通过滑动,把存活对象滑动到连续的空间里,清理碎片,保证剩余的空间是连续的。

非压缩:保留碎片,不进行压缩。

copy:将存活对象移到新空间,老空间全部释放。(需要较大的内存。)

一个垃圾回收算法,可以从上面几个维度来考虑和设计,而最终产生拥有不同特性适合不同场景的垃圾回收器。

二、JVM的YGC&FGC

YGC :对新生代堆进行GC。频率比较高,因为大部分对象的存活寿命较短,在新生代里被回收。性能耗费较小。

FGC :全堆范围的GC。默认堆空间使用到达80%(可调整)的时候会触发FGC。以我们生产环境为例,一般比较少会触发FGC,有时10天或一周左右会有一次。

三、什么时候会触发YGC,什么时候触发FGC?

● YGC的时机:

edn空间不足

● FGC的时机:

old空间不足;

perm空间不足;

显示调用System.gc() ,包括RMI等的定时触发;

YGC时的悲观策略;

dump live的内存信息时(jmap –dump:live)。

对YGC的触发时机,相当的显而易见,就是eden空间不足, 这时候就肯定会触发ygc

对于FGC的触发时机, old空间不足, 和perm的空间不足, 调用system.gc()这几个都比较显而易见,就是在这种情况下, 一般都会触发GC。

最复杂的是所谓的悲观策略,它触发的机制是在首先会计算之前晋升的平均大小,也就是从新生代,通过ygc变成新生代的平均大小,然后如果旧生代剩余的空间小于晋升大小,那么就会触发一次FullGC。sdk考虑的策略是, 从平均和长远的情况来看,下次晋升空间不够的可能性非常大, 与其等到那时候在fullGC 不如悲观的认为下次肯定会触发FullGC, 直接先执行一次FullGC。而且从实际使用过程中来看, 也达到了比较稳定的效果。

编程界网,大量的免费Java入门教程,欢迎在线学习

--结束END--

本文标题: java什么时候触发gc

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

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

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • java什么时候触发gc
    java什么时候触发gc一、内存回收策略和常见概念常见内存回收策略可以从以下几个维度来理解:1 串行&并行 串行:单线程执行内存回收工作。十分简单,无需考虑同步等问题,但耗时较长,不适合多cpu。并行:多线程并发进行回收工作。适合多CPU,...
    99+
    2022-02-03
    java基础 java 触发gc gc
  • 谈论Go 什么时候会触发 GC问题
    目录1、什么是 GC2、为什么要 GC3、GC 触发场景3.1系统触发3.2手动触发3.3 基本流程3.4 在哪触发4、监控线程5、堆内存申请在早期经常遭到唾弃的就是在垃圾回收(下称...
    99+
    2022-11-12
  • golang gc触发机制是什么
    在Go语言中,GC(垃圾回收)是自动触发的,不需要手动触发。Go语言的GC使用的是并发标记清除算法。GC的触发时机由Go语言的运行时...
    99+
    2023-09-27
    golang
  • java什么时候出的
    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。 (推荐学习:java课程)Java语言作为静态...
    99+
    2020-09-18
    java入门 java
  • java什么时候用this
    this只存在于方法内部,用来代表调用改方法的对象。可以理解为每一个方法内部都有一个局部变量叫this,每当初始化一个对象时,就把该对象的地址传递给了该对象每一个方法中的this变量,从而可以在方法内部使用这个的对象。第一种情况 ...
    99+
    2017-01-02
    java入门 java
  • android什么时候发生surfaceDestroyed()
    当一个SurfaceView被销毁时,会调用其对应的SurfaceHolder.Callback的surfaceDestroyed(...
    99+
    2023-09-16
    android
  • redis什么时候发布的
    小编给大家分享一下redis什么时候发布的,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!redis什么时候出的?redis的初始版本是在2009年5月10日出的。 开发者是Salvatore ...
    99+
    2022-10-18
  • nodejs什么时候发布的
    这篇文章主要介绍nodejs什么时候发布的,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! nodejs诞生于2009年5月,是由大神Ryan Dahl开发...
    99+
    2022-10-19
  • vuejs3什么时候发布的
    这篇文章主要为大家展示了“vuejs3什么时候发布的”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vuejs3什么时候发布的”这篇文章吧。 ...
    99+
    2022-10-19
  • android – 什么时候发生surfaceDestroyed()
    在Android开发中,当SurfaceView的Surface被销毁时,会触发surfaceDestroyed()方法。Surfa...
    99+
    2023-09-17
    android
  • thinkphp6什么时候发布的
    这篇文章主要为大家展示了“thinkphp6什么时候发布的”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“thinkphp6什么时候发布的”这篇文章吧。thinkphp6.0RC2版本是2019年...
    99+
    2023-06-22
  • java中什么时候用this?
    this只存在于方法内部,用来代表调用改方法的对象。可以理解为每一个方法内部都有一个局部变量叫this,每当初始化一个对象时,就把该对象的地址传递给了该对象每一个方法中的this变量,从而可以在方法内部使用这个的对象。java中什么时候用t...
    99+
    2022-04-17
    java教程 java this
  • css2.1的发布时间是什么时候
    今天小编给大家分享一下css2.1的发布时间是什么时候的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。css2.1是2004年...
    99+
    2023-07-05
  • php是什么时候发明的
    这篇“php是什么时候发明的”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php是什么时候发明的”文章吧。php是在服务器端...
    99+
    2023-07-05
  • ecmascript10是什么时候发表的
    这篇文章主要讲解了“ecmascript10是什么时候发表的”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ecmascript10是什么时候发表的”吧! ...
    99+
    2022-10-19
  • vue是什么时候发布的
    这篇“vue是什么时候发布的”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“vue是什么时候发布的”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所收获,下面让我们一起来看看具...
    99+
    2023-06-06
  • java gc是什么
    java gc是什么 gc是指垃圾回收机制,当一个对象不能再被后续程序所引用到时,这个对象所占用的内存空间就没有存在的意义了,java虚拟机会不定时的去检测内存中这样的对象,然后回收这块内存空间。gc是Java与C++/C的主要区别之...
    99+
    2021-06-21
    java基础 java gc
  • java类在什么时候加载
    类什么时候加载类的加载是通过类加载器(Classloader)完成的,它既可以是饿汉式[eagerly load](只要有其它类引用了它就加载)加载类,也可以是懒加载[lazy load](等到类初始化发生的时候才加载)。 ...
    99+
    2016-03-31
    java入门 java
  • java中什么时候使用static
    什么时候使用:当一个方法或者变量需要初始化加载,或者是经常被调用的时候可以加上static。用static修饰的方法可以用类名直接调用,不用的一定要先实例化一个对象然后才可以调用。不足之处:初始化加载,比较占内存,所以不经常用的方法,不建议...
    99+
    2017-08-26
    java static 使用
  • win9预览版什么时候发布
    win9预览版什么时候发布相信很多对于win8失望的朋友们都在等待着win9的到来,首先和我们见面的肯定是win9技术预览版了,那么win9预览版什么时候发布呢下面就和小编一起去了解下吧。   目前已经确定的是,部分科技...
    99+
    2023-06-07
    win9 win8 预览
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作