环球易购Java,JAVA GC - sowhat的个人空间 - OSCHINA - 中文开源技术交流社区

本文主要是介绍环球易购Java,JAVA GC - sowhat的个人空间 - OSCHINA - 中文开源技术交流社区,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

谈谈,java GC是在什么时候,对什么东西,做了什么事情 先看下jvm的堆内存模型

b9b57897bf7c0056444c3f055ab4a0d2.png

GC回收主要是回收jvm堆内存。

堆内存又分为 新生代、年老代、元数据区(java8把永久代改为元数据)。新生代又划分为 Eden区、Survivor from区、Survivor to区,实际上分为三个区的原因是为了方便采用复制-清除。

jvm内存分两部分

1线程私有

a程序计数器(记录线程执行命令行号,因为cpu线程切换的原因) b虚拟机栈(java方法被执行会创建一个栈桢存储局部变量,动态链接等) c本地方法栈(native方法栈)

2线程共享

a java堆(存放对象实例,堆内存划分为新生代和老年代,再细一点分为eden空间,from survivor 空间,to survivor 空间比例为8:1:1。为了垃圾回收,在新生代实行标记-复制算法)

b方法区(静态变量,class信息,常量)

内存分配的策略:

1对象优先分配在eden区,

2大对象直接进去老年代可通过参数 PretenureSizeThreshold设置,

3长期存活对象将进去老年代MaxTenuringThreshold设置年龄,默认15,

4动态年龄判断 同龄对象大小超过from survivor 空间一半时 进入老年代

5空间分配担保机制

内存回收:

1-对象已死?使用根搜索算法,判断对象是否存在引用链。根对象包涵 a栈桢中本地变量表中的引用对象 b方法区静态变量的引用对象 c方法区常量引用对象。引用计算算法局限性不能判断循环引用问题。

2-何时回收?新生代空间不足时触发一次minorGc。对于满足条件的对象(a年龄达到设置的值maxturingthreshold参数 b同龄对象大小超过from survivor 空间一半时)移动到老年代中,判断老年代大小是否满足,不满足时触发fullGc。

3如何回收?使用分代收集算法,对于新生代使用复制算法因为新生代的对象基本都是朝生夕死的而且不会产生内存碎片。对于老年代使用标记整理算法因为老年代回收的对象比较少。把存活的对象移到一端然后清理掉端边界以外的内存

对不同分区采用不同算法回收,

1) 标记-清除收集器 Mark-Sweep,(易产生内存碎片,碎片太多可能会导致后续过程中需要为大对象分配空间时无法找到足够的空间而提前触发新的一次垃圾收集动作)

2) 复制收集器        Copying  (标记-复制,应用在新生代回收我们称之为“minor GC”)

3) 标记-压缩收集器 Mark-Compact(应用在年老代因为回收对象不多,在完成标记之后,它不是直接清理可回收对象,而是将存活对象都向一端移动,然后清理掉端边界以外的内存我们称之为“full GC”)

G1和CMS的比较

1、算法:G1 标记整理算法,CMS 标记清除算法

2、作用域:G1 年轻代  CMS 年老代

3、步骤 G1 1、初始标记;2、并发标记;3、最终标记;4、筛选回收

CMS  1、初始标记;2、并发标记;3、最终标记 4、并发清除

这篇关于环球易购Java,JAVA GC - sowhat的个人空间 - OSCHINA - 中文开源技术交流社区的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/757836

相关文章

一文详解SpringBoot中控制器的动态注册与卸载

《一文详解SpringBoot中控制器的动态注册与卸载》在项目开发中,通过动态注册和卸载控制器功能,可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,下面我们就来看看Sp... 目录项目结构1. 创建 Spring Boot 启动类2. 创建一个测试控制器3. 创建动态控制器注

Java操作Word文档的全面指南

《Java操作Word文档的全面指南》在Java开发中,操作Word文档是常见的业务需求,广泛应用于合同生成、报表输出、通知发布、法律文书生成、病历模板填写等场景,本文将全面介绍Java操作Word文... 目录简介段落页头与页脚页码表格图片批注文本框目录图表简介Word编程最重要的类是org.apach

Spring Boot中WebSocket常用使用方法详解

《SpringBoot中WebSocket常用使用方法详解》本文从WebSocket的基础概念出发,详细介绍了SpringBoot集成WebSocket的步骤,并重点讲解了常用的使用方法,包括简单消... 目录一、WebSocket基础概念1.1 什么是WebSocket1.2 WebSocket与HTTP

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

java中反射Reflection的4个作用详解

《java中反射Reflection的4个作用详解》反射Reflection是Java等编程语言中的一个重要特性,它允许程序在运行时进行自我检查和对内部成员(如字段、方法、类等)的操作,本文将详细介绍... 目录作用1、在运行时判断任意一个对象所属的类作用2、在运行时构造任意一个类的对象作用3、在运行时判断

java如何解压zip压缩包

《java如何解压zip压缩包》:本文主要介绍java如何解压zip压缩包问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java解压zip压缩包实例代码结果如下总结java解压zip压缩包坐在旁边的小伙伴问我怎么用 java 将服务器上的压缩文件解压出来,

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

Spring WebFlux 与 WebClient 使用指南及最佳实践

《SpringWebFlux与WebClient使用指南及最佳实践》WebClient是SpringWebFlux模块提供的非阻塞、响应式HTTP客户端,基于ProjectReactor实现,... 目录Spring WebFlux 与 WebClient 使用指南1. WebClient 概述2. 核心依

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注