摘要: 文件系统的功能规划 对于运行的进程来说,内存就像一个纸箱子,仅仅是一个暂存数据的地方,而且空间有限。 如果我们想要进程结束之后,数据依然能够保存下来,就不能只保存在内存里,而是应该保存在外部存储中。就像图书馆这种地方,不仅空间大,而且能够永久保存。 我们最常用的外部存储就是硬盘,数据是以文件的形式保 阅读全文
posted @ 2021-07-02 18:14 hochan_100 阅读(43) 评论(0) 推荐(0)
摘要: 如何提升内存分配的效率? 或许有同学会认为,我又不写底层框架,内存分配也依赖虚拟机,并不需要应用开发者了解。如果你也这么认为,我们不妨看看这个例子:在 Linux 系统中,用 Xmx 设置 JVM 的最大堆内存为 8GB,但在近百个并发线程下,观察到 Java 进程占用了 14GB 的内存。为什么会 阅读全文
posted @ 2021-07-02 17:29 hochan_100 阅读(617) 评论(0) 推荐(0)
摘要: Buffer 和 Cache 的设计目的,是为了提升系统的 I/O 性能。它们利用内存,充当起慢速磁盘与快速 CPU 之间的桥梁,可以加速 I/O 的访问速度。 Buffer 和 Cache 分别缓存的是对磁盘和文件系统的读写数据。 从写的角度来说,不仅可以优化磁盘和文件的写入,对应用程序也有好处, 阅读全文
posted @ 2021-07-02 17:09 hochan_100 阅读(126) 评论(0) 推荐(0)
摘要: 回顾一下系统的内存使用情况,比如下面这个 free 输出界面: # 注意不同版本的free输出可能会有所不同 $ free total used free shared buff/cache available Mem: 8169348 263524 6875352 668 1030472 7611 阅读全文
posted @ 2021-07-02 16:29 hochan_100 阅读(130) 评论(0) 推荐(0)
摘要: 提问:物理的页面是如何管理的? 物理内存的组织方式 涉及物理内存的映射的时候,我们总是把内存想象成它是由连续的一页一页的块组成的。我们可以从 0 开始对物理页编号,这样每个物理页都会有个页号。 由于物理地址是连续的,页也是连续的,每个页大小也是一样的。因而对于任何一个地址,只要直接除一下每页的大小, 阅读全文
posted @ 2021-07-02 15:54 hochan_100 阅读(64) 评论(0) 推荐(0)
摘要: 32 位系统和 64 位系统的内存布局有的地方相似,有的地方差别比较大 用户态和内核态的划分 从 task_struct 出发来看。这里面有一个 struct mm_struct 结构来管理内存。 struct mm_struct *mm; 在 struct mm_struct 里面,有这样一个成员 阅读全文
posted @ 2021-07-02 12:37 hochan_100 阅读(48) 评论(0) 推荐(0)