Java内存管理机制

一、Java内存分配

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

方法区

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

虚拟机栈

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

本地方法栈

        为native方法来服务的

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

程序计数器

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

二、Java内存回收算法

标记-清除算法

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

复制算法

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

标记整理算法

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

分代收集算法

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值