Minor GC、Major GC和Full GC之间的区别

概念:
● 新生代 GC(Minor GC):从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,因为 Java 对象大多都具备朝生夕灭的特性,所以 Minor GC 非常频繁一般回收速度也比较快。这一定义既清晰又易于理解。但是,当发生Minor GC事件的时候,有一些有趣的地方需要注意到:

  1. 当 JVM 无法为一个新的对象分配空间时会触发 Minor GC,比如当 Eden 区满了。所以分配率越高,越频繁执行 Minor GC。
  2. 内存池被填满的时候,其中的内容全部会被复制,指针会从0开始跟踪空闲内存。Eden 和 Survivor 区进行了标记和复制操作,取代了经典的标记、扫描、压缩、清理操作。所以 Eden 和 Survivor 区不存在内存碎片。写指针总是停留在所使用内存池的顶部。
  3. 执行 Minor GC 操作时,不会影响到永久代。从永久代到年轻代的引用被当成 GC roots,从年轻代到永久代的引用在标记阶段被直接忽略掉。
  4. 质疑常规的认知,所有的 Minor GC 都会触发“全世界的暂停(stop-the-world)”,停止应用程序的线程。对于大部分应用程序,停顿导致的延迟都是可以忽略不计的。其中的真相就 是,大部分 Eden 区中的对象都能被认为是垃圾,永远也不会被复制到 Survivor 区或者老年代空间。如果正好相反,Eden 区大部分新生对象不符合 GC 条件,Minor GC 执行时暂停的时间将会长很多。
    所以 Minor GC 的情况就相当清楚了——每次 Minor GC 会清理年轻代的内存。

● 老年代 GC(Major GC / Full GC):指发生在老年代的 GC,出现了 Major GC,经常会伴随至少一次的 Minor GC(但非绝对的,ParallelScavenge 收集器的收集策略里就有直接进行 Major GC 的策略选择过程) 。MajorGC 的速度一般会比 Minor GC 慢 10倍以上。


Minor GC触发机制:
当年轻代满时就会触发Minor GC,这里的年轻代满指的是Eden代满,Survivor满不会引发GC。
Full GC触发机制:
(1)调用System.gc时,系统建议执行Full GC,但是不必然执行
(2)老年代空间不足
(3)方法区空间不足
(4)通过Minor GC后进入老年代的平均大小大于老年代的可用内存
(5)由Eden区、survivor space1(From Space)区向survivor space2(To Space)区复制时,对象大小大于To Space可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小

当永久代满时也会引发Full GC,会导致Class、Method元信息的卸载。
其中Minor GC如下图所示
Minor GC
虚拟机给每个对象定义了一个对象年龄(Age)计数器。如果对象在 Eden 出生并经过第一次 Minor GC 后仍然存活,并且能被 Survivor 容纳的话,将被移动到 Survivor 空间中,并将对象年龄设为 1。对象在 Survivor 区中每熬过一次 Minor GC,年龄就增加 1 岁,当它的年龄增加到一定程度(默认为 15 岁)时,就会被晋升到老年代中。对象晋升老年代的年龄阈值,可以通过参数 -XX:MaxTenuringThreshold (阈值)来设置。

MajorGCvsFullGCMajorGCvsFullGC
大家应该注意到,目前,这些术语无论是在 JVM 规范还是在垃圾收集研究论文中都没有正式的定义。但是我们一看就知道这些在我们已经知道的基础之上做出的定义是正确的:
● Major GC 是清理老年代。
● Full GC 是清理整个堆空间—包括年轻代和老年代

一些回答:https://www.zhihu.com/question/41922036

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot——实现WebService接口服务端以及客户端开发

文章目录一、服务端代码开发1、pom依赖2、接口类3、接口实现类4、webservice配置文件2、客户端开发(1)pom依赖(2)封装客户端方法clientUtil(3)调用接口类(4)运行结果我们经常需要在两…

springboot集成webService开发详解

webService优缺点 webService优点 WebService是一种跨编程语言和跨操作系统平台的远程调用技术远程调用技术:不用担心防火墙的问题 webService缺点 服务端接口方为webservice则客户端也必须使用webservice,双方保持一致因为webservice使用xml传输数据…

WebService就是这么简单

WebService介绍 首先我们来谈一下为什么需要学习webService这样的一个技术吧…. 问题一 如果我们的网站需要提供一个天气预报这样一个需求的话,那我们该怎么做????? 天气预报这么一个功能并不是简单的J…

python使用xlrd读取xlsx文件_$ 用python处理Excel文档(1)——用xlrd模块读取xls/xlsx文档...

本文主要介绍xlrd模块读取Excel文档的基本用法,并以一个GDP数据的文档为例来进行操作。1. 准备工作:1. 安装xlrd:pip install xlrd2. 准备数据集:从网上找到的1952~2012年中国国内GDP的数据,数据结构如下:2…

WebService技术详解CXF

WebService WebService简介 Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么&…

Java webservice详解

文章目录1 webservice概述2 webservice核心要素2.1 SOAP2.2 WSDL3 webservice的使用场景4 webservice的结构5 Java中的webservice5.1 webservice服务端5.2 webservice客户端6 WDSL文件说明7 webservice 请求与响应监控8 webservice 在Tomcat中发布9 在Spring中使用webservice1 …

hibernate mysql cascade_Hibernate第五篇【inverse、cascade属性详解】

