美文网首页
Java内存结构知识点速查

Java内存结构知识点速查

作者: whoami2019 | 来源:发表于2018-05-06 11:45 被阅读0次
java虚拟机运行时数据区

Java虚拟机在运行程序时会把其自动管理的内存划分为以上几个区域,每个区域都有的用途以及创建销毁的时机,其中绿色部分代表的是所有线程共享的数据区域,而蓝色部分代表的是每个线程的私有数据区域。

  • 程序计数器
    线程私有的内存区域。存储当前线程所执行的字节码的行号指示器,每条线程均有自己的程序计数器,而且各个线程间的程序计数器互不影响,独立存储。此区域是唯一一个在虚拟机规范中没有规定任何OutOfMemonyError情况的区域。

  • 虚拟机栈
    也是线程私有。该区域描述的是Java方法执行的内存模型:每个方法执行时都会创建一个栈帧用于存储局部变量表、操作栈、动态链接、方法出口等信息。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机中从入栈到出栈的过程。该区域规定了StackOverflowError和OutOfMemonyError异常。

  • 本地方法栈
    本地方法栈属于线程私有的数据区域,这部分主要与虚拟机用到的 Native 方法相关,一般情况下,我们无需关心此区域。

  • Java堆
    所有线程共享的一块内存区域。是Java虚拟机所管理的内存中最大的一块,在虚拟机启动时创建。该区域作用是存放对象实例,几乎所有的对象实例都在这里分配内存。Java堆是垃圾收集器管理的主要区域,也被称做“GC”堆。从内存回收的角度看,因为现在的收集器基本上都是采用分代收集算法,所以Java堆还可以细分为:新生代和老年代,再细分有Eden空间,From Survivor空间、To Survivor空间等,进一步划分的目的是为了更好的回收或者更快地分配。虚拟机规范中规定该区域可能发生OutOfMemonyError异常。

  • 方法区
    也是各个线程共享的内存区域,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。要注意的是Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它有个别名叫做Non-Heap,目的是和Java堆区分开来。该区域可以选择不实现垃圾回收,因为回收的情况难以令人满意,但是并不是如它的名字"永久代"一样不需要进行垃圾收集,在有些情况下还是有回收的必要。虚拟机规范中规定该区域可能发生OutOfMemonyError异常。

相关文章

网友评论

      本文标题:Java内存结构知识点速查

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