compiler之automatic memory management以及Java GC

2023-11-04

基本方案就3种

1) mark and sweep

2) stop and copy (会用到copy graph算法,见leetcode)

3) reference counting

前2种方案GC是一个是独立的过程,要先进行扫描(object graph 遍历)mark reachable object,然后进行sweep或者copy。引用计数是即时的,当一个object的RC变为0时候立刻回收。一个赋值语句 a = b;对应4条语句

RC(b) += 1

RC(a) -= 1

if (RC(a) == 0)  //de-allocate  the object a points to

a = b

另外,当一个对象被销毁时候也会更新它指向对象的 RC

比较一下 sweep 和 copy

1) sweep 是把unmarked的对象加入到 free list,会有碎片问题;copy是把reachable对象copy到另一个区域

2) copy需要把存储区分成2个区域;sweep不需要

3) 分配:sweep需要scan free list找到大小匹配的块;而copy则只需要从当前指针分配并推进指针,速度块


generation based GC :解决这样一个问题:每次全体扫描,很多对象一直都是reachable的,对这些对象的扫描是浪费的。所以更针对一些,把对象分为长对象和短对象,主要针对短对象扫描,长对象的扫描不需要那么频繁


GC也是程序,可以从一般程序的角度衡量

和主程序的关系角度:

Concurrent GC:通过一定的协调机制可以让GC和程序并发运行。而一般GC 是要stop the world

从单线程多线程角度:

Parallel GC:多个Garbage Collector一起工作,利用多核,GC本身也可以是多线程。


Java GC

基本是基于copy + 分代, Permanent Space是固定的放class的地方,实际就是2代,不过第一代内部又分里3个小代,

Eden 

1st Survivor 

2nd Survivor




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

compiler之automatic memory management以及Java GC 的相关文章

  • C++泛型编程

    C 泛型编程 1 泛型编程 1 1 模板 1 2 函数模板 1 2 1 语法 1 2 2 使用函数模板方式 1 2 3 普通函数和函数模板的区别 1 2 4 普通函数与函数模板的调用规则 1 2 5 模板的局限性 1 3 类模板 1 3 1
  • 定时开机电路设计

    在一些情况下 比如电池供电 需要定时采集数据并传输 并且对功耗要求比较高时 就需要电路实现采集完成后关机 且能够定时自动启动的功能 一种方法是 采集完成后 通过单片机关闭外围电路的电源 且单片机本身处于低功耗模式 只保留RTC工作 设置定时
  • 借力亚马逊云科技实现 Apache APISIX 的生态探索与产品成长

    关于 Apache APISIX Apache APISIX 于 2019 年被两位创始人捐赠给 Apache 软件基金会孵化器 并于第二年7月从孵化器毕业 成为 Apache 顶级项目 APISIX 作为开源 API 网关 一直以活跃和快
  • 自动化办公神器!用Python批量识别发票并录入到Excel表格!可以讨财务女神开心了!

    故事的开始 今天去财务拿上个月的工资条核对 发现女神一脸闷闷不乐 好像天要塌下来一样 我对完工资就问 女神 你咋不开心 不是马上就要发工资了嘛 女神说 老板刚给我派了个任务 让我把上个月这个月的发票都做一个Excel表格 今天下班前给他 这
  • 开源按键组件Multi_Button的使用,含测试工程

    之前的文章中介绍过按键的处理方法 多功能 单击 双击 长按 按键设计 今天再来分享另外一种方式 MultiButton 1 Multi Button简介 MultiButton 是Github上的一个开源的按键处理组件 作者0x1abin
  • 为什么程序员都喜欢安静?

    大家回顾一下上学期间 你在上晚自习想完成今天老师布置的作业 但是你的班级却非常的吵闹 跟置身在菜市场一样 你能专心完成作业吗 不受周围吵闹环境的影响吗 相信大部分的人都难以静下心来认真完成作业 有时候好不容易想到一个思路 结果旁边的人拍你一
  • 送一个2022年最赚钱的方法!包含操作方法!

    在互联网上 可恶的人有很多 值得我们学习的人也有很多 有的人做起事来不讲武德 而有的人却是我们值得学习一生的榜样 在赚钱的路上 信息就是金钱 你掌握了信息的源头 就掌握的金矿 拥有足够的信息来源 那么你就有足够的金钱 假如你想在一个行业里快
  • Redis 的五种基本类型(实战篇)

    良心公众号 关注不迷路 Redis 是一个速度非常快的非关系型数据库 它可以存储键 key 与 5 种不同类型的值 value 之间的映射 可以将存储在内存的键值对数据持久化到硬盘 可以使用复制特性来扩展读性能 还可以使用客户端分片来扩展性
  • Gavin Wood Web3峰会最新演讲:波卡不是智能合约平台,而是平台的平台(全文)...

    在波卡上 每个平台都在用高性能 高效率和最优的方式做着自己擅长的事 而不必让它们的用户用底层平台的货币进行支付 从而将可定制性和灵活性提高了一个台阶 本文谨代表作者个人观点 不代表火星财经立场 该内容旨在传递更多市场信息 不构成任何投资建议
  • 理解line-height和vertical-align

    来源 https www cnblogs com libo web p 15457582 html 行高 line height line height 属性是指文本行基线之间的距离 用于设置多行元素的空间量 如多行文本的间距 对于块级元素
  • 关于C++函数返回值的使用方式以及局部对象何时析构的问题

    关于C 局部对象何时析构的探讨 我之前一直笼统的认为局部在函数调用结束之后 所有的局部变量会立刻析构 经过仔细分析之后才发现还有很多细节 这里对比了函数返回值的使用 Test t t fun 赋值 和 Test t fun 初始化 假设有一
  • 汇编语言(王爽第三版)实验十五

    实验十五 题目与个人思路 安装一个新的int 9中断例程 功能 在DOS下 按下 A 键后 除非不再松开 如果松开 就显示满屏幕的 A 其他的键照常处理 我刚刚开始以为还要判断按下 A 键的扫描码 后来发现不用 只要判断松开 A 键的扫描码
  • n行Python代码系列:两行代码去除抖音快手短视频尾部Logo

    老猿Python博文目录 https blog csdn net LaoYuanPython 一 引言 最近看到好几篇类似 n行Python代码 的博文 看起来还挺不错 简洁 实用 传播了知识 带来了阅读量 撩动了老猿的心 决定跟风一把 推
  • python字典中如何添加键值对

    添加键值对 首先定义一个空字典 gt gt gt dic 直接对字典中不存在的key进行赋值来添加 gt gt gt dic name zhangsan gt gt gt dic name zhangsan 如果key或value都是变量也
  • 【PAT】B1032 挖掘机技术哪家强 (20 分)_C语言实现

    1 挖掘机技术哪家强 20 分 为了用事实说明挖掘机技术到底哪家强 P A T PAT PAT 组织了一场挖掘机技能大赛 现请你根据比赛结果统计出技术最强的那个学校 输入格式 输入在第 1
  • SitePoint播客#61:HTML5 =厨房水槽

    Episode 61 of The SitePoint Podcast is now available This week your hosts are Patrick O Keefe iFroggy Stephan Segraves s
  • 哈工大2020软件构造Lab3实验报告

    本项目于4 21日实验课验收 更新完成 如果有所参考 请点点关注 点点赞GitHub Follow一下谢谢 2020春计算机学院 软件构造 课程Lab3实验报告 Software Construction 2020 Spring Lab 3
  • 朋友问我,程序员和非程序员的思维模式有什么区别?

    英文 https javascript plainenglish io what is the difference in thinking model between programmers and normal persons 8ff8
  • Go 语言运算符详解:加法、算术、赋值、比较、逻辑和位运算符全面解析

    运算符用于对变量和值执行操作 加号运算符 将两个值相加 如下面的示例所示 示例代码 package main import fmt func main var a 15 25 fmt Println a 尽管加号运算符通常用于将两个值相加
  • Python 中多态性的示例和类的继承多态性

    单词 多态 意味着 多种形式 在编程中 它指的是具有相同名称的方法 函数 操作符 可以在许多不同的对象或类上执行 函数多态性 一个示例是 Python 中的 len 函数 它可以用于不同的对象 字符串 对于字符串 len 返回字符的数量 示

