手机内存少怎么变大为什么自动越变越少,什么也没下载。隔一段时间就得格式化一次


框架默认的TextInputFormat切片机制是对任务按攵件规划切片不管文件多小,都会是一个单独的切片都会交给一个MapTask,这样如果有大量小文件就会产生大量的MapTask,处理效率极其低下

那么处理小文件就需要CombineTextInputFormat了,CombineTextInputFormat用于小文件过多的场景它可以将多个小文件从逻辑上规划到一个切片中,这样多个小文件就可以交给一个MapTask處理。

 
生成切片的过程包括两部分虚拟存储和切片,以下以案例进行说明假设有4个小文件,1、2、3、4大小分别为1.7Mb、5.1Mb、3.4Mb、6.8Mb,则分配机制洳下:
1、虚拟存储过程:虚拟存储的标准是将输入目录下所有文件大小,依次和设置的setMaxInputSplitSize值比较如果不大于设置的最大值4Mb,逻辑上划分┅个块如果输入文件大于设置的最大值且大于两倍,那么以最大值切割一块;当剩余数据大小超过设置的最大值且不大于最大值2倍此時将文件均分成2个虚拟存储块(防止出现太小切片)。
所以:1、2、3、4四个小文件就会被虚拟存储成6个小文件。




2、切分过程:判断虚拟存儲的文件大小是否大于setMaxInputSplitSize值大于等于则单独形成一个切片。如果不大于则跟下一个虚拟存储文件进行合并共同形成一个切片。所以以上嘚6个小文件经过切分就可以形成3切片,如




从案例来看4个优化成3个切片,效果不大那是因为此案例设置的切片最大尺寸为4Mb。想想要是设置的最大尺寸大于以上4个小文件之和,那么优化之后不就是1个切片因此,在使用时需根据实际需求,合理的设置最大尺寸减少因小攵件造成的多切片问题。

还记得我吗我是阿Q,CPU一号车间嘚那个阿Q

今天忙里偷闲,来到厂里地址翻译部门转转负责这项工作的小黑正忙得满头大汗。

看到我的到来小黑指着旁边的座椅示意讓我坐下。

坐了好一会儿小黑才从工位上忙完转过身来,“实在不好意思阿Q今天活太多,没来得及招待你”

“刚忙什么呢看你满头夶汗的”,我问道

“嗨,别提了老是发现内存页面错误,不停地要通知操作系统那边去处理真是怀念以前啊,没有这么多破事儿要管”小黑叹了口气。

我一听来了兴趣“小黑你给我说说你们的工作呗,地址翻译是怎么一回事儿为什么怀念以前呢?”

小黑调整了丅坐姿咕噜咕噜喝了几口水说道,“这话说来可就话长了”

接下来小黑开始给我讲起了历史故事······

原来咱们的祖先叫8086小黑还给峩看了他的照片

那是一个纯真质朴的年代,虽然工作性能不高不过那个年代的程序都很简单,我们的祖先一问世就成为了明星称得上那个时代的顶流了。

看到照片中的那些金属针脚了吗那是我们CPU和外界打交道的触角,每一根都有不同的作用

通过这些触角,CPU就可以跟內存打交道获取指令和数据,辛勤的干活啦

那个年代,条件比较差能凑合的就凑合,能共用的就共用这不,你看祖先CPU的地址总线針脚和数据总线针脚就共用了

祖先是一个16位的CPU,数据(Data)总线就有16位一次性可以传输16个比特位。和地址(Address)总线凑合着一起共用于是就取名AD0-AD15。

不过祖先的地址总线却不止16个还多出了A16-A19整整4个呢!这样有20个地址线,可以寻址1MB的内存了!

但是祖先的寄存器都是16位的啊只能存放16位嘚地址。不过他们很聪明发明了一个叫分段式存储管理的方法,把内存划分为最大64KB的小块为什么是64KB呢,因为16位地址最多只能寻址这么夶了然后又加了几个叫做段寄存器的东西,指向这些块的开头这样,通过段地址+段内偏移地址的方式就能访问更多的内存了。

后来啊祖先的那点计算能力越来越捉襟见肘,实在是跟不上时代了家族中的年轻一代开始挑大梁,80286和80386CPU相继问世尤其是80386,成为了划时代的存在

到了80386时代,我们与外界通信的引脚就更多了并且变成了32位的CPU,那个时候生活条件就变好了,地址线和数据线再也不用共享引脚叻

后来,人类变得越来越贪心想要一边听音乐,一边还要上网同时还要编辑文档,这就同时需要运行多个程序

这个时候,有人发現了商机开发了一个叫操作系统的东西,原来那些程序不再直接和我们CPU打交道了而是和操作系统打交道,操作系统再和我们打交道Φ间商赚差价说的就是他们!

操作系统这玩意儿很聪明啊,通过时间片划分让我们CPU来轮流执行多个程序一会儿让我们执行音乐播放,一會儿让我们执行浏览器程序一会儿又让我们执行文档编辑程序。我们是无所谓啊给什么代码不是代码啊,我们不挑埋头苦干就是了。人类的反应速度跟我们就差得远了他们还以为这些程序真的是同时执行的呢。

不过随之而来出现了一个大问题这么多程序都要运行,大家挤在一个内存里经常发生摩擦,冲突不断

先祖们为了此事殚精竭虑,终于想出了一个好办法一直沿用至今。

他们提出了一个虛拟地址的东西所有程序使用的地址都是一个虚拟的地址,在真正和内存打交道的时候咱们CPU内部工作人员再给翻译成真实的内存地址,关于这事儿内存那家伙一直被我们蒙在鼓里。

这样一来每个程序都可以用的是0x到0xffffffff总共4GB这么大范围的地址空间,当然不会真的给他们那么多空间内存那家伙总共才4GB呢,而是要按需申请分配分配的单元是按照页来进行的,32位的CPU一个页是4KB这些分配管理的累活就让操作系统来干了,中间商不能光拿好处不干正事至于我们CPU,做好地址翻译的工作就好了

为此,在我们寄存器内部专门添置了一个新的寄存器CR3用来指向一个地址翻译查询字典,字典划分了两级目录我们把一个32位的地址划分了3部分,前面两部分分别指向两级目录中的条目鼡来定位这个地址在物理内存的哪个页面,最后一部分就是指向物理内存页面的偏移这样就完成了地址的翻译工作。

每个进程有不同的哋址空间切换进程的时候,把CR3的内容换一下就使用新进程的翻译字典特别的方便。

我们把这种内存管理方式叫做分页式内存管理

真佩服先祖们的智慧,这样巧妙的把各个程序隔离开来后来我们把这种工作模式叫做保护模式,把之前那种直接使用真实内存地址的工作模式叫做实地址模式

人类变得越来越贪婪,程序变得越来越多对内存的需求也越来越大。随着这些程序都不断申请内存页面内存空間很快就要耗尽了。

我们看在眼里急在心里,后来找操作系统协商看看这问题该怎么办。

操作系统那家伙也不赖想出了一个好办法。内存的大小有限但是硬盘给力啊,硬盘空间大的多去硬盘上划一块区域来,把内存里长时间没有用到的页面给换到这块区域里去嘫后做个标记。如果后面谁要访问那个页面咱们CPU就检查如果有这个标记,就发送一个页错误的中断信号告诉操作系统去把这个页面换回來

通过我们之间的配合,解决了内存紧张的危机后来我们把这个技术叫做内存分页交换。

时间过得很快到了我们这一辈,内存变得哽大了16GB都是小case,32GB也很常见

除了内存,我们CPU本身也更先进了别的不说,你光看看咱们现在的引脚数那比先祖们那几辈就不可同日而语

我们不仅从32位变成了64位,还从单核变成了多核像我所在的CPU就有8个车间,8核并行执行比起先祖那个年代简直有云泥之别。

和小黑闲谈間我们车间的老K突然出现在了门口。

“阿Q原来你在这里让我好找,赶快回去吧隔壁二号车间的虎子说我们改了他们的数据,上门来鬧事了······”

预知后事如何请关注后续精彩······

我要回帖

更多关于 手机内存少怎么变大 的文章

 

随机推荐