Java虚拟中内存分块

Java虚拟机JVM(Java Virtual Machine)中内存分块

  JAVA中通常分为5个区域虚拟机栈、堆、方法区、程序计数器、本地方法区。我们一般讲的Java虚拟机管理的四个区域虚拟机栈、堆方法区和程序计数器

 

 

虚拟机栈

虚拟机栈通常也叫栈(stack),是有多个栈帧组成的;是线程私有的,每调用一个方法就在栈中创建一个栈帧,用于存放该方法中的局部变量等信息。

它的生命周期与方法的生命周期一致。也就是说,当一个方法调用完成,该栈帧就被摧毁,再次调用该方法就重新在栈中开辟一个新的栈帧。这也是局部变量作用域小的体现。

 

堆(heap)是java虚拟机管理空间最大的一块区域,它被所有的线程共享

存放了所有对象的数据,每个对象在堆中都有一个唯一的地址,被称为引用,相当某些语言中的指针。

当方法在栈帧中创建一个对象时,就在堆空间中开辟一块内存,分配一个地址,而栈中的对象就是存放堆中的地址,称之为‘引用’

堆也是Java垃圾回收器回收的主要区域,所以也被称为‘GC堆’。当堆中的数据不再被引用的时候,该数据就成为了垃圾,等待Java虚拟机的垃圾回收机制回收它。

 

方法区

是将字节码文件加载入Java虚拟机时,存放的改字节码文件里的信息,包括方法信息、字段信息、常量的一些信息等,常量所在的区域也被称为常量区或常量池;池中的数据元素和数组的元素一样是通过索引访问的。

 

程序计数器

这是一个很小的区域,它存放了当先线程所运行的字节码的行号。分支、选择、循环等基础功能都靠它实现。

在任何一个时刻,一个处理器或一个内核只会运行指令中的一行,所以每个线程的程序计数器是独立的互不影响。

 

本地方法栈

该栈中存放的是其他语言实现的一些方法(Native方法)等信息,不受JVM的的限制。

 

 

posted @ 2017-09-29 13:37  那么长的代码  阅读(514)  评论(0编辑  收藏  举报