面试题答案
一键面试存储内容
- 栈:主要存储方法的局部变量(包括基本数据类型和对象引用)、方法的参数、返回值等。每一个方法被调用时,都会创建一个栈帧,栈帧中存放这些数据。
- 堆:用于存储对象实例以及数组。所有通过
new
关键字创建的对象都存放在堆中。
生命周期
- 栈:随着方法的调用而创建,随着方法的结束而销毁。每一个栈帧的生命周期与对应的方法调用紧密相关。
- 堆:从Java虚拟机启动时创建,直到Java虚拟机关闭时才销毁。堆中的对象生命周期取决于是否还有引用指向它,当没有任何引用指向对象时,对象会在垃圾回收机制运行时被回收。
内存分配方式
- 栈:内存分配和释放都具有确定性,分配速度快。当方法调用时,栈帧在栈中按照顺序依次创建,方法结束后,栈帧被自动弹出,内存释放。
- 堆:内存分配相对复杂,因为对象创建的时间不确定,并且对象的生命周期也难以准确预测。堆内存分配需要考虑内存碎片、垃圾回收等问题,分配速度相对较慢。对象创建时,会在堆中寻找合适的内存空间进行分配,如果堆内存不足,可能会触发垃圾回收机制来释放空间。