深入Java虚拟机阅读感-Java内存各个区域的描述(一)

版权声明:版权归作者所有 https://blog.csdn.net/yulin959/article/details/81097581

Java虚拟机管理的内存数据模型如下:

1.程序计数器

            程序计数器(Program counter Register)是程序执行字节码的行号指示器,每个线程都有独立的程序计数器,当执行其他线程切换到执行线程时从当前的线程计数器当中获取当前执行字节码的行号继续执行。如果程序计数器正在执行Java方法则记录当前字节码地址,如果执行的是Native方法则程序计数器为Undefined。程序计数器也是在Java虚拟机规范当中唯一一个规定任何OutOfMemoryError区域。

2.java虚拟机栈

           java虚拟机栈也是线程私有的。主要保存有byte,short,int,long,boolean,chart,float,double以及对象引用地址。

在虚拟机栈中double和long两个64位数据将占用两个临时变量空间。其他的各自占用1个变量空间(slot)

     Java虚拟机栈在程序运行期间能够抛出两种错误,StatckOverflowError超过栈的深度抛出,当申请内存时内存不足时也会抛出OutOfMemoryError内存溢出错误。

3、本地方法栈

              在不同的虚拟机当中有个不同的定义。在HotSpot虚拟机当中将本地方法栈和虚拟机栈二合一。本地方法栈与虚拟机栈有着相似的作用。也会抛出StatckOverflowError和OutOfMemoryError错误。

4、Java堆

             Java堆是 虚拟机管理内存当中最大的一个区域。Java当中绝大部分对象与数组都需要在堆中申请内存。

             Java堆是垃圾回收器主要的管理区域。也叫(GC堆)。Java堆可以细分为年轻代,老年代,如果在这个基础上再进行细分则可以分为:Eden空间,From Survivor空间等。Java堆空间在物理空间上可以不连续,但是在逻辑上必须是连续的。

           虚拟机可以指定堆的大小参数为(-Xmx -Xms)

5、方法区

              方法区与Java堆相似,是所有线程的共享区域。主要保存有静态变量,类加载信息,常量,编译器动态编译的字节码信息等。

6、运行时常量池

               运行时常量池是方法区的一部分,主要保存了类的版本号,字段,方法接口描述等信息。

7、直接内存

             直接内存指物理内存大小,该区域也会发生内存溢出错误。主要原因是受限于物理内存大小;

猜你喜欢

转载自blog.csdn.net/yulin959/article/details/81097581
今日推荐