Javaman需要掌握的计算机底层知识(四)[内存管理]

Warning:
本系列基调:好读书,不求甚解!
术业有专攻,我们不去开发操作系统,也不使用汇编语言,没必要太深究原理.
了解计算机底层知识,是为了更好的理解JVM!

内存管理

内存的发展史&

  • 早期系统DOS时代:DOS时代同一个时间只能由一个进程在运行
  • Windows9x:多个进程全部装进内存.问题:1.可能内存瓶颈,2,互相打扰,访问到别的进程的空间造成问题
  • 现代:虚拟地址,分页装入,软硬件结合寻址

现在的解决方案

1. 解决内存瓶颈问题-分页:

分页,(标准页是4K,也有的系统和程序支持大分页),内存按照4k页框分页,程序(硬盘上)也按照4k分块,用到那一块就加载那一块;
加载过程中如果内存满了,会把最不常用的放到swap分区,把最新的一块加载进来,即LRU

重要算法:LRU

LRU 算法leetcode146,手撕LRU,least recently used
使用hash表查找O(1)+双向链表新增和删除O(1),想象一下Java的LinkedHashMap

在这里插入图片描述

2. 相互打扰问题-虚拟内存

为了保证各个进程互相不影响,让进程工作在虚拟空间,程序中用到的空间地址不再是直接的物理地址,而是虚拟地址,这样多个进程间就不能互相访问了.
站在进程的角度,一个进程是独享整个操作系统资源 内存+CPU,虚拟地址和物理地址间有个映射关系-“内存映射”
在这里插入图片描述
虚拟空间多大呢?就是寻址空间的大小,64位系统就是2^64字节,比物理空间大很多
虚拟空间分段(section)
在这里插入图片描述
在这里插入图片描述
内存是怎么映射的?
偏移量+段的基地址=线性地址, 线性地址仍是虚拟空间中的
线性地址到物理地址的映射,通过OS+MMU(硬件memory management unit)完成
在这里插入图片描述

3. 缺页中断(异常)

前面提到,内存满了会使用LRU算法把一些内存中的page放到swap空间中;
当需要用的的page,内存中没有,产生缺页异常(一种特殊的中断),由内核处理并加载

ZGC(Zero paused Garbage Collection)

算法叫做:Colored Pointer,只支持64位系统
GC信息记录在指针上(而不是记录在头部),immediate memory use
4位用来颜色指针
42位指针,寻址空间4T,JDK13扩展到16T,目前最大支持16T 2^44,因为地址总线目前是48位
颜色指针本质上包含了地址映射的概念
在这里插入图片描述

CPU如何区分 一个立即数 和 一条指令

CPU到内存通过总线联系
总线内部分为: 数据总线,地址总线,控制总线
地址总线目前是48位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值