外存:

也就是我们经常说的(CDEF盘的大小)外储存器是指除计算机内存及CPU缓存以外的储存器,此类储存器一般断电后仍然能保存数据。常见的外存储器有硬盘、软盘、光盘、U盘等,一般的软件都是安装在外存中

内存:

内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行,此类储存器一般断电后数据就会被清空

高速缓存:

高速缓存是用来协调CPU与主存之间存取速度的差异而设置的。一般情况下,CPU的工作速度高,但内存的工作速度相对较低,为了解决这个问题,通常使用高速缓存,高速缓存的存取速度介于CPU和主存之间。系统将一些CPU在近几个时间段经常访问的内容存入高速缓冲,当CPU需要使用数据时,先在高速缓存中找,如果找到,就不必访问内存了,找不到时,再找内存,这样就在一定程度上缓解了由于主存速度低造成的CPU“停工待料”的情况

---------------------------------------------------------------------------------------------------------------------------

之前一直很不理解这个缓存那个缓存,其实缓存就是把一些外存上的数据保存到内存上而已,怎么保存到内存上呢,我们运行的所有程序,里面的变量值都是放在内存上的,所以说如果要想使一个值放到内存上,实质就是在获得这个变量之后,用一个生存期较长的变量存放你想存放的值,在java中一些缓存一般都是通过map集合来做的。

在Java中经常用到缓存,在SSh框架中也会用到一级缓存和二级缓存,到底缓存是怎么实现的呢?

简单讲就是,如果某些资源或者数据会被频繁的使用,而这些资源或数据存储在系统外部,比如数据库、硬盘文件等,那么每次操作这些数据的时候都从数据库或者硬盘上去获取,速度会很慢,会造成性能问题。

一个简单的解决方法就是:把这些数据缓存到内存里面,每次操作的时候,先到内存里面找,看有没有这些数据,如果有,那么就直接使用,如果没有那么就获取它,并设置到缓存中,下一次访问的时候就可以直接从内存中获取了。从而节省大量的时间,当然,缓存是一种典型的空间换时间的方案。

在Java中最常见的一种实现缓存的方式就是使用Map, 基本的步骤是:

1.先到缓存里面查找,看看是否存在需要使用的数据

2.如果没有找到,那么就创建一个满足要求的数据,然后把这个数据设置回到缓存中,以备下次使用

3.如果找到了相应的数据,或者是创建了相应的数据,那就直接使用这个数据。

/**

* Java中缓存的基本实现示例

*/

public class JavaCache {

/**

* 缓存数据的容器,定义成Map是方便访问,直接根据Key就可以获取Value了

* key选用String是为了简单,方便演示

*/

private Map map = new HashMap();

/**

* 从缓存中获取值

* @param key 设置时候的key值

* @return key对应的Value值

*/

public Object getValue(String key){

//先从缓存里面取值

Object obj = map.get(key);

//判断缓存里面是否有值

if(obj == null){

//如果没有,那么就去获取相应的数据,比如读取数据库或者文件

//这里只是演示,所以直接写个假的值

obj = key+",value";

//把获取的值设置回到缓存里面

map.put(key, obj);

}

//如果有值了,就直接返回使用

return obj;

}

}

这里只是缓存的基本实现,还有很多功能都没有考虑,比如缓存的清除,缓存的同步等等。当然,Java的缓存还有很多实现方式,也是非常复杂的,现在有很多专业的缓存框架,更多缓存的知识,这里就不再去讨论了。

下面用单例模式实现缓存:

/**

* 使用缓存来模拟实现单例

*/

public class Singleton {

/**

* 定义一个缺省的key值,用来标识在缓存中的存放

*/

private final static String DEFAULT_KEY = "One";

/**

* 缓存实例的容器

*/

private static Map map =

new HashMap();

/**

* 私有化构造方法

*/

private Singleton(){

//

}

public static Singleton getInstance(){

//先从缓存中获取

Singleton instance = (Singleton)map.get(DEFAULT_KEY);

//如果没有,就新建一个,然后设置回缓存中

if(instance==null){

instance = new Singleton();

map.put(DEFAULT_KEY, instance);

}

//如果有就直接使用

return instance;

}

}

