黑马程序员技术交流社区

标题: 关于缓存与缓冲区的问题 [打印本页]

作者: 黑马张健    时间: 2012-5-28 19:35
标题: 关于缓存与缓冲区的问题
学IO流的时候,经常会用 byte[] buf = new byte[1024]  用来缓存字节。
那么缓存是在哪里开辟出来的空间呢?  它与缓冲区是否是同一个概念。  即缓存是否就是缓冲区呢?
有点混乱,就是分不清 缓存、缓冲区。请高手讲明白一些。谢谢。
作者: 李哲    时间: 2012-5-28 19:45
我认为缓存,缓冲区,和非计算机领域的这两个词的意思是一样的,也就是一个概念。
但是IO流的BufferedReader这种,应该是使用数组当作缓冲区,那么缓冲区就应该在堆内存,因为创建的数组或者对象的实例都在堆内存中。

作者: 林翔    时间: 2012-5-28 19:57
同意楼上,我也认为缓存,缓冲区在IO流中是同一个概念,缓存一般用数组、链表或者哈希表(其实也是数组实现的)实现,实际JVM就是开辟出一段内存空间。并控制JAVA创建后的对像在这段内存空间的生存周期 ,如果不定义为全局静态变量的话,JVM就会在一段时间里把不再使用的对像回收掉 ,而如果使用JAVA缓存的话,就是让这个对像不会被JVM回收掉,这样以后再需要操作这个对像时就不需要JVM创建,销毁这些耗时的动作了。

作者: 黑马—陈磊    时间: 2012-5-28 20:01
本帖最后由 黑马—陈磊 于 2012-5-28 20:05 编辑

1.
【缓存】在【不同速率】的设备之间起到【缓冲】作用,
【缓存】是一种【物理装置】的名称,【缓冲】是一个【逻辑概念】。


【CPU】读写速度>【缓存】读写速度>【内存】读写速度>【硬盘】读写速度,他们之间都有【缓存装置】来协调。
在高速设备不读写的时候,缓存装置依然在从低速设备上【预读写】,准备高速设备下次的读写访问。

2.
【缓存】是物理上存在的装置,但是它们都集成进不同设备里作为附加部分。CPU里有,内存里有,硬盘里也有,因为他们给其他设备提供数据时,跟其他设备的速率都是不同的,需要【缓存装置】来【缓冲】。


3.
【动态存储器】是一类存储器的【学术称谓】,我们平常说的【内存】就是【动态存储器】。
【缓冲区】是一个逻辑概念,
我们说的【硬件缓冲区】就是指【缓存】;
我们说的【软件缓冲区】是指的【内存里的一部分存储区域】,这个区域是软件自己申请,操作系统批准并分配给软件使用的内存区域。
作者: 袁錦泰    时间: 2012-5-28 21:03
不要和计算机的缓存概念搞混,使用JAVA语言建立缓存指的是为你运行的代码开辟一块空间,用作临时存储,与计算机的缓存是两个概念.
作者: 袁錦泰    时间: 2012-5-28 21:04
黑马—陈磊 发表于 2012-5-28 20:01
1.
【缓存】在【不同速率】的设备之间起到【缓冲】作用,
【缓存】是一种【物理装置】的名称,【缓冲】是一 ...

作为同学,我有义务提醒你,你这样回答问题会害了自己的...




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2