JVM运行时的内存模型

来源:互联网 发布:圣诞节 知乎 编辑:程序博客网 时间:2024/06/05 09:57

    java虚拟机会在执行java程序的过程中会把他所管理的内存分为若干个不同的数据区域,这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖于用户线程的启动和结束而销毁
这里写图片描述

1.程序技计数器

    是一块较小的内存空间 ,可以看做是当前线程所执行的字节码的行号指示器,在虚拟机的概念模型里(各种虚拟机可能会通过一些更高效 的方式去实现),通过改变这个计数器的值从而决定下一条所需要执行的 字节码,分支,循环,跳转,异常处理,线程恢复等基础功能都需要依赖 这个计数器去工作每条线程都需要一个独立的程序计数器,各线程互不影响,这是线程私有的.

2.Java虚拟机栈—本地方法栈

Java hostSport虚拟机 将两者合二为一
java虚拟机栈是线程私有的,虚拟机栈描述的是Java方法执行时的内存模型每个方法执行的同时都会创建一个栈帧用于存储局部变量表.操作数栈.动态链接.方法出口等信息。每一个方法从调用直至执行完成的过程就对应一个栈帧从入栈到出栈的过程

3.Java堆

    是java虚拟机所管理内存中最大的一块,被所有线程共享的一块内存区域,在虚拟机启动时被创建,此内存区域的唯一目的就是存放对象的实例
    J ava虚拟机规范:所有的对象实例以及数组都要在堆上分配但是随着虚拟机以及编译器的发展,所以对象都在堆内存上分配已经不是很绝对了(例如:栈上分配技术)

4.方法区

    与java堆一样,是所有线程所共享的区域,它用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后产生的代码等数据。当方法区无法满足内存分配的时候将会抛出OutOfMemoryException异常

原创粉丝点击