看了好多jvm方面的内容觉得是时候全面总结一下了,但这却是也是一个老生常谈的问题了。想了想还是把我刚参加工作的时候做的一个分享ppt贴出来吧。
本文按照ppt的顺序,争取及其简要的把内存管理相关的一些内容讲清楚(其实当时讲的时候还是很清楚的):
第一张ppt:
按照时间先后顺序,jvm内存管理主要涉及到如下图:
第二种ppt:
类加载机制的层次结构图:
类加载机制有如下特点:
1 委托父类加载机制
2 缓存机制
把class文件加载到内存中都做了哪些事情:
1 存储类的类型信息
2 初始化静态变量和常量
3 生成java.lang.Class实例
第三张ppt:
Java内存划分:
第四张ppt:
堆内存又划分如下:
为什么要分代?
针对不同类型的对象区别对待,提高垃圾回收效率。如,大多数对象的生命周期都比较的短,而新生代采用复制垃圾回收算法,原因很多,总而言之是适合。
第五张ppt:
内存回收—堆内存回收算法
引用计数
采用分散式的管理方式,通过计数器记录对象是否被引用。当有引用指向对象时,此对象的计数器加一,断开引用减一。为0时回收。缺点是无法解决循环引用的问题。
跟踪收集
采用集中的管理方式,全局记录数据的引用状态,为了避免在收集过程中引用关系的变化,所以要暂停整个应用
复制(Copying)
标记-清除(Mark-Sweep)
标记-整理(Mark-Compact)
第六张ppt:
复制(Copying)
第七张ppt:
标记-清除(Mark-Sweep)
第八张ppt:
标记-压缩(Mark-Compact)
第九张ppt:
根集合对象
(根集合对象概念,java栈,静态变量,寄存器,常量,以及记录引用关系变化的集合)
第十张ppt:
Java对象在堆中的内存分配过程和堆分代
hotspot参数调优理论
第十二张ppt:
Hotspot内存调优途径
1 调整栈、堆内存区域的大小和所占比例
通常新生代占堆的三分之一
2 为堆内存区域设定适当的GC回收器
3 方法区设定大小
第十三张ppt:
新技术展望
GCIH是GC-InvisibleHeap的缩写。它是一种将Java对象从Java堆内移动到堆外,并且可以在JVM间共享这些对象的技术。
1 避免垃圾回收不必要的垃圾收集时间
2 不同JVM间的内存共享
参考文献:
1,深入java虚拟机
2,分布式JAVA应用+基础与实践 (几张gc算法回收的图从这本书中摘取,特此致敬)
3,java虚拟机详解