获得徽章 6
JAVA后端攻城狮 @某跨境电商
JAVA后端攻城狮 @某跨境电商
JAVA后端攻城狮 @某跨境电商
JAVA后端攻城狮 @某跨境电商
JAVA后端攻城狮 @某跨境电商
JAVA后端攻城狮 @某跨境电商
JAVA后端攻城狮 @某跨境电商
JAVA后端攻城狮 @某跨境电商
JAVA后端攻城狮 @某跨境电商
JAVA后端攻城狮 @某跨境电商
JAVA后端攻城狮 @某跨境电商
赞了这篇沸点
今天还在上班的举个手
83
赞了这篇沸点
1 KB 大小的内存能不能运行一个 2 GB 的程序?

先说答案,能。

程序运行时,本应需要一段连续的内存,但是现实中由于内存碎片的存在,往往不能满足这一要求。比如运行一个程序需要 128 M 大的内存,但是内存中只有一块连续的 100 M 的内存和一块连续的 64 M 的内存,这样的话,程序就运行不了了,明明内存中空闲内存大于 128 M,程序却运行不了,很不合理。于是人们想到了内存分页的办法。

内存分页就是说,加载程序时不再是给程序分配一整块连续的内存,而是把程序所需的内存分成一个个固定大小的内存页,按页去加载,内存页之间不必是连续的,只要知道这个程序所需的内存页都分布在哪就行。

内存分页是操作系统实现的,对于程序来说,它可以把自己使用的内存看作是连续的,操作系统会将程序中使用的内存地址映射到物理内存。

内存分页不仅解决了内存碎片的问题,也降低了内存交换的成本,而且加载程序时也不需要一次性把整个程序都加载到内存,操作系统可以根据需要去加载部分内存页,这使得小内存运行大程序成为可能。Linux 默认的一个内存页大小是 4 KB。用下面这个命令可以查看:
getconf PAGE_SIZE

那么回到刚才的问题,如何用 1 KB 的内存去运行 2 GB 的程序?我们可以把内存页大小设置为 1 KB,每次只加载 1 个内存页,需要哪一页,就把哪一页从硬盘上交换到内存里面。不过由于磁盘I/O速度远远小于内存的I/O速度,这样运行程序会很卡顿。
展开
5
关注了标签 爬虫 爬虫
JAVA后端攻城狮 @某跨境电商
下一页
个人成就
文章被点赞 30
文章被阅读 7,170
掘力值 362
收藏集
0
关注标签
35
加入于