草庐IT

从内核源码看 slab 内存池的创建初始化流程

在上篇文章《细节拉满,80张图带你一步一步推演slab内存池的设计与实现》中,笔者从slabcache的总体架构演进角度以及slabcache的运行原理角度为大家勾勒出了slabcache的总体架构视图,基于这个视图详细阐述了slabcache的内存分配以及释放原理。slabcache机制确实比较复杂,涉及到的场景又很多,大家读到这里,我想肯定会好奇或者怀疑笔者在上篇文章中所论述的那些原理的正确性,毕竟talkischeap,所以为了让大家看着安心,理解起来放心,从本文开始,我们将正式进入showyouthecode的阶段。笔者会基于内核5.4版本,详细为大家剖析slabcache在内核中的源

从内核源码看 slab 内存池的创建初始化流程

在上篇文章《细节拉满,80张图带你一步一步推演slab内存池的设计与实现》中,笔者从slabcache的总体架构演进角度以及slabcache的运行原理角度为大家勾勒出了slabcache的总体架构视图,基于这个视图详细阐述了slabcache的内存分配以及释放原理。slabcache机制确实比较复杂,涉及到的场景又很多,大家读到这里,我想肯定会好奇或者怀疑笔者在上篇文章中所论述的那些原理的正确性,毕竟talkischeap,所以为了让大家看着安心,理解起来放心,从本文开始,我们将正式进入showyouthecode的阶段。笔者会基于内核5.4版本,详细为大家剖析slabcache在内核中的源

java - 离线时可以使用 OKHttp 进行改造吗?

我正在尝试使用Retrofit和OKHttp来缓存HTTP响应。我关注了thisgist最后得到以下代码:FilehttpCacheDirectory=newFile(context.getCacheDir(),"responses");HttpResponseCachehttpResponseCache=null;try{httpResponseCache=newHttpResponseCache(httpCacheDirectory,10*1024*1024);}catch(IOExceptione){Log.e("Retrofit","Couldnotcreatehttpcach

java - 离线时可以使用 OKHttp 进行改造吗?

我正在尝试使用Retrofit和OKHttp来缓存HTTP响应。我关注了thisgist最后得到以下代码:FilehttpCacheDirectory=newFile(context.getCacheDir(),"responses");HttpResponseCachehttpResponseCache=null;try{httpResponseCache=newHttpResponseCache(httpCacheDirectory,10*1024*1024);}catch(IOExceptione){Log.e("Retrofit","Couldnotcreatehttpcach

CPU多层caches的allocation方式

根据一个cache的内容是否存在于其它level(层次)的cache中,可以构成多种多层次的cache结构。如果上级cache的所有内容在下级cache里都有,那么则称下级cache包含上级cache(Inclusive策略)。如果下级cache只包含上级cache中不存在的内容,则称下级cache不包含上级cache(exclusive策略)。如果下级cache的内容既不严格包含也不排斥上级cache,则称Pseudo-exclusive策略。1.Inclusive策略在Inclusive策略中,也就是L2包含L1的所有内容。假设有一个处理器读取块X的请求。如果在L1缓存中找到该块,则从L1

CPU多层caches的allocation方式

根据一个cache的内容是否存在于其它level(层次)的cache中,可以构成多种多层次的cache结构。如果上级cache的所有内容在下级cache里都有,那么则称下级cache包含上级cache(Inclusive策略)。如果下级cache只包含上级cache中不存在的内容,则称下级cache不包含上级cache(exclusive策略)。如果下级cache的内容既不严格包含也不排斥上级cache,则称Pseudo-exclusive策略。1.Inclusive策略在Inclusive策略中,也就是L2包含L1的所有内容。假设有一个处理器读取块X的请求。如果在L1缓存中找到该块,则从L1

腾讯三面:进程写文件过程中,进程崩溃了,文件数据会丢吗?

1.PageCache1.1PageCache是什么?为了理解PageCache,我们不妨先看一下Linux的文件I/O系统,如下图所示:Figure1.Linux文件I/O系统上图中,红色部分为PageCache。可见PageCache的本质是由Linux内核管理的内存区域。我们通过mmap以及bufferedI/O将文件读取到内存空间实际上都是读取到PageCache中。1.2如何查看系统的PageCache?通过读取/proc/meminfo文件,能够实时获取系统内存情况:$cat/proc/meminfo...Buffers:1224kBCached:111472kBSwapCache

腾讯三面:进程写文件过程中,进程崩溃了,文件数据会丢吗?

1.PageCache1.1PageCache是什么?为了理解PageCache,我们不妨先看一下Linux的文件I/O系统,如下图所示:Figure1.Linux文件I/O系统上图中,红色部分为PageCache。可见PageCache的本质是由Linux内核管理的内存区域。我们通过mmap以及bufferedI/O将文件读取到内存空间实际上都是读取到PageCache中。1.2如何查看系统的PageCache?通过读取/proc/meminfo文件,能够实时获取系统内存情况:$cat/proc/meminfo...Buffers:1224kBCached:111472kBSwapCache

JAVA缓存规范 —— 虽迟但到的JCache API与天生不俗的Spring Cache

大家好,又见面了。本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。有诗云“纸上得来终觉浅,绝知此事要躬行”,在上一篇文章《手写本地缓存实战2——打造正规军,构建通用本地缓存框架》中,我们一起论证并逐步实现了一套简化版本的通用本地缓存框架,并在过程中逐步剖析了缓存设计关键要素的实现策略。本篇文章中,我们一起来聊一聊缓存框架实现所需要遵循的规范。为何需要规范上一章中构建的最简化版本的缓存框架,虽然可以使用,但是也存在一个问题,就是它对外提供的实现接口都是框架根据自己的需要而自定义的。这样一来,项目集成了此缓

JAVA缓存规范 —— 虽迟但到的JCache API与天生不俗的Spring Cache

大家好,又见面了。本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。有诗云“纸上得来终觉浅,绝知此事要躬行”,在上一篇文章《手写本地缓存实战2——打造正规军,构建通用本地缓存框架》中,我们一起论证并逐步实现了一套简化版本的通用本地缓存框架,并在过程中逐步剖析了缓存设计关键要素的实现策略。本篇文章中,我们一起来聊一聊缓存框架实现所需要遵循的规范。为何需要规范上一章中构建的最简化版本的缓存框架,虽然可以使用,但是也存在一个问题,就是它对外提供的实现接口都是框架根据自己的需要而自定义的。这样一来,项目集成了此缓