美文网首页
关于内存要懂得

关于内存要懂得

作者: Bug制造者 | 来源:发表于2021-06-29 09:49 被阅读0次

Java内存模型

  • 虚拟机栈(线程私有)
    局部变量表、操作数栈、动态链表、方法出口等信息
  • (线程共享)
    实例对象
  • 方法区(线程共享)
    类信息、常量、即时编译器编译后的代码
  • 程序计数器(线程私有)
    字节码行号指示器,记录当前线程执行到哪一行
  • 本地方法栈(线程私有)
    和虚拟机栈类似,虚拟机栈为虚拟机执行java方法的服务;本地方法栈是为虚拟机执行native方法的服务

程序计数器

线程计数器中如果正在执行java方法,计数器记录的是当前指令的地址
如果是native方法,计数器记录为空

堆内存=新生代+老年代

  • 新生代
    复制算法
  • 老年代理
    标记整理算法

方法区

也叫永久代,1.8以后将方法区移除了, 将方法区移动到直接内存
内存回收主要考虑的时候堆区和方法区的回收,其他部分会根据线程的产生和消亡
1.8删除方法区,引入直接内存,元空间概念,方法区中的静态变量转移到堆中,只有class元数据在元空间
堆中老年代和方法区中永久代是绑定的,无论哪一方满了,都会触发双方的GC回收

GC垃圾回收

判断对象是否存活

  1. 引用计数算法(缺点:循环引用,计数永不为0)
  2. 可达性算法(二叉树中向下搜索,不存在引用链则对象不可用)

回收算法

  1. 标记清除算法:标记完对象后,对对象进行回收,使用在老年代
    缺点:
    标记和清除效率不高
    产生大量碎片空间,产生空间浪费
  2. 复制算法:将可用对象复制到新的连续空间,删除之前的空间
    缺点:
    浪费50%的内存,复制长生存周期的对象效率低下,所以使用在新生代
  3. 标记整理算法:前期使用标记清除算法,后续使用整理算法,使用在老生代
  4. 分代收集算法:对数据进行分代,每一代执行不同的回收算法

相关文章

  • 关于内存要懂得

    Java内存模型 虚拟机栈(线程私有)局部变量表、操作数栈、动态链表、方法出口等信息 堆(线程共享)实例对象 方法...

  • 简析iOS内存管理

    关于内存,首先讲要介绍两个概念虚拟内存, 物理内存。物理内存:这个就没啥好说的了,就是实际上你的硬件内存是多少那就...

  • Java 内存管理

    Java可以自动管理内存,比C/C++要方便的多, 但是实际Java 也会出现内存溢出的问题。 关于Java的内存...

  • 关于爱情,你要懂得的

    1.你要学会对自己负责,一直在自己的马拉松赛道上奔跑,一直向前,才会被他人看到而欣赏,包括你喜欢的人,才能去真正维...

  • 内存管理

    内存管理 关于内存的描述

  • 要懂得

    要懂得——自己要什麼 並去珍惜它是這樣 感情亦如此 偶爾我就會想很多 在一定的能力範圍裡讓自己不再以好代好 有些...

  • 要懂得

    想要别人认同你的观点,最有效的不是说,而是学会倾听。 别期望别人对你讲道德。以道德约束自己,对别人道德,是真道德;...

  • 关于滴滴:女性,要懂得保护自己

    滴滴顺风车第一次被曝光女孩死亡事件时,网上掀起了轩然大波。谁曾想,几个月后,这件悲剧还未被人们遗忘之际,前几天又发...

  • 关于懂得

    不能要求别人懂自己,就像我们不能像懂自己一样懂别人,何况,我们也不一定真的懂自己。 所以,被懂得,是一场意...

  • 关于线程安全

    学习笔记,仅供自己参考,如有不对欢迎指正 1.关于内存模型 CPU高速缓存:因为CPU的执行速度要大于内存的读写速...

网友评论

      本文标题:关于内存要懂得

      本文链接:https://www.haomeiwen.com/subject/hlshultx.html