美文网首页
JVM运行时数据区

JVM运行时数据区

作者: packet | 来源:发表于2018-07-20 19:40 被阅读0次
JDK6 运行时数据区

一、程序计数器:不会抛出任何异常

线程如果执行的是Java方法,该计数器是虚拟机字节码指令的地址;

线程如果执行的是Native方法,改计数器的值是零。

二、JVM方法栈:Java方法的内存模型。

每个线程独自占有一个方法栈,该栈的生命周期与线程相同。

栈中的元素是栈帧,其中存储局部变量表和方法出口等数据。入栈和出栈表示Java方法的调用和退出。

两种异常:

1)OutOfMemoryError:unable to create new native thread. 线程数量增加,导致内存不够,无法为新线程分配内存。

还有一个原因也会抛出异常,就是OS对线程数量的限制,命令是ulimit。这个原因在UPOS项目中遇到过。

2)StackOverflowError:线程调用方法的深度过深,超过了JVM的限制,此异常常见于递归。

-Xss可设置每个线程的JVM栈的大小。如果减小这个值,那么线程的数量可以增多。增大这个值方法调用深度也会增加。

三、本地方法栈:为执行本地方法服务。也会抛出OutOfMemoryError和StackOverflowError。

HotSpot虚拟机已经将本地方法栈和JVM方法栈合二为一。

四、堆(Heap)。所占内存最大,因为这是存放对象的主要空间。

分为新生代和老年代。

新生代包括eden区和两个survivor区。

异常:OutOfMemoryError

-Xms20m -Xmx20m 可以设置堆的最小值和最大值

五、方法区(持久区) JDK8以后消失

存放类的元信息

异常:OutOfMemoryError

UPOS项目加载规则文件(file.drl),每个规则被转化成一个Class,导致方法区空间不够。

六、运行时常量池

class文件被加载时,其中的常量将会被加载到常量池中,

常量不仅在编译时产生,可以在运行时产生。比如String.intern(),如果常量池中的常量不断增多,也会引起OutOfMemoryError.

在JDK6之前存放在方法区,之后存放在堆中。

七、Metaspace:元空间,JDK8以后产生,存放类元信息

元空间不在虚拟机中,而是在本地内存中。

-XX:MetaspaceSize -XX:MaxMetaspaceSize

相关文章

  • Java虚拟机02-JVM运行时数据区

    1 JVM运行时数据区 JVM运行时数据区(JVM Runtime Area)其实就是指JVM在运行期间,其对计算...

  • JVM学习笔记

    JVM 注意:0、JVM运行时数据区和JVM内存模型不要搞混1、运行时数据区可以分为:堆、方法区、虚拟机栈、本地方...

  • 线程在JVM中的运行原理

    。线程在启动运行时,主要是在运行时数据区(JVM的内存模型),而JVM的运行时数据区主要包括堆,方法区,Java栈...

  • jvm 运行时数据区-01

    jvm 运行时数据区 jvm 运行时数据区 ,将内存划分为5个区域,java 代码在运行时 类里面的 组成部分 分...

  • 线程安全之可见性问题

    Java内存模型 VS JVM运行时数据区 首先Java内存模型(JMM)和JVM运行时数据区并不是一个东西,许多...

  • jvm内存模型及GC记录

    在jvm中有一块非常重要的区域,就是jvm运行时数据区。今天对该区域做下总结和记录: 在讨论jvm运行时数据区前,...

  • java面试jvm总结

    JVM→ JVM 内存结构运行时数据区:堆、栈、方法区、直接内存、运行时常量池、堆存放对象, 方法区他用于存储已被...

  • Java从入门到入坑(底层篇)

    01:JVM 1:JVM内存结构 class 文件格式、运行时数据区:堆、栈、方法区、直接内存、运行时常量池、 堆...

  • Java虚拟机内存区域详解

    JVM 运行时的数据区域 首先获取一个直观的认识: 总共也就这么 5 个区(直接内存不属于 JVM 运行时数据区的...

  • 《深入理解Java虚拟机-JVM高级特性与最佳实践》学习总结(第

    一、运行时数据区 JVM将我们机器上的内存当做一个运行时数据区来进行处理。该运行时数据区包括以下几个部分: 方法区...

网友评论

      本文标题:JVM运行时数据区

      本文链接:https://www.haomeiwen.com/subject/qgnqmftx.html