jvm内存模型
2021-08-14 17:26:35 11 举报
java虚拟机中内存模型,以及各个模块对应的存储数据
作者其他创作
大纲/内容
thead n
初始标记 (stop the world)并发标记重新标记 (stop the world)并发清除 会产生浮动垃圾,可以通过配置触发收回阈值来减少;也可能产生空间碎片;
本地方法栈 Native Methodn Stack
1.只需移动顶端指针,按顺序分配内存即可,实现简单运行高效;2.会造成内存空间的浪费;
几乎所有的对象都在堆上分配内存,也是gc管理的主要区域
Java中的垃圾收集器
eden
Serial 收集器
thread 2
heap gc堆
to
CMS收集器
thread 1
新生代触发 minor gc:当eden区满时触发minor gc,一个对象默认经历过(可以通过MaxTenuringThreshold设置)默认15,会进入老年代区间
虚拟机栈Stack
Java中执行的内存模型
from
3.标记整理算法 老年代使用
jvm内存模型
ParNew 收集器
2.复制算法 虚拟机young 代使用
4.分代回收算法
线程共享区
当前线程执行的字解码的行号指示器
G1收集器
新生代收集器,又是并行的多线程收集器;可以通过参数控制吞吐量,可以自适应策略进行调配参数,又称为吞吐量优先收集器
young generation 新生代
运行时常量池runingtime constant pool
单线程收集器,在执行垃圾回收时,其他线程需要等待结束后才能继续执行;client 端使用比较多
多线程工作,可以边回收其他线程还可以提供服务;为了不影响服务,需要通过配置参数限制垃圾回收的线程数;
Paraller Scavenge 收集器
1.老年代的对应存活率都比较高,使用复制算法效率将会变低,2.标记清除过程跟算法1类似,只是在清除后,让所有的存活的对象都向一段移动,,然后直接清理掉边界以外的内存;
线程私有区
初始标记并大标记最终标记筛选回收 可以通过配置参数来设置多少次回收执行一次整理
1.效率问题,标记和清除两个效率都不高;2.容易产生空间碎片,在分配大空间对象时候找不到连续 的空间,不得不提前触发垃圾回收机制;
老年代垃圾收集器,通过单线程和“标记整理”算法实现,在clienr 使用比较多
垃圾回收相关信息
Serial old收集器
paraller old收集器
触发full gc1.手动执行system.gc();2.老年代空间不足(可以通过CMSInitiatingOccupancyFraction值改变阈值);3.永生代空间不足:jvm的方法区又称永生带,当系统中加载的类,反射的类以及调用的方法比较多,永生代可能被占满,从而触发fullgc;4.当进程minor gc时候要晋升到老年代的空间大于当前老年代的空间的时候会执行fullgc;5.在老年代分配大对象时候,老年代的空间很大,但是没有足够连续的内存空间区存放当前分配的大对象会执行fullgc;
pc Register 程序计数器
触发垃圾回收的条件
thread n
老年代垃圾收集器,通过多线程和“标记整理”算法实现;在servers端应用比较多
用于存储类信息(构造方法和接口定义)常量 静态变量以及编译器编译产生的编译代码等
方法区又称元数据取mathed Area
1.标记清除算法
垃圾回收的算法
老年代old Generation
用来加载Java中C语言实现的native 方法
0 条评论
下一页