JAVA基础篇003-栈内存、堆内存、垃圾回收机制

目录

一、栈内存(stack)

二、堆内存(heap)

三、垃圾回收机制 (GC)


一、栈内存(stack)

1)定义:编译器自动分配和释放的一块内存区域,类似于数据结构的栈;

2)存放内容:定义在方法中、局部代码块中的局部变量;

3)管理:所占用的空间直到相对应的代码块、方法执行完就立即自动释放;

4)优点:存取速度快,仅次于寄存器,数据可共享;

5)缺点:数据大小与生存期必须是确定的,缺乏灵活性。

二、堆内存(heap)

1)定义:程序运行时动态分配的内存区域,类似于数据结构的链表;

2)存储内容:通过new建立的实体,每一个实体都有自己的内存地址值,实体中的变量都有默认的初始化值;

扫描二维码关注公众号,回复: 11173957 查看本文章

3)管理: 当实体不再被使用的时候,会在不确定的时候,由垃圾回收器 (GC)回收(释放空间);

4)优点:动态“按需分配”内存大小,生存期不必事先告诉编译器,使用完毕后,GC会自动收走这些不再使用的内存块;

5)缺点:由于要在运动时才动态分配内存,相比于栈内存,它的存取速度较慢。

三、垃圾回收机制 (GC)

1)垃圾生成时间:当一个堆内存中的对象在栈中没有引用指向它的时候,这个对象就被JVM视为垃圾;

2)垃圾回收时间:垃圾不会被立刻回收,而是在未知的时间点,JVM启动GC来回收这个对象所占用的空间,无需手动清理;

PS:

int[] x =new int[3];

int[] y =x;

y[1] =89;

x =null;

这段程序执行完之后,在堆内存中有没有垃圾对象?

分析:由于x变成null之前,已经把数组的首地址的值传给了y,所以x变成null之后,y还是指向了内存中的数组对象,程序执行完之后,对内存中的数组对象在栈内存中仍然有引用变量指向它,所以堆内存中没有垃圾对象。

如图:

JAVA基础篇专栏持续更新中,更多JAVA基础知识请移步专栏垂阅,希望对您有帮助!

原创文章 15 获赞 20 访问量 7396

猜你喜欢

转载自blog.csdn.net/duoyu779553/article/details/105825978
今日推荐