java 虚拟机内存分配

内存结构:

Java程序在运行时,需要在内存中分配空间,为了提高运算效率,有对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式

共分配了5块区域,每区域中处理方式不同

栈内存、堆内存、 方法区、本地方法区、寄存器

栈内存:

  • 用于存储局部变量
  • 当数据使用完,所占空间会自动释放

例如:

int a = 5;
int b = a;
b = 8;

这里写图片描述

堆内存

用于存放数组和对象,通过new建立的实例都存放在堆内存中
情景:分析数组如何存放在内存中

int [] a = new int[3]

这里写图片描述

例如:

int[] a = new int[3]
int[] b = a;
b[1] = 89;
a[1] = 98;
a = null;
问:此时有没有垃圾数据,答:没有,a的引用没有指向了,但是b的还在使用,所以没有垃圾数据

这里写图片描述

例如:

int[] a = new int[3]
int[] b = new int[3]

只要是new了就会开辟新的内存

这里写图片描述

总结

  • 数组和对象,通过new建立的实例都存放在堆内存中
  • 每个实体都有内存地制值
  • 实体中的变量都有默认初始化值
  • 当实体=null时,实体不在被使用,会在不确定的时间内被垃圾回收器回收
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章