美文网首页java收录JVM
一:jvm的五大内存区

一:jvm的五大内存区

作者: 吴__磊 | 来源:发表于2018-08-12 14:53 被阅读24次

    jvm五大内存区域(即jvm运行时数据区),描述的是类被加载时,经过解析后,存储到特定的数据区。

方法区:又被称为永久代,用来存储类的信息,例如:方法,方法名,返回值,常量。

:存放new出来的对象信息, 成员变量,及成员变量。

程序计数器:指向当前线程正在执行的行号,用来保证线程切换时回到程序调用的位置。(例如:在a方法里面掉用了b方法,代码从上往下执行,执行到掉用b方法的那行时,指针会记录下这个位置,然后执行b方法里面的逻辑,b方法正常执行完或异常退出,指针都会回到a方法里面。)

本地方法栈:和虚拟机栈类似,只是它描述的是为虚拟机是用到的Native方法出栈和入栈的过程(通常我们不需要了解这块,它底层是C语言实现的,有兴趣的同学可以了解一下)。

虚拟机栈:描述的是线程进栈出栈的过程,线程结束内存自动释放。它用来存储当前线程运行方法所需要的数据、指令、返回地址。(即局部变量和正在调用的方法)     方法被调用时会在栈中开辟一块叫栈帧的空间,方法运行在栈帧空间中。

如下图:栈帧的逻辑内存图里面包含局部变量表,操作数栈,动态链接,出口...(注意:栈帧里面包含但不仅仅只有这些, 程序员开发主要是关注这些 )。  

(局部变量表): 存放该方法的参数变量,和方法内部定义的局部变量,若该变量为引用类型,则存的该变量的引用地址。在java文件编译成.class文件的时候,这个表的容量最大值就确定下来了。

(操作数栈):也称为表达式栈,通过字节码指定把值压入栈定,稍后另一个指令就可以弹出这个值使用。

(动态链接):也称为常量池。用来保存常量值和符号引用。符号引用:A方法在运行时调用B方法,就是通过B方法的符号引用去找到B的内存地址。)

(出口):描述的就是出栈的过程。方法的返回有两种情况。(正常退出时:根据方法的定义来决定是否要传返回值给上层调用者。异常退出时:则是需要通过异常处理来确定。无论通过哪种方式退出,都会跳到当前方法被调用的位子。)

总结:方法区和堆是所有线程共享的,而栈和计数器是线程私有的。栈处理程序运行的问题,堆处理数据的存储问题。所以才有堆栈分离。

相关文章

  • 一:jvm的五大内存区

    jvm五大内存区域(即jvm运行时数据区),描述的是类被加载时,经过解析后,存储到特定的数据区。 方法区:又被...

  • JVM总结

    1. JVM五大组成部分: PC栈本地方法栈堆方法区 2. GC: 2.1 内存管理机制 显示内存管理隐式内存管理...

  • JVM类加载机制总结

    JVM内存分区:五大区 1.Java堆:几乎所有的对象实例和数组都在这类分配内存2.方法区:它用于存储已经被虚拟机...

  • JVM的内存结构及GC机制

    JVM内存管理 根据JVM规范,JVM把内存划分成了如下几个区域: 方法区(Method Area) 堆区(Hea...

  • 阿里常见面试题:JVM的内存模型有哪些?

    JVM的内存模型有: 堆、栈、永久区、寄存器,堆外内存 一、基本概念: JVM把内存区分为堆区(heap)...

  • 深入理解Java虚拟机 之 垃圾回收

    哪些内存需要回收 猿们都知道JVM的内存结构包括五大区域:程序计数器、虚拟机栈、本地方法栈、堆区、方法区。其中程序...

  • iOS内存五大区

    iOS内存五大区 在iOS中,内存主要分为:栈区、堆区、全局区(静态区)、常量区以及代码区这五大区。本文将对这五大...

  • 第1篇 JVM相关

    JVM 堆、栈区、本地内存 JVM内存 线程共享区 JAVA堆 方法区,如果耗尽会抛出OOM异常Out of Me...

  • JVM内存直观描述

    JVM内存简单描述 java的JVM内存可分为3个区:堆(heap),栈(stack)和方法区(method)。 ...

  • JVM学习——运行时数据区

    一,JVM内存结构 JVM内存主要分为:堆内存、方法区和栈 堆内存存储对象实例,由新生代和老年代组成 方法区存储类...

网友评论

    本文标题:一:jvm的五大内存区

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