`
guohf
  • 浏览: 406680 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java垃圾收集解析

    博客分类:
  • java
 
阅读更多


 

 

名称

查找对象

垃圾回收

引用计数

存储引用数,

引用数为0时收集

对象引用遍历(清除方式)

递归遍历,标记可到达对象

 

扫描堆栈,删除未标记对象,释放内存

对象引用遍历(压缩方式)

递归遍历,标记可到达对象

 

重新组织内存中的对象,并进行压缩。

 

GC回收常用算法:

 

 

 

 

 

 

 

 

 

 

GC回收常用方式:

 

方式名称

原理

特点

标记-清除收集器

递归遍历,标记可到达对象,删除未标记对象,

单线程并停止其它操作

标记-压缩收集器

递归遍历,标记可到达对象,把标记对象复制到堆栈的新域中,以便压缩堆栈

停止其它操作

复制收集器

将堆栈分成两个域,常称为半空间,每次仅使用一半的空间,jvm生成的新对象放在另一半空间中.gc运行时,把可到达对象复制另一半空间中去,从而压缩了堆栈

短生存期的对象,持续复制长生存期的对象则导致效率降低

增量收集器

把堆栈分成多个域,每次仅从一个域回收

会造成较小的程序中断

分代收集器

把堆栈分为两个或多个域,用以存放不同寿命的对象。Jvm生成的新对象一般放在其中的某个域中。过一段时间,继续存在的对象,将获得使用期并转入更长寿命的域中。

对不同的域使用不同的算法以优化性能

并发收集器

与应用程序同时运行

这些收集器在某点上(比如压缩时)一般都不得不停止其他操作以完成特定的任务,但是因为其他应用程序可进行其他的后台操作,所以中断其他处理的实际时间大大降低

并行收集器

使用多线程并行执行垃圾回收工作

在多cpu机器上使用多线程技术可以显著的提高java应用程序的可扩展性

 

 

 

 

Sun HotSpot 1.4.1

使用分代收集器,整个堆分为新域(分为:Eden空间,救助空间(From空间,to空间)),旧域,永久域

 

堆大小:-Xms堆的初使大小,-Xmx堆的最大值

 

Eden(新域)

From(新域:救助空间)

to(新域:救助空间)

旧域

永久域

 

 

新域:存放新对象,使用复制收集器

       -Xmn:NewSizeMaxNewSize设成一致

       -XX:NewSize:设置新域的初使值

       -XX:MaxNewSize:设置新域的最大值

       -XX:SurvivorRatio:救助空间与Eden空间的比值

-XX:MaxTenuringThreshold=0控制救助空间的比例

 

旧域:存放长期对象,标记-压缩收集器

       -XX:NewRatio设置新域和旧域在堆中所占的比例

      

 

永久域:存放classmethod对象

-XX:PermSize

-XX:MaxPermSize

例子:

1)java -Xms512m -Xmx512m -XX:NewSize=64m  -XX:MaxNewSize=128m -XX:MaxPermSize=64m -XX:SurvivorRation =2

说明:

-Xms512m -Xmx512mà堆内存初始为512M,最大值512M,

XX:NewSize=64m -XX:MaxNewSize=128mà新域的初始值为64M,最大值为128M

-XX:MaxPermSize=64mà永久域初始值4M(默认值),最大值64M

-XX:SurvivorRation =2à新域中两个救助空间和Eden空间的比例为:(1+1):2,所以每个救助空间占新域的1/4,即128/4=32M  , Eden域占1/2,即64M

 

2)java -Xms512m -Xmx512m -Xmn128m -XX:PermSize=32m -XX:MaxPermSize=64m -XX:SurvivorRation =8

说明:

-Xmn128mà新域的初始值和最大值均为128M

-XX:PermSize=32m -XX:MaxPermSize=64mà永久域初始值32M,最大值64M

新域中Eden空间为:128*8/10=102.4M,(fromto救助空间)分别为:128/10=12.8M

3)java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4  -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0 -XX:SurvivorRatio=50000

说明:

       -Xss128Kà设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。根据应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右

       -XX:NewRatioà设置新域和旧域的比例1:4,新域大小为3550/5=710M

       -XX:MaxTenuringThresholdà此值为0时,在新域中不使用救助空间,这时需要把-XX:SurvivorRatio设置成最大值

分享到:
评论

相关推荐

    JVM内存模型以及垃圾收集策略解析

    JVM内存模型以及垃圾收集策略解析 可以深入了解java虚拟机的原理

    垃圾猫:解析Java垃圾收集日志并分析收集器,触发器,JVM版本,JVM选项和OS信息,并报告errorwarninfo级别的分析和建议,以支持针对OpenJDK和SunOracle JDK的JVM调整和故障排除

    一个命令行工具,用于解析Java垃圾收集日志并进行分析,以支持针对OpenJDK和Sun / Oracle JDK的JVM调整和故障排除。 它与其他工具的不同之处在于,它超出了计算统计信息(例如最大暂停时间和吞吐量)的简单数学范围...

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

    第5-20章深入描述了java技术的内部细节,包括垃圾收集、java安全模型、java的连接模型和动态扩展机制、class文件、运算及流程控制等等,其中等6章和附录a-c完全可以作为class文件和指令含集的参考手册。本书还附带...

    Java实时性及嵌入式实时Java处理器研究

    垃圾收集器(GC)的自动运行导致了任务执行时间的不可预测性;另外,Java语言规范和Java虚拟机规范讨论线程调度的地方非常笼统,导致在不同虚拟机实现中线程调度特性表现不一致。针对传统Java技术在实时方面的不足,...

    Java最新面试总结.docx

    此word文档全面总结了最新面试在中遇到的面向对象分析OOA、面向对象设计OOD、面向对象编程OOP以及Java线程、Java集合类、Java垃圾收集、Java小应用程序Applet、Swing、Servlet、JSP相关面试常见问题解析,不仅对找...

    深入Java虚拟机

    7.2.2 垃圾收集和对象的终结 7.3 卸载类型 7.4 随书光盘 7.5 资源页 第8章 连接模型 8.1 动态连接和解析 8.1.1 解析和动态扩展 8.1.2 类装载器与双亲委派模型 8.1.3 常量池解析 8.1.4 解析...

    深入java虚拟机第二版

    7.2.2 垃圾收集和对象的终结 7.3 卸载类型 7.4 随书光盘 7.5 资源页 第8章 连接模型 8.1 动态连接和解析 8.1.1 解析和动态扩展 8.1.2 类装载器与双亲委派模型 8.1.3 常量池解析 8.1.4 解析CONSTANT_...

    javascript垃圾收集机制与内存泄漏详细解析

    javascript具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中的使用的内存。而在C和C++之类的语言中,开发人员的一项基本任务就是手动跟踪内存的使用情况,这是造成许多问题的一个根源。在编写...

    Java面试通关宝典:深度解读核心知识点与实战技巧,全面提升面试表现力与技术实力

    本文将对Java常见面试题进行总结和解析,旨在为准备面试的Java开发者提供全面而深入的学习参考。以下是一些关键的Java面试题目类别及其概述: Java集合框架:这部分问题关注ArrayList、LinkedList、HashMap、HashSet...

    深入JAVA虚拟机(第2版)

    7.2.2 垃圾收集和对象的终结 7.3 卸载类型 7.4 随书光盘 7.5 资源页 第8章 连接模型 8.1 动态连接和解析 8.1.1 解析和动态扩展 8.1.2 类装载器与双亲委派模型 8.1.3 常量池解析 8.1.4 解析...

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    / 48 3.2.5 回收方法区 / 50 3.3 垃圾收集算法 / 51 3.3.1 标记 -清除算法 / 51 3.3.2 复制算法 / 52 3.3.3 标记-整理算法 / 54 3.3.4 分代收集算法 / 54 3.4 垃圾收集器 / 55 3.4.1 Serial收集器 / 56 ...

    Java虚拟机

    常见的垃圾收集算法以及垃圾收集器的特点和工作原理;常见虚拟机监控与故障处理工具的原理和使用方法。第三部分分析了虚拟机的执行子系统,包括类文件结构、虚拟机类加载机制、虚拟机字节码执行引擎。第四部分讲解了...

    gc-log-parser:Oracle JDK 的 Java GC 日志解析器

    概括 该 Java 库为 Oracle JDK 1.7 和 1.8 生成的 GC ... 支持以下 Oracle JVM 的垃圾收集器: 一代 集电极 JVM 选项 新的 复制 -XX:+UseSerialGC PS清道夫 -XX:+UseParallelGC 新派 -XX:+UseParNewGC G1 年轻 -XX:

    深入解析ANDROID虚拟机

    分别讲解了Android系统的基础知识、Android系统的结构和核心框架、Java虚拟机和Dalvik虚拟机的知识、实现程序编译和调试、Dalvik的运作流程、DEX优化和安全管理、Android虚拟机生命周期管理和内存分配策略、虚拟机...

    zxing.java源码解析-JavaAndroidInterview:Android、JavaSE、数据结构与算法豆知识,可用于碎片化学习和

    zxing.java源码解析 这是一个JavaSE、Android领域的豆知识tips,可以用来碎片化学习和面试。内容主要来源于行业内一大批高质量的优秀公众号,如Hollis、程序员小灰、漫画编程等公号翘楚,以及本人平常收集的一些开源...

    Java 虚拟机面试题全面解析(干货)

    垃圾收集器主要管理的就是Java堆。Java堆在物理上可以不连续,只 要逻辑上连续即可。 方法区(线程共亨) 方法区( Method area)被所有线程共享,用于存储已被虛拟机加载的类信息、常量、静态 变量、即时编译器编译后的...

    java面试题

    Bea JRockit JVM支持4种垃圾收集器: 46 63.5. 如何从JVM中获取信息来进行调整 46 63.6. Pdm系统JVM调整 47 63.6.1. 服务器:前提内存1G 单CPU 47 63.6.2. 客户机:通过在JNLP文件中设置参数来调整客户端JVM 47 64....

    深入理解Java虚拟机视频教程(jvm性能调优+内存模型+虚拟机原理)视频教程

    第40节垃圾收集器-parallel收集器详解00:11:02分钟 | 第41节垃圾收集器-cms收集器详解00:14:58分钟 | 第42节最牛的垃圾收集器-g1收集器详解00:18:04分钟 | 第43节内存分配-概述00:04:23分钟 | 第44节内存分配-...

    重磅2023年最新JAVA核心知识整理从基础到精通完整教程-283页全面试题解析学习资料涵项目源码-20231120.pdf

    1.目录 2.JVM 2.1.线程 2.2.JVM内存区域 2.2.1.程序计数器(线程私有) 2.2.2.虚拟机栈(线程私有) 2.2.3.本地方法区(线程私有) 2.2.4.堆(Heap-线程共享)-运行时数据区 2.2.5.方法区/永久代(线程...2.4.5.分代收集算法

    《剑指offer》JVM面试题总结.pdf

    请你介绍一波垃圾收集器 Serial 收集器 ParNew 收集器 Parallel Scavenge 收集器 Serial Old 收集器 Parallel Old 收集器 CMS 收集器 Garbage First 收集器 JVM 常用命令介绍 什么是双亲委派模型? 双亲委派模型的...

Global site tag (gtag.js) - Google Analytics