简述JVM的工作机制,jvm的基本结构

  简述JVM的工作机制,jvm的基本结构

  

  

一、java内存组成介绍:堆(Heap)和非堆(Non-heap)内存

  

二、JVM内存区域模型

  1.方法区又称“永久生成”和“非堆”,用于存储虚拟机加载的类信息、常量和静态变量,是所有线程共享的内存区域。默认情况下,最小值为16MB,最大值为64MB。您可以通过-XX:PermSize和-XX:MaxPermSize参数来限制方法区域的大小。

  运行时常量池:是方法区的一部分,主要内容来自JVM对类的加载。

  除了版本、字段、方法、接口等描述信息。在类文件中,还有一个常量池,用于存储编译器生成的各种符号引用。在类被加载后,这部分将被放入方法区域的运行时常量池中。

  2.虚拟机栈

  它描述了java方法执行的内存模型:每个方法执行时都会创建一个“堆栈框架”来存储局部变量表(包括参数)、操作堆栈、方法出口等信息。每个方法都被调用到执行的进程中,对应一个栈帧从栈到虚拟机栈中栈的过程。声明和线程一样,都是线程私有的。

  局部变量表存储编译器已知的各种基本数据类型(boolean、byte、char、short、int、float、long、double)和对象引用(引用指针,而不是对象本身)。其中,64位长的double数据会占用两个局部变量的空间,其他数据类型只占用一个。

  局部变量表所需的内存空间是在编译过程中分配的。在进入一个方法时,完全确定这个方法需要在堆栈框架中分配多少个局部变量,运行时堆栈框架不会改变局部变量表的大小空间。

  3.本地方法栈

  类似于虚拟机栈,不同的是虚拟机栈服务于虚拟机执行的java方法,而本地方法栈服务于原生方法。

  4.堆

  GC heap又称java heap,是java虚拟机管理的最大内存区域,也是所有线程共享的内存区域,在JVM启动时创建。这个内存区域存储对象实例和数组(所有新对象)。

  其大小由-Xms(最小值)和-Xmx(最大值)参数设置。-Xms是JVM启动时应用的最小内存,它是操作系统物理内存的1/64,但缺省情况下小于1G。-Xmx是JVM可以申请的最大内存,默认为物理内存的1/4但小于1G。默认情况下,当空闲堆内存小于40%时,JVM会将堆增加到-Xmx。当空闲堆内存大于70%时,JVM会将堆的大小减小到-Xms指定的大小,可以用xx: maxheap reset=指定。对于正在运行的系统,为了避免在运行时频繁调整堆的大小,通常会将-Xms和-Xmx的值设置为相同。

  现在的收集器都采用分代收集算法,堆分为新生代和老年。新生代主要存储新创建的对象和尚未进入旧时代的对象。老纪储存了新生代GC(小GC)多次幸存下来的物体。

  年轻一代是伊甸从一个空间到另一个空间的人物。

  Eden存储新对象。

  有两个survivorspaces,它们存储在每次垃圾收集中幸存的对象。

  老一代延长一代是图中的旧空间。

  在主应用程序中存储生命周期长的活对象5.程序计数器

  它是最小的内存区域,它的作用是当前线程执行的字节码的行号指示器。在虚拟机模型中,字节码解释器通过改变这个计数器的值来选择下一个要执行的字节码指令。分支、循环、异常处理、线程恢复等基本功能。全靠柜台。

  

三、直接内存

  直接内存不是虚拟机内存的一部分,也不是Java虚拟机规范中定义的内存区域。jdk1.4新加入的NIO,引入了通道和缓冲区的IO模式。它可以通过调用本机方法直接分配堆外内存。这种堆外内存是本地内存,不会影响堆内存的大小。

  

四、Java堆内存的10个要点

  更多相关知识请关注java基础教程。以上是JVM内部结构和运行机制的详细内容。更多信息请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: