• java-内存管理


    一、jvm内存结构

    程序计数器(Program Counter Register)、JVM虚拟机栈(JVM Stacks)、本地方法栈(Native Method Stacks)、堆(Heap)、方法区(Method Area)

    (1)PCR
    尾随线程生命周期,记录当前运行到的.class字节码行数,用于多线程操作
    (2)JVM Stacks
    尾随线程生命周期,在方法运行中存储数据
    Java虚拟栈帧.bmp 
    (3)Native Method Stacks
    处理native方法,如object中的hashCodes()等
    (4)Heap
    存储全部实例对象和数组对象,内置GC
    (5)Method Area

    堆的组成部分,但不强制GC。存储的对象为执行时常量池、静态变量、JVM载入的类信息等


    二、垃圾回收
    堆和方法区须要进行垃圾回收,其它三个随线程生命周期创建销毁
    垃圾判定算法
    (1)引用计算器:对循环引用的对象无法回收

    (2)根搜索:效率较低


    垃圾清除算法
    (1)标记、清除算法
      过程:内存紧张时,停止程序,遍历GC Root将可达的对象标记出可存活的对象,清除全部未使用的对象
      缺点:效率较低;清理出来的空暇内存不连续
    (2)复制算法
      过程:将内存分成活动区间和空暇区间两块,新分配的内存在活动区间,内存紧张时进行GC,将活动区间中
                存活的对象,按顺序放入空暇区间
      缺点:浪费一半内存;对象存活率高时比較费复制操作
    (3)标记、整理算法
      过程:类似(1)标记全部存活对象,又一次移动按内存顺序排列对象,将末端内存清除
      缺点:效率不高
    (4)分代搜索算法
      过程:针对不同对象进行不同的回收算法。
      夭折对象(局部变量、暂时变量):复制算法(80%内存分配对象+10%活动区间+10%空暇区间)
      老不死对象(缓存对象、数据库连接对象、单例对象):标记、整理算法
      不灭对象(String池对象、class类信息):标记、整理算法
  • 相关阅读:
    监控系统如何选择合适的时序数据库?
    面试官:谈谈如何防止消息丢失和消息重复
    面试官:mysql的四种事务隔离级别
    一致性Hash介绍及使用场景
    微服务之服务监控
    什么是公考、联考、国考、省考、选调生?
    LINQ: When to use SingleOrDefault vs. FirstOrDefault() with filtering criteria
    Async. Postbacks cause Page_Init? (C#)
    在线求解 不定积分 高等数学
    wpf Load
  • 原文地址:https://www.cnblogs.com/yxwkf/p/3790083.html
Copyright © 2020-2023  润新知