JVM内存区域划分

企业微信截图_16269389364939.png

本地方法栈

保存native方法进入区域的地址

程序计数器

用于记录当前执行字节码指令的位置

虚拟机栈

每个线程都有自己的虚拟机栈,用来存放执行方法时的局部变量、操作栈、动态链接、方法返回地址等

堆区

对象创建后,数据会保存到堆区,堆区也是jvm进行垃圾回收的地方

垃圾回收

  • 回收对象判断算法
    1.引用计数法
    2.可达性分析
  • 垃圾回收算法
    1.标记清除法
    产生内存碎片
    2.标记整理法
    在标记清除的基础上,进行整理,效率低
    3.标记复制法
    耗内存
    4.分代收集法
    将堆区分为新生代、老年代
    4.1 新生代
    每次垃圾回收都会有大量的对象死去,采用标记复制法
    新生代分为 Eden、Survivor From、Survivor To三块,比例为8:1:1
    Survivor区相当于Eden和老年代中间的缓存
    新产生的对象都会进入Eden区等待垃圾回收,每次垃圾存活的对象会进入 Survivor From区
    而在From区中,仍存活的对象会根据他们的年龄值来决定去向。(From Survivor和To Survivor的逻辑关系会发生颠倒: From变To , To变From,目的是保证有连续的空间存放对方,避免碎片化的发生)

4.2 老年代
经过多次垃圾回收仍然存活的对象会进入老年代,老年代每次垃圾回收只有少量的对象死去,采用标记清除或者标记整理法

方法区(JDK1.8后也叫metaspace区)

存放常量池、被加载的类的信息,可以看成是类(Class)的元数据

你可能感兴趣的:(JVM内存区域划分)