JVM

189 阅读1分钟

JVM

一、内存结构

1.线程私有区域

小结

  • JVM内存模型划分为线程私有区域共享区域

  • 虚拟机栈/本地方法栈负责存放线程执行方法栈帧

  • 程序计数器用于记录线程执行指令的位置

  • 方法区(元数据区)存储类的元数据信息、静态变量、常量等数据

  • 堆(heap)使用new关键字创建的对象都会进入堆中,堆被划分为新生代和老年代

二、垃圾回收算法

1.标记清除

容易产生内存碎片

2.标记整理

移动成本高

3.复制算法

复制算法会将JVM推分成二等分,如果堆设置的是1g,那使用复制算法的时候堆就会有被划分为两块区域各512m。给对象分配内存的时候总是使用其中的一块来分配,分配满了以后,GC就会进行标记,然后将存活的对象移动到另外一块空白的区域,然后清除掉所有没有存活的对象,这样重复的处理,始终就会有一块空白的区域没有被合理的利用到。

4.小结

  • 标记清除速度快,但是会产生内存碎片;
  • 标记整理解决了标记清除内存碎片的问题,但是每次都得移动对象,因此成本很高;
  • 复制算法没有内存碎片也不需要移动对象,但是导致空间的浪费;

参考文献

大厂面试经:高频率JVM面试问题整理!

图例