热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JVM垃圾回收(2)

回收算法补充——分代回收实际的JVM并不会单独的使用一种算法,分代回收的垃圾回收机制就体现了这一点。JVM将堆内存划分为两个区域——新生代和老年代新生代使用复制算法老年代使用标记

回收算法补充——分代回收

实际的JVM并不会单独的使用一种算法,分代回收的垃圾回收机制就体现了这一点。

JVM将堆内存划分为两个区域——新生代老年代



  • 新生代使用复制算法

  • 老年代使用标记 - 清除 或者 标记 - 整理 算法

分代

而新生代又细分为 伊甸园、幸存区From、幸存区To

新创建的对象放在伊甸园,当伊甸园无法再放入对象时就会产生垃圾回收

新生代的垃圾回收,我们称为 Minor GC

新生代的垃圾回收采用复制的方法,将存活的对象复制到 幸存区To

同时让幸存的对象存活次数+1

完成一次 Minor GC 后 幸存区From和幸存区To会交换一次位置(指向发生变化,让幸存区To为空的状态)

当下一次垃圾回收的时候,幸存区的对象也会被判断是否回收

当然,幸存区的对象不会一直呆在幸存区,当其存活次数超过一个阈值(默认 15)他就会被移动到老年代中

老年代的空间也有不足的时候,当新生代无法触发回收,老年代的空间也不足的时候就会产生垃圾回收

老年代的垃圾回收,我们称为 Full GC

老年代使用标记 - 清除 或者 标记 - 整理 算法进行垃圾回收

触发Minor GC和Full GC时会引发Stop the World

意思是在新生代和老年代垃圾回收时,其它用户线程必须停止直到垃圾回收过程完成


相关JVM参数















































含义参数
堆初始大小-Xms
堆最大大小-Xmx 或 -XX:MaxHeapsize=size
新生代大小-Xmn 或 (-XX:Newsize=size +-XX:MaxNewSize=size)
幸存区比例(动态)-XX: Initial SurvivorRatio=ratio Al -XX:+UseAdaptiveSizePolicy
幸存区比例-XX:SurvivorRatio=ratio
晋升阈值-XX:Max Tentring Threshold-threshold
晋升大小-XX:+PrintTenuringDistribution
GC详情-XX:+PrintGCDetails-verbose:gc
Full GC 前 Minor GC-Xx:+ScavengeBeforeFullGC


垃圾回收器


串行垃圾回收器



  • 底层是一个单线程的垃圾回收器

  • 适用于堆内存较小和cpu核数较少(个人电脑)的时候

-XX:+UserSerialGC = Serial + SerialOld


吞吐量优先垃圾回收器



  • 多线程

  • 适用于较大的堆内存,需要多核cpu

  • 目的:尽可能让单位时间内STW(Stop the World)时间最短

-XX:+UseParallelGc ~ -XX:+UseParallelOldGC

吞吐量优先


响应时间优先垃圾回收器



  • 多线程

  • 适用于较大的堆内存,需要多核cpu

  • 目的:尽可能让单次STW(Stop the World)时间最短

- XX:+UseConcMarkSweepGC ~ -XX:+UseParNewGC ~ SerialOld

响应时间优先

过程解释:



  • 初始标记: 仅仅只是标记一下 GC Roots 能直接关联到的对象,速度很快,需要停顿。

  • 并发标记: 进行 GC Roots Tracing 的过程,它在整个回收过程中耗时最长,不需要停顿。

  • 重新标记: 为了修正并发标记期间因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,需要停顿。

  • 并发清除: 不需要停顿。

    在整个过程中耗时最长的并发标记和并发清除过程中,收集器线程都可以与用户线程一起工作,不需要进行停顿。



推荐阅读
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
手机用户2502860335
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有