JVM笔记(3)--Java运行数据区域

第二部分自动内存管理

  第二章Java内存管理和内存溢出异常----Java运行时内存组成

    首先运行是内存组成的部分有:1 程序计数器。2 Java虚拟机栈。3本地方法栈。4 Java堆。5方法区。

    

              1 程序计数器

     1)程序计数器干什么用:在运行的内存呢中它相当于一个字节码执行的行号指示器,但是程序计数器所占的内存较小,在Java虚拟机的模型中,字节码解释器通过改变程序计数器的来选取下一条的行的字节码指令。

     2)线程私有:Java虚拟机的多线程通过轮流切换执行,他的一个处理器都会处理一个线程,当线程在切换的时候,我们就需要知道其执行的准确位置,程序计数器就是记录他上一次执行的位置,如果共用一个程序计数器就是导致混乱,所以在每一个线程中就需要一个独立程序计数器。

 

    2 Java虚拟机栈:

                 1)线程私有

                 2)干什么用:Java虚拟机栈是Java在执行方法中的内存模型,每执行一个方法就会有一个栈帧创建并且会入栈,而这个栈帧是用于存储局部变量表,操作数栈,动态链接,方法出口等,当方法执行完毕,这个栈帧就会在虚拟机栈出栈。

          

    3本地方法栈:

               1)线程共有

       2)干什么用:本地方法栈和虚拟机栈类似,区别是虚拟机栈为执行虚拟机中的原有的方法【原话:虚拟机栈为虚拟机执行Java方法(也就是字节码)服务】,但是本地方法栈是用于本地方法。

                 注:有的虚拟机把虚拟机栈和本地方法栈合二为一(HotSpot)

  

    4 Java堆:

               1)线程共有

          2)干什么用:Java堆是内存中最大的一块内存,主要是用于存放实例对象垃圾收集器管理的区域又称为 ”GC堆“。

        

     5 方法区:运行时常量区是方法区的一部分

                 1)线程共有

       2)干什么用:主要是用于存储被虚拟机加载的类型信息,常量,静态变量,即时编译器编译后的代码缓存数据等等。

       3)运行是常量区:它主要存储用于Classh中包含类的基本信息(如类的版本,字段,方法,接口等等)和编译期生成的各种字面量与符号引用。

未完待续!!!

posted @ 2020-09-26 12:48  林鱼  阅读(97)  评论(0编辑  收藏  举报