1.虚拟机栈描述的是方法执行的内存模型,每个方法被调用时都会在栈内创造一个栈帧(用来存储局部变量、方法出口等)
JVM每个线程创建一个栈,用以存放该线程执行的方法信息(用户存放实际参数,局部变量等)。
说明:
(1)
(虚拟机栈内保持着一个个的栈帧,方法调用结束会进行出栈动作)
栈属于线程私有,不被线程共享
栈存储的特点是先进后出,后进先出。
栈是由系统自动分配,具有空间连续性、速度快。
(2)
堆特点:
堆用于存放创建好的对象。
JVM只有一个堆(一个程序内),被所有线程共享
堆的空间不连续,速度慢
(3)
方法区:
不同jdk版本方法区的实现不一样,是一种规范
JVM只有一个方法区,被所有线程共享
严格讲,方法区也是堆,是用于存储类、变量信息等。
用来存放恒定不变的信息。
2.垃圾回收过程一般分为两步,是哪两步?
发现无用的对象
回收无用对象占用的内存空间。
垃圾回收aaqaaa机制保证可以将”无用的对象”进行回收。无用的对象指的就是没有任何变量引用该对象。Java 的垃圾回收器通过相关算法发现无用对象,并进行清除和整理。
3.垃圾回收常见的两种算法是什么?
引用计数法和引用可达法
4.堆内存划分成:年轻代、年老代、永久
代。垃圾回收器划分成:Minor GC、Majo r GC、Full GC。这三种垃圾收回器都对应哪些区域 ?
Minor GC:用于清理年轻代区域。Eden 区满了就会触发一次MinorGC。清理无用对象,将有用对象复制到“Survivor1"、“S urvivor2"区中。
Major GC:用于清理老年代区域。
Full GC: 用于清理年轻代、年老代区域。成本较高,会对系统性能产生影响。
5.对 JVM 调优的过程中,很大一部分工作就是对于 Full GC 的调节。这句话对吗?对
6.System.gc()的作用是什么?
该方法只是通知JVM,并不是运行垃圾回收器。