一.什么是CPU缓存 1. CPU缓存的来历 众所周知,CPU是计算机的大脑,它负责执行程序的指令,而内存负责存数据, 包括程序自身的数据.在很多年前,CPU的频率与内存总线的频率在同一层面上.内存的访问速度仅比寄存器慢一些.但是,这一局面在上世纪90年代被打破了.CPU的频率大大提升,但内存总线的频率与内存芯片的性能却没有得到成比例的提升.并不是因为造不出更快的内存,只是因为太贵了.内存如果要达到目前CPU那样的速度,那么它的造价恐怕要贵上好几个数量级.所以,CPU的运算速度要比内存读写速度快…
$file='./new.txt'; $fp = fopen($file, "r"); $chunk = 4096;//一次处理1M的字节 1M=1024*1024 $fs = filesize($file); //$max = ($fs == PHP_INT_MAX) ? PHP_INT_MAX : filesize($file); $readData =''; for ($len = 0; $len < $max; $len += $chunk) { $seekSize =…
目录 缓存 什么是缓存 L1.L2.L3 为什么要设置那么多缓存.缓存在cup内还是cup外 MESI协议----主流的处理缓存和主存数据不一样问题 Cache line是什么已经 对编程中数组的影响.   内存 这就是为什么内存条是内存,而硬盘不是 这就是为什么现在 程序这么占内存?         先附上一张计算机硬件组成图片: 先说内核: 内核是操作系统最基本的部分.它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多…
(1)代码区通常是共享只读(代码无法修改)的,即可以被其他的程序调用,例如运行两个qq,除了数据不一样,代码都是一样的, 每次运行qq,都会将代码和数据加载到内存中,除了数据,每次加载的代码都是一样的,可以大大节省内存. (2)栈是由系统分配内存,栈的内存是固定的. (3)堆区是程序员自己分配内存和释放内存,如果不释放内存,那么就只能等程序结束后才会由系统回收.内存不释放,那么在程序运行期间可能会导致内存不够用. 程序在没有运行前只有代码区和数据区,运行程序后会加载到内存中,才有堆区和栈区. 数…
普通的定义上区分:内存,是连接CPU 和其他设备的通道,起到缓冲和数据交换作用.当CPU在工作时,需要从硬盘等外部存储器上读取数据,但由于硬盘这个“仓库”太大,加上离CPU也很“远”,运输“原料”数据的速度就比较慢,导致CPU的生产效率大打折扣!为了解决这个问题,人们便在CPU与外部存储器之间,建了一个“小仓库”—内存 ECC内存,即应用了能够实现错误检查和纠正技术(ECC)的内存条.一般多应用在服务器及图形工作站上,这将使整个电脑系统在工作时更趋于安全稳定.ECC是“Error Checkin…
Java内存模型就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范. Java内存模型是根据英文Java Memory Model(JMM)翻译过来的.其实JMM并不像JVM内存结构一样是真实存在的.他只是一个抽象的概念.JSR-133: Java Memory Model and Thread Specifification中 描述了,JMM是和多线程相关的,他描述了一组规则或规范,这个规范定义了一个线程对共…
c#有自己的内存回收机制,所以在c#中我们可以只new,不用关心怎样delete,c#使用gc来清理内存,这部分内存就是managed memory,大部分时候我们工作于c#环境中,都是在使用托管内存,然而c#毕竟运行在c++之上,有的时候,(比如可能我们需要引入一些第三方的c++或native代码的库,在Unity3d开发中很常见)我们需要直接在c#中操纵非托管的代码,这些non-managed memory我们就需要自己去处理他们的申请和释放了, c# 中提供了一些接口,完成托管和非托管之间…
c#有自己的内存回收机制,所以在c#中我们可以只new,不用关心怎样delete,c#使用gc来清理内存,这部分内存就是managed memory,大部分时候我们工作于c#环境中,都是在使用托管内存,然而c#毕竟运行在c++之上,有的时候,(比如可能我们需要引入一些第三方的c++或native代码的库,在Unity3d开发中很常见)我们需要直接在c#中操纵非托管的代码,这些non-managed memory我们就需要自己去处理他们的申请和释放了, c# 中提供了一些接口,完成托管和非托管之间…
JVM 内存区域 (运行时数据区域) 链接:https://www.jianshu.com/p/ec479baf4d06 运行时数据区域 Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都各有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁.根据<Java 虚拟机规范(Java SE 8版)>的规定,Java 虚拟机所管理的内存将会包括以下几个运行时数据区域.如图:   程序…
序列化 背景: 在以下过程中,需要对数据进行序列化: shuffling data时需要通过网络传输数据 RDD序列化到磁盘时 性能优化点: Spark默认的序列化类型是Java序列化.Java序列化的优势是兼容性好,不需要自已注册类.劣势是性能差.为提升性能,建议使用Kryo序列化替代默认的Java序列化.Kryo序列化的优势是速度快,体积小,劣势是兼容性差,需要自已注册类. 序列化的配置项:spark.serializer 使用方法1 1 2 3 val conf = new SparkCo…