缓存机制 java_缓存机制:java中缓存的原理相关推荐

  1. Java中缓存之内存缓存

    Java中缓存之内存缓存 1.缓存为什么要存在 应用服务器资源是有限的,数据库每秒中接受请求的次数也是有限的.如果利用有限的资源来提供尽可能大的吞吐量呢,一个办法:减少计 算量,缩短请求流程(减少网络 ...

  2. java中缓存的原理

    在java中经常用到缓存,在SSh框架中也会用到一级缓存和二级缓存,到底缓存是怎么实现的呢? 简单讲就是,如果某些资源或者数据会被频繁的使用,而这些资源或数据存储在系统外部,比如数据库.硬盘文件等,那 ...

  3. Java中随机数的原理,以及使用时的注意点

    转载自   Java中随机数的原理,以及使用时的注意点 1 前言 一提到 Java 中的随机数,很多人就会想到 Random,当出现生成随机数这样需求时,大多数人都会选择使用 Random 来生成随机 ...

  4. java cache缓存_涨姿势:为什么Java中“1000==1000”为false,而”100==100“为true?

    为什么 Java 中"1000==1000"为false,而"100==100"为true?  这是一个挺有意思的讨论话题. 如果你运行下面的代码: Integ ...

  5. java map 缓存数据_Map方式实现JAVA数据缓存

    首先建一个map,该map用来存放所有的数据 protected static Map map = new HashMap<>(); 加载所有User,将其放入到User中,map的key ...

  6. java分布式的缓存_5个强大的Java分布式缓存框架

    5个强大的Java分布式缓存框架 在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓存策略考虑进去,或者并没有选择更优的缓存策略,那么到时候重构起来 ...

  7. io流技术java_技术文章-java中的IO流

    1.File类 Java中对文件有操作时,可以实例化一个File对象,将文件路径利用这样的形式赋给File对象. File f = new File(filePath); File类的基本操作包括: ...

  8. c#枚举类似于java_如何在Java中获得类似于C的性能

    c#枚举类似于java 总览 Java有许多可能很慢的领域. 但是,对于每个问题都有解决方案. 许多解决方案/黑客都需要解决Java的保护问题,但是如果您需要低水平的性能,还是可以的. Java使高级 ...

  9. setyear java_如何在Java中创建不可变类

    如果对象在构造后无法更改,则该对象是不可变的.不可变对象不会以任何方式暴露其他对象来修改其状态; 对象的字段仅在构造函数内初始化一次,并且永远不会再次更改. 在本文中,我们将定义在Java中创建不可变 ...

最新文章

  1. html 距离上边缘,HTML - CSS边缘恐怖; 边距在父元素之外添加空格
  2. XMind2020的一些使用小技巧
  3. python滚动条_python中selenium操作下拉滚动条的几种方法汇总
  4. vue-cli proxy中跨域中pathRewrite配置理解
  5. (转载)DevExpress ASPxGridView 使用文档六:模板
  6. 安装华为鸿蒙,魅族选择与鸿蒙合作,华为这下要成了?
  7. 如何解决Win11开始菜单无法固定的问题
  8. 递归应用:折半查找法
  9. Redis进阶-高可用:集群
  10. CentOS安装Hadoop
  11. 汽车在怠速时有很轻微的间歇抖动,是不是节气门脏了?
  12. 转载——如果让我完善几年前的一个项目,我会做哪些改进?
  13. 双击jar包 运行SpringBoot项目
  14. spotify电脑下载歌曲_我来简单说一下Apple Music和Spotify的下载方法
  15. JAVA调用U盾进行客户认证实例
  16. 短线起爆点(移动均线15种战法)
  17. 申请Freenom免费顶级域名的正确做法
  18. 物理化学第6版笔记和课后答案(天津大学)
  19. LAL-开源Go语言音视频流媒体服务器
  20. AMD黑苹果adobe闪退修复

热门文章

  1. Linux下Jenkins与GitHub自动构建NetCore与部署
  2. 使用Try.NET创建可交互.NET文档
  3. eShopOnContainers 是一个基于微服务的.NET Core示例框架
  4. ASP.NET Core 进程外(out-of-process)托管(7)《从零开始学ASP.NET CORE MVC》
  5. .Netcore 2.0 Ocelot Api网关教程(6)- 配置管理
  6. Build 2018大会:.NET概述和路线图
  7. 辅助Visual Studio 2017部署的DevOps新工具
  8. [转]EL函数、自定义EL函数、自定义标签
  9. 【MATLAB统计分析与应用100】案例001:matlab使用Importdata函数导入文本txt数据
  10. Python趣味编程---Python也会讲笑话