java memory model
2019-10-11 15:18:36 0 举报
如果觉得好,请点赞
作者其他创作
大纲/内容
类的信息(名称、修饰符等)类中的静态常量类中定义为final类型的常量类中的Field信息类中的方法信息
Eden
老年代
新生代
新生代进入老年代
-Xms堆的最小值 -Xmx堆空间的最大值通常设置为相同大小,避免虚拟机动态调整
栈帧4
方法区
栈帧N
线程私有
栈帧1
永久代PermGen space(jdk8以下)
堆
局部变量表操作数栈动态链接方法返回地址
栈帧5
-XX:MetaspaceSize,初始空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整:如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。 -XX:MaxMetaspaceSize,最大空间,默认是没有限制的。
java memory model(运行时数据区)
.....
配置项
释义
-Xms
初始堆大小。如:-Xms512m
-Xmx
最大堆大小。如:-Xmx512m
-Xmn
新生代大小。通常为 Xmx 的 1/3 或 1/4。新生代 = Eden + 2 个 Survivor 空间。实际可用空间为 = Eden + 1 个 Survivor,即 90%
-Xss
JDK1.5+ 每个线程堆栈大小为 1M,一般来说如果栈不是很深的话, 1M 是绝对够用了的。
-XX:NewRatio
新生代与老年代的比例,如 –XX:NewRatio=2,则新生代占整个堆空间的1/3,老年代占2/3
-XX:SurvivorRatio
新生代中 Eden 与 Survivor 的比值。默认值为 8。即 Eden 占新生代空间的 8/10,另外两个 Survivor 各占 1/10
-XX:PermSize
永久代(方法区)的初始大小
-XX:MaxPermSize
永久代(方法区)的最大值
-XX:+PrintGCDetails
打印 GC 信息
-XX:+HeapDumpOnOutOfMemoryError
让虚拟机在发生内存溢出时 Dump 出当前的内存堆转储快照,以便分析
本地方法栈
S1
栈帧2
程序计数器
线程共享
每个线程都会分配一个栈,线程私有-Xss参数来设置栈的大小。栈的大小直接决定了函数调用的可达深度
栈帧3
栈帧结构局部变量表操作数栈动态链接方法返回地址
栈帧6
栈
调优
-XX:MaxPermSize永久代大小
jdk8(含)以上Metaspace
-XX:MaxTenuringThreshold设置将新生代对象转到老年代时需要经过多少次垃圾回收,但是仍然没有被回收默认15次
为何诞生元空间? 1、字符串存在永久代中,容易出现性能问题和内存溢出。 2、类及方法的信息等比较难确定其大小,因此对于永久代的大小指定比较困难,太小容易 出现永久代溢出,太大则容易导致老年代溢出。 3、永久代会为 GC 带来不必要的复杂度,并且回收效率偏低。
当前线程执行的字节码的行号指示器
对象实例数组
-XX:NewSize 新生代的最小值 -XX:MaxNewSize 新生代的最大值 -XX:NewRatio 设置新生代与老年代在堆空间的大小 -XX:SurvivorRatio 新生代中Eden所占区域的大小 默认 Eden:S0:S1==8:1:1
S0
0 条评论
下一页