导图社区 JVM内存模型思维导图
这是一篇关于JVM内存模型的思维导图,JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的
这是一篇关于对象生命周期的思维导图,包括生命周期,引用类型,垃圾回收等方面内容,可供大家学习以及参考。
这是一篇关于jvm类加载机制思维导图,jvm是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
社区模板帮助中心,点此进入>>
安全教育的重要性
个人日常活动安排思维导图
西游记主要人物性格分析
17种头脑风暴法
如何令自己更快乐
头脑风暴法四个原则
思维导图
第二职业规划书
记一篇有颜又有料的笔记-by babe
伯赞学习技巧
JVM内存模型
JVM运行时数据区是一种规范,JVM内存模型是对规范的实现
非堆区的方法区或者称为元空间 metaspace
堆区
old区
young区
eden区
survivor区(from 和 to)
8:1:1
对象创建过程
新创建对象会分配到eden区
*特殊的大对象会直接分配到old区,这个往往是排查问题的关键
eden区的空间不够,会执行minor GC
GC
partial gc
young gc(minor GC)
old gc(major gc) 一版都会 伴随minor gc 即 full gc
full gc
不能一味的调整old区来提高性能
太大,每次full gc 的时间会很长
太小,每次full gc 的频率会增多
正常对象 98% 会朝生夕死,所以设置 8:1:1 e 区和s区
s区的作用同时默认经历16次minor gc的对象会进入old区,减少full gc
两个s区是在复制回收算法时减少内存碎片化,
堆内存也不全是线程共享的 存在小空间的 TLAB 区(thead local allocation buffer) 本地线程缓冲区,小对象是在这里分配的,提高响应速度,大对象还是没法。
异常情况
堆区内存满了,即old区满了,java.lang.OutOfMemoryError: GC overhead limit exceeded
方法区内存满了,java.lang.OutOfMemoryError: Metaspace
虚拟机栈内存满了,java.lang.StackOverflowError
每个线程的栈空间大小
jdk5 以后 默认1M,以前是256k
-Xss1m 参数设置
过大会导致栈的数量受影响,多线程会出现内存溢出
过小会导致栈溢出
反推,java中的多线程数量也受虚拟机栈的影响
根据经验,操作系统对进程内的线程数有限制 ,上限在3000-5000
JVM部分参数
-XX:MetaspaceSize=50M 设置元空间的初始大小
-XX:MaxMetaspaceSize=50M 设置元空间最大内存大小
-Xms20m /-Xmx20m 设置堆内存初始大小和最大上限,一般保障两个一致,保障在GC之后不会重新分配内存
-Xss1m 设置栈大小
-Xmn1m设置young 区大小(堆=young区+old区+持久层),推荐配置3/8
-XX:NewRatio=4 表示young 区和old区的比为1:4
-XX:SurvivorRatio=8 设置s区和e区的比例 8:1:1