美文网首页
深入理解java虚拟机之jvm内存模型

深入理解java虚拟机之jvm内存模型

作者: 个子太高的程序媛 | 来源:发表于2018-10-22 11:08 被阅读0次

    深入理解JVM—JVM内存模型

    java的内存模型包括:本地方法区,java堆,Java虚拟机栈,本地方法栈,程序计数器

    1.程序计数器(线程私有)

    内存很小,用做当前线程所执行的字节码的行号指示器,也就是说当前线程接下来要执行的操作是计数器的值所决定的。每个线程有自己独立的计数器(线程私有)相互操作互不影响

    2.java虚拟机栈也就是java栈(线程私有)

    它也是线程私有的,每个方法被执行的时候都会同时创建一个栈,存放了编译期可知的各种基本数据类型,也可能存放指向对象起始地址的引用指针,所需的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在栈中分配多大的局部变量空间是完全确定的,在方法运行期间不会改变局部变量表的大小。

    对这个区域规定了两种异常状况:如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError 异常;如果虚拟机栈可以动态扩展(当前大部分的Java 虚拟机都可动态扩展,只不过Java 虚拟机规范中也允许固定长度的虚拟机栈),当扩展时无法申请到足够的内存时会抛出OutOfMemoryError 异常。

    3.本地方法栈(线程私有)

    本地方法栈与虚拟机栈的区别不过是虚拟机栈为虚拟机执行Java 方法服务,而本地方法栈则是为虚拟机使用到的Native 方法服务(其余基本与虚拟机栈一样)

    4.Java 堆(线程共享)

    此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存,Java 堆是垃圾收集器管理的主要区域,因此很多时候也被称做“GC 堆”,可通过-Xmx和-Xms 扩展大小

    5.方法区(又称静态区 包含所有的class和static变量 线程共享)

    用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据

    相关文章

      网友评论

          本文标题:深入理解java虚拟机之jvm内存模型

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