贵州网站建设营销公司,阿里巴巴网站服务内容,wordpress4.5.3zhcn,wordpress抓取文章插件3.JVM 运行时数据区 3.1.1 程序计数器#xff08;Program Counter Register#xff09; 是一块很小的内存空间,用来记录每个线程运行的指令位置#xff0c;是线程私有的,每个线程都拥有一个程序计数器#xff0c;生命周期与线程一致#xff0c;是运行时数据区中唯一一个不…3.JVM 运行时数据区 3.1.1 程序计数器Program Counter Register 是一块很小的内存空间,用来记录每个线程运行的指令位置是线程私有的,每个线程都拥有一个程序计数器生命周期与线程一致是运行时数据区中唯一一个不会出现内存溢出的空间。运行速度最快。 3.1.2Java 虚拟机栈Java Virtual Machine Stacks 基本作用特征: 栈是运行单位管理方法的调用运行是用来运行java方法的区域。可能会出现栈溢出是线程私有的。 运行原理:先进后出的结构最顶部的称为当前栈帧。 栈帧结构: 一个栈帧包含:局部变量表(存储在方法中声明的变量)操作数栈(实际计算运行) 动态链接 void A(){ B();//B方法的地址 }方法返回地址。 3.1.3 本地方法栈Native Method Stack 用来运行本地方法的区域是线程私有空间大小可以调整可能会出现栈溢出。 3.1.4Java 堆Java Heap 是Java虚拟机中内存最大的一块是被所有线程共享的在虚拟机启动时创建java堆唯一的目的就是存放对象实例几乎所有的对象实例都在这里分配内存。 3.1.5 方法区Methed Area
用于存储已经被虚拟机加载的类信息常量静态变量即时编译后的代码等数据。
方法区是很重要的系统资源是硬盘和cpu之间的桥梁。 4.堆
4.1基本作用特征
是存储空间用来存储对象,是内存空间最大的一块儿区域在jvm启动时就被创建,大小可以调整(jvm调优)本区域是存在垃圾回收的.是线程共享的区域。 4.2堆空间的分区:年轻代(新生区/新生代)伊甸园区(对象刚刚创建存储在此区域)
幸存者1区幸存者2区老年代(老年区) 4.3为什么要分区 可以根据对象的存活的时间放在不同的区域可以区别对待。对不同的区域采用不同的垃圾回收算法频繁回收年轻代较少回收老年代。 4.4创建对象,在堆内存中分布
1.新创建的对象都存储在伊甸园区。
2.当垃圾回收时。将伊甸园中垃圾对象直接销毁将存活的对象移动到幸存者1区。
3.之后创建的新对象还是存储在伊甸园区再次垃圾回收到来时将伊甸园中的存活对象移动到幸存者2区。同样将幸存者1区的存活对象移动到幸存者2区每次保证一个幸存者区为空的相互转换。
4.每次垃圾回收时都会记录此对象经历的垃圾回收次数当一个对象经历过15次回收仍然存活就会被移动到老年代。垃圾回收次数在对象头中有一个4bit的空间记录最大值只能是15。
5.老年区回收次数较少当老年区内存空间不够用时才会去回收老年代。
6.若老年区执行Major GC之后发现依然无法进行对象保存就会产出OOM异常。 4.5堆空间的配置比例
默认的新生代与老年代的比例: 1:2 可以通过 -XX:NewRatio2 进行设置
如果项目中生命周期长的对象较多,就可以把老年代设置更大. 在新生代中,伊甸园和两个幸存者区比例: 8:1:1
可以通过-XX:SurvivorRatio8 进行设置
对象垃圾回收的年龄 -XX:MaxTenuringThresholdN 4.6分代收集思想 Minor GC、Major GC、Full GC JVM 在进行 GC 时并非每次都新生区和老年区一起回收的大部分时候回收的都是指新生区。针对 HotSpot VM 的实现它里面的 GC 按照回收区域又分为两大类型:一种是部分收集一种是整堆收集。 部分收集:不是完整收集整个 java 堆的垃圾收集.其中又分为: 新生区收集(Minor GC/Yong GC):只是新生区(Eden,S0,S1)的垃圾收集。 老年区收集(Major GC / Old GC):只是老年区的垃圾收集。 整堆收集(Full GC):收集整个 java 堆和方法区的垃圾收集。 整堆收集出现的情况: 1System.gc();时 2老年区空间不足 3方法区空间不足 开发期间尽量避免整堆收集. 堆空间的参数设置 官方文档https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html 字符串常量池 在jdk7之后,将字符串常量池的位置从方法区转移到了堆空间中因为方法区的回收在整堆收集时发生回收频率低堆空间回收频率高。