• JVM Runtime Data Area 运行时数据区


    JVM Runtime Data Area 运行时数据区

    上图,这个可以算是JVM的灵魂,Java运行时数据区。

    Java运行时数据区包含:程序计数器 Program Counter Register,方法区 Method Area,堆 Heap,虚拟机栈 VM Stack,本地方法栈 Native Method Stack

    堆Heap:

    属于虚拟机中所管理的内存最大的一块,是被所有线程共享的一块内存区域。这个区域的唯一目的就是存放对象实例。可以认为所有的对象实例都是在堆的内存空间进行内存的分配。

    既然是给对象实例分配内存,那么GC就会管理这个区域。GC本身包含了很多种类,各种新生代,老年代,永久代,Eden,Survivor。

    堆可以实现成固定大小,也可以是可扩展的。HotSpot可以通过 -Xmx -Xms设定。

    栈 Stack

    虚拟机栈 VM Stack:

    属于线程私有,描述的是Java方法执行的线程内存模型:和线程有关,每个方法被执行的时候,JVM都会同步创建一个栈帧Stack Frame,存储局部变量表,操作数栈,动态连接,方法出口等。每一个方法被调用直至执行完毕的过程,就对应一个栈帧在虚拟机中从入栈到出栈的过程。

    本地方法栈 Native Method Stacks

    执行的是VM使用的本地方法服务。HotSpot直接将本地方法栈和虚拟机栈合并。

    方法区 Method Area

    属于线程共享区域,存储已经被虚拟机加载的类型信息,常量,静态变量,JIT编译后的代码缓存等。

    JDK8之前,HotSpot设计者使用永久代实现了方法区,在JDK8以后,就放弃了永久代,把JDK7中永久代中的类型信息全部移到元空间中。

    程序计数器Program Counter Register

    占较小的内存空间,看成是当前线程所执行的字节码的行号指示器,是唯一个没有规定任何OutOfMemoryError的区域

     

  • 相关阅读:
    java常用类
    java throw和catch同时使用
    HTML5 input 类型: email及url
    Android中集成支付宝
    HTML5 预加载
    SQLite数据库
    Android开发中如何加载API源码帮助开发
    Java中的static
    HTML5 Web Storage 特性
    gdal1.10编译经验
  • 原文地址:https://www.cnblogs.com/dreamtaker/p/13293347.html
Copyright © 2020-2023  润新知