北京网站建设哪家强,营销型企业网站建设的内容,上海网页设计公司济南兴田德润团队怎么样,小说网站做公众号好还是网站好1.JVM核心组成 2.JVM 运行时数据区#xff08;jdk8#xff09;
程序计数器#xff1a;线程私有#xff0c;当前线程所执行字节码的行号指示器 jvm栈#xff1a;线程私有#xff0c;Java 虚拟机栈为 JVM 执行 Java 方法服务 本地方法栈#xff1a;线程私有#xff0c;本…1.JVM核心组成 2.JVM 运行时数据区jdk8
程序计数器线程私有当前线程所执行字节码的行号指示器 jvm栈线程私有Java 虚拟机栈为 JVM 执行 Java 方法服务 本地方法栈线程私有本地方法栈则为 JVM 使用到的 Native 方法服务 堆线程共享 主要存放对象实例以及数组 方法区(元空间) 线程共享 存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码
2.1程序计数器 每个线程都有一个独立的程序计数器为了确保线程切换后上下文切换能恢复到正确的执行位置。指向下一个将要执行的指令代码。如果线程执行 Java 方法这个计数器记录的是正在执行的虚拟机字节码指令的地址如果执行的是 Native 方法计数器值为Undefined。不会出现OOM问题。
2.2jvm栈 -Xss 设置栈大小。一般是kb级别 256k 每个方法在执行时都会创建一个栈帧。栈帧中存储了局部变量表、操作数栈、动态连接和方法出口等信息。每个方法从调用到运行结束的过程就对应着一个栈帧在栈中压栈到出栈的过程。栈FILO 局部变量表中存储了基本数据类型boolean、byte、char、short、int、float、long、double的局部变量包括参数、和对象的引用地址String、数组、对象等但是不存储对象的内容。局部变量表所需的内存空间在编译期间完成分配在方法运行期间不会改变局部变量表的大小。 操作数栈的元素可以是任意的Java数据类型。可以理解为栈帧中用于计算的临时数据存储区。
StackOverflowError栈溢出错误。一个线程在计算时所需要用到栈大小 配置允许最大的栈大小。例如方法递归不给出口。 OutOfMemoryError内存不足
2.3本地方法栈 native方法调用信息由C 或者 C实现的接口
2.4堆 堆是Java虚拟机所管理的内存中最大的一块存储区域。堆内存被所有线程共享。主要存放使用new关键字创建的对象对象实例等。所有对象实例以及数组都要在堆上分配。垃圾收集器就是根据GC算法收集堆上对象所占用的内存空间收集的是对象占用的空间而不是对象本身。 Java堆分为年轻代Young Generation和老年代Old Generation默认比为1:2 年轻代又分为伊甸园Eden和幸存区Survivor区幸存区又分为From Survivor空间和 To Survivor空间。 8:1:1 年轻代存储“新生对象”我们新创建的对象存储在年轻代中。当年轻内存占满后会触发Minor GC(young GC)清理年轻代内存空间。 老年代存储长期存活的对象和大对象。年轻代中存储的对象经过多次GC后仍然存活的对象会移动到老年代中进行存储。老年代空间占满后会触发Full GC。 注Full GC是清理整个堆空间包括年轻代和老年代还有元空间(很难清理多少垃圾)。如果Full GC之后堆中仍然无法存储对象就会抛出OutOfMemoryError异常。
2.5 方法区Method Area 所有线程共享的区间用于存储已被虚拟机加载的类的元信息、常量、静态变量。即时编译器编译后的代码。静态变量常量类元信息版本、方法、字段等运行时常量池存在方法区中。 注 JDK1.8 使用元空间 MetaSpace 替代方法区元空间并不在 JVM中而是使用本地内存。元空间两个参数 MetaSpaceSize初始化元空间大小控制发生GC阈值MaxMetaspaceSize 限制元空间大小上限防止异常占用过多物理内存