JAVA内存模型浅析

  Java内存模型规范了Java虚拟机与计算机内存是如何协同工作的。Java虚拟机是一个完整的计算机的一个模型,因此这个模型自然也包含一个内存模型——又称为Java内存模型。

   Java内存机制又分为堆内存和栈内存,其中基本类型的变量和对象的引用变量都是在函数内栈内存中分配(保存引用的堆内存空间的地址);堆内存用来存放由new创建的对象和数组(保存每个对象的具体属性内容),是一个运行时数据区,堆是有JVM来负责的,优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据,缺点是在运行时动态分配内存,存取速度较慢。

 一: 下面通过几个实例演示下对象在堆内存和栈内存中的实例化过程。

  1.1 单个对象的创建与实例化过程如下,其中对象名称per被保存在栈内存中,name和age被保存在堆内存中。:

JAVA内存模型浅析_第1张图片
单个对象的创建


JAVA内存模型浅析_第2张图片
单个对象的实例化过程


 1.2 多个对象的创建和实例化过程如下:


JAVA内存模型浅析_第3张图片
多个对象的创建


JAVA内存模型浅析_第4张图片
多个对象的实例化过程

  1.3 对象引用的传递,将一个堆内存空间的使用权交给多个栈内存空间,每个栈内存空间都可以修改堆内存空间的内容。


JAVA内存模型浅析_第5张图片
对象引用传递实例


JAVA内存模型浅析_第6张图片
对象引用传递的内存分配过程

  总的来说,栈的优势是存取速度比堆快,仅次于寄存器,栈数据可以共享,但缺点是,存在栈中的数据大小与生存周期必须是确定的,缺乏灵活性;堆的优势是优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据,缺点是在运行时动态分配内存,存取速度较慢。

你可能感兴趣的:(JAVA内存模型浅析)