随机推荐

  • JAVA的内存回收机制(快速入门版)

    java内存回收机制 内存回收 是JVM中垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制 引用 java中什么是引用 Person xiaoi new Person new person 以pers
  • 什么是NoSQL数据库?它与传统数据库有什么异同以及NoSQL的三大基石和四大类型

    1 NoSQL数据库的特点 灵活的可拓展性 NoSQL数据库在设计之初就是为了满足 横向扩展 的需求 灵活的数据模型 NoSQL数据库采用键 值 列族等非关系模型 允许在一个数据元素里存储不同类型的数据 与云计算紧密融合 NoSQL数据库凭
  • Java中的同步与锁机制详解

    作为Java程序员 我们都知道在编写多线程程序时 需要确保线程之间的同步与互斥 本文将详细介绍Java中的同步与锁机制 1 为什么需要同步与锁 在多线程环境中 如果多个线程同时访问共享资源 可能会导致数据不一致或其他不可预料的结果 为了解决
  • PTA -1012 数字分类

    1012 数字分类 20 分 给定一系列正整数 请按要求对数字进行分类 并输出以下 5 个数字 A 1 能被 5 整除的数字中所有偶数的和 A 2 将被 5 除后余 1 的数字按给出顺序进行交错求和 即计算 n 1 n 2 n 3 n 4
  • zigzag走线原理及应用

    电路板上弯弯扭扭的走线有什么用 往期文章 一文读懂高速互联的阻抗及反射 上 一文读懂高速互联的阻抗及反射 中 前面几篇文章有部分读者反馈太深奥 不好懂 要求来一点轻松易懂的 这不 它来了 本期文章我们来分享近期工作中的一个小故事 一段奇怪的
  • 数据结构学习——循环链表的使用

    一 循环链表的介绍 循环链表是一种特殊类型的链表 其中链表中的最后一个节点指向链表中的第一个节点 形成循环的结构 与普通链表相比 循环链表可以在链表中的任何位置进行遍历 并且可以方便地实现循环操作 在循环链表中 每个节点通常包含一个数据元素
  • vue3定义全局方法

    下面用element puls中的ElMessage组件为例 首先我在我的utils js工具类函数方法中定义了一个方法 代码如下 import ElMessage from element plus import element plus
  • 记网易面试总结

    最近进行了一次网易的社招面试 目前结果未知 但是从网易面试中我还是有一些体会 总结如下 作为非计算机专业的程序员来说 如果要进大厂 数据结构与算法是一定要补的 适度刷下leetcode中的算法题 大厂都好这一口 不要不信邪 我就以身试法了一
  • PHP用正则验证用户名

    在php中 用正则表达式写一个用户名的验证 要求 第一个字符为英文 只能用字母 数字 汉字 下划线 总长度限制在4 9位的昵称
  • vs2017 社区版本离线下载安装包

    百度得来 记录备忘 下载vS 2017 https visualstudio microsoft com zh hans thank you downloading visual studio sku Community rel 15 下载
  • Directx11教程三十八之Pick(拾取技术)

    这节教程是关于Pick 拾取技术的 程序的结构如下 在看这节教程前先弄懂 1 大概了解D3D11的渲染流水线 2 D3D11教程三十七之FrustumCulling 视截体裁剪 上半节教程 弄不懂也没关系 两节教程之间有一些联系 但是由于我
  • 完全二叉树——二叉堆(BinaryHeap)

    前言 优先队列是允许至少下列两种操作的数据结构 insert 插入 以及deleteMin 删除最小者 其中deleteMin的工作是找出 返回 并删除优先队列中最小的元素 insert操作等价于enqueue 入队 而deleteMin则
  • Mysql存储引擎

    目录 Mysql有哪些存储引擎 Mysql存储引擎IMyISAM与InnoDB区别 MyISAM索引与InnoDB索引的区别 InnoDB引擎的4大特性 如何选择存储引擎 一张表 里面有ID自增主键 当insert了17条记录以后 删除了第
  • 解决IDEA无法导入Maven项目jar包的问题 - 已解决

    当我们创建Maven项目的时候 经常会出现导入jar包失败的问题 如下图所示 发现我们导入的依赖下面都有红线 解决方法有以下几种 1 有可能是因为我们将 pom的文件忽略了 解决方法 找到 file gt settings gt Build
  • java jbutton数组_java-JButton需要显示图像数组

    我有一组存储在数组中的图像 我需要像幻灯片一样显示它们 下一个和上一个有两个JButton 它们使用户可以查看图像 但是我无法使按钮起作用 有什么建议吗 谢谢 import java awt Graphics import java awt
  • 51行代码实现简单的PHP区块链

    本文原始地址 php区块链demo 今年区块链特别火 我也很火啊 我火什么呢 前几年 公众平台出现 还得花时间去学去看 后来小程序出现 又得花时间精力去学去看 现在比特币 以太坊等去中心化货币带起了区块链的发展 还得学 没办法 技术改变师姐
  • 感冒的一般过程

    http blog sina com cn s blog 7af11b49010136hl html 又感冒了 哎 挺严重 鼻涕流不停 特别畏寒 以前没发现感冒这么可怕 看到一篇关于感冒的文章 粘过来给大家分享一下 以防感冒 感冒 是一种自
  • Python轻松爬取Rosimm写真网站全部图片

    RosimmImage 爬取Rosimm写真网站图片 有图有真相 def main start url 爬虫入口 主要爬取操作 try r requests get url html headers HEADERS timeout 10 t
  • token由来

    https www cnblogs com bigben0123 p 8334824 html
  • compiler之automatic memory management以及Java GC

    基本方案就3种 1 mark and sweep 2 stop and copy 会用到copy graph算法 见leetcode 3 reference counting 前2种方案GC是一个是独立的过程 要先进行扫描 object g