JVM简介(一)——内存模型

关于JVM,网上文章铺天盖地。有深有浅,有对有错。这里从我关心的角度,介绍JVM部分原理。或者说很多都是hotspot的实现原理。
 
一。JVM中内存情况
如下图。分成三部分:
(1)线程栈——每个线程都有对应的栈区,调用一个方法,会压入一个方法帧。
(2)——用于对象的空间的分配。类的实例都是在堆内存上进行分配的。下文暂称为JAVA堆
(3)方法区——方法区底层存储也是在计算机堆内存上。但是为了与JVM给对象实例分配内存的堆进行区分,才将方法区称为非堆(non-heap)
 
换句话说,JAVA堆与方法区都在计算机堆内存上。只不过JAVA堆是留给用户程序用的,方法区是JVM自己用的
 
二。各区存放的内容
方法区存放的是:class的相关信息、静态变量、常量池、方法本身

栈存放的是:一个个栈帧(Stack Frame),调用一个方法会压入一个栈帧,内容是该方法中的基本类型变量、对象变量的引用、中间变量、形参和方法有关的操作,如出口等

堆存放的是:实例化的对象

 

运行过程中JVM内存中的情况。

方法B相关栈被压入栈中,其中有对对象X的引用指向了堆中的对象X,其中是存放了对象的成员变量等该对象能够获取到方法区中该类的信息,包含了静态变量、方法等

JVM简介(一)——内存模型

posted @ 2018-03-16 16:25  架构之美,智慧之光  阅读(2491)  评论(0编辑  收藏  举报