Java内存管理机制

一、Java内存分配

Java将一整块Java内存划分为几个部分:

方法区

        存储的是Java的类信息和常量,静态变量等,比如public final static 这样的常量和静态变量等,这个区域是所有线程都共享的

虚拟机栈

        储存的是局部变量表和操作树栈等,为Java方法来服务的

本地方法栈

        为native方法来服务的

        内存中最大的一块区域,被所有线程共享,每个对象的分配内存都是在堆上面分配的,虚拟机栈中分配的只是引入,指向堆中真正的对象,垃圾回收器GC 主要作用的区域,内存泄漏也是发生在堆当中的

程序计数器

        当前线程执行的方法执行到了第几行

二、Java内存回收算法

标记-清除算法

  • 标记出所有要回收的对象
  • 统一回收所有被标记的对象
  • 特点:
    • 效率不高
    • 产生大量不连续内存碎片

复制算法

  • 将内存分为大小相等的两块
  • 一块内存用完之后复制存活对象到另一块
  • 特点
    • ​​​​​​​实现简单,运行高效
    • 浪费一半空间,代价大

标记整理算法

  • 标记过程与标记清除算法一样
  • 存活对象往一端移动
  • 清理其余内存
  • 特点:
    • ​​​​​​​避免标记-清理导致的内存碎片
    • 避免复制算法的空间浪费

分代收集算法

  • 结合多种收集算法优势
  • 新生代对象存活率低,采用复制算法
  • 老年代对象存活率高,采用标记-整理算法

你可能感兴趣的:(java,java,jvm,开发语言)