1. 堆与栈的区别?
1-1. 数据存放位置: 数据都存放于RAM (Random Access Memory).
1-2. 存放数据的类型:stack栈中保存方法中的基本数据类型(int, double, float, char.)
heap堆中保存类的对象(用过new等方式创建的对象)
1-3. 与线程的关系: 在多线程应用中,每个线程拥有自己的栈stack, 多个线程共享堆heap;
1-4. 生命周期: 随着方法调用的完成并返回,stack栈上的所有数据将被销毁和空间被回收。
1-5. 内存大小是否可变: stack为固定内存空间,如果不足,抛stack overflow异常
heap可以动态更改内存大小(由操作系统实施)
1-6. 存取速度: stack 存取速度更快,它和内存空间关联.
2. JVM 垃圾回收机制
2-1. 引用计数
2-2. 追踪标记
2-3. 标记清除
2-4. 压缩回收
2-5. 复制回收