前言上一篇博文已经讲解了一对多和多对一之间的关系了,一对多和多对一存在着关联关系(外键与主键的关系)。本博文主要讲解Inverse属性、cascade属性。这两个属性对关联关系都有影响Inverse属性Inverse属性:表示控制权是否转移..true:控制权已转移【当前一…

spring boot中打包插件spring-boot-maven-plugin和maven-jar-plugin的关联

简介 用spring boot快速开发时,通常用spring-boot-maven-plugin插件将springboot的应用程序打包成jar文件,然后通过java -jar运行,很方便。但是如果是部署到服务器上,每次更改代码后替换的包都比较大,至少30MB以上&am…

Maven父子结构的项目依赖使用以及打包依赖_微服务项目(maven父子级项目)怎么打包

Maven父子结构的项目依赖使用以及打包依赖 1&#xff1a;在父子结构项目中&#xff0c;如果要是用其他模块的类。在当前项目中的pom中 加入 其他模块的配置 <dependency><groupId>com.spring.mySpring</groupId><artifactId>mySpring-utils</artif…

搭建一个完整的微服务项目

一.项目技术架构 1.技术栈 前台技术 Node.js、Npm、Vue.js、WebPack、Vue Cli、Element UI 后台架构 微服务架构&#xff1a;按照功能拆分N多个服务&#xff0c;每个服务可以独立技术选型,独立开发,独立部署,独立运维.&#xff0c;单个服务使用基于ssm的springboot&#xff0…

java 雅思_基于JAVA的雅思考试管理系统的设计与实现(SSH,MySQL)(含录像)

基于JAVA的雅思考试管理系统的设计与实现(SSH,MySQL)(含录像)(任务书,毕业论文12000字,程序代码,MySQL数据库)本文分析了基于JAVA的雅思考试管理系统的设计与实现技术&#xff0c;结合实际提出了本系统的总体结构设计和主要模块的功能实现。本系统分为二个子系统:管理员子系统&…

java开发利器 源码_Java开发的利器: 反编译工具 JD-GUI

老赵说起来也能算个Java程序员&#xff0c;可是写过的Java代码并不多&#xff0c;可老赵实实在在是从程序员干起的。虽然肚子里也装了不少的东西&#xff0c;可作为一件乐此不疲的事情&#xff0c;就是看那些所谓“高人”的代码。高人们的行事风格&#xff0c;十人十样&#xf…

Maven搭建Nexus私服

私服的介绍 1 什么是私服 私服是一种特殊的远程仓库&#xff0c;它是架设在局域网的仓库服务&#xff0c;私服代理广域网上的远程仓库&#xff0c;供局域网使用。 在企业开发中&#xff0c;私服的建设是有必要的&#xff0c;其好处如下&#xff1a; 1.1 节省资金、外网带宽…

Java啤酒生产系统描述_Java描述设计模式(03):工厂方法模式

一、工厂方法模式1、生活场景系统常见的数据导出功能&#xff1a;数据导出PDF、WORD等常见格式。2、工厂方法模式是类的创建模式&#xff0c;又叫做虚拟构造子(Virtual Constructor)模式或者多态性工厂(Polymorphic Factory)模式。工厂方法模式的用意是定义一个创建产品对象的工…

@Autowired(required=false)注入注意的问题

1、前言 在使用spring开发过程中&#xff0c;我们基本上都是使用Autowired这个注解&#xff0c;用来注入已有的bean。但是有些时候&#xff0c;会注入失败。当我们加上参数&#xff08;requiredfalse&#xff09;就能解决。今天整理一个我在实际开发中的例子 2、required属性…

什么是ip地址、子网掩码、网关和DNS?

什么是ip地址、子网掩码、网关和DNS&#xff1f; 什么是ip地址&#xff1f; IP是32位二进制数据&#xff0c;通常以十进制表示&#xff0c;并以“.”分隔。IP地址是一种逻辑地地址&#xff0c;用来标识网络中一个个主机&#xff0c;IP有唯一性&#xff0c;即每台机器的IP在全…

Dubbo:RPC原理

1、RPC原理 一次完整的RPC调用流程如下&#xff1a; 1&#xff09;服务消费方&#xff08;client&#xff09;调用以本地调用方式调用服务&#xff1b; 2&#xff09;client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体&#xff1b; 3&#xff09;clie…

java jni日志输出_java打印Jni层log

要在java层打印c的log必须引入这个头文件的宏定义:#ifndef __LOG#define __LOG#ifdef __cplusplusextern "C"{#endif#include//宏定义类似java 层的定义,不同级别的Log LOGI, LOGD, LOGW, LOGE, LOGF。 对就Java中的 Log.i log.d#define LOG_TAG "HelloJni"…

Dubbo基本原理机制

分布式服务框架&#xff1a; 高性能和透明化的RPC远程服务调用方案SOA服务治理方案Apache MINA 框架基于Reactor模型通信框架&#xff0c;基于tcp长连接 Dubbo缺省协议采用单一长连接和NIO异步通讯&#xff0c; 适合于小数据量大并发的服务调用&#xff0c;以及服务消费者机器…

Dubbo是如何进行远程服务调用的?(源码流程跟踪)

首先会分析Dubbo是如何进行远程服务调用的&#xff0c;如果不了解dubbo的服务暴露和服务调用&#xff0c;请去看前两篇dubbo的文章&#xff0c;然后后面我还会说一下dubbo的SPI机制 当我们在使用reference 注解的时候&#xff0c;来调用我们的提供者的Service对象的时候&#…