java中缓存简介

article/2025/9/1 18:25:01

27bb75200a0245c3a7b3cb7c7b8b7326.jpg外存:

 

 

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

 

内存:

 

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

 

高速缓存:

 

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

 

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

 

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

 

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

 

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

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

 

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

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

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

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

 

复制代码

/**

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

*/

public class JavaCache {

    /**

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

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

    */

    private Map<String,Object> map = new HashMap<String,Object>();

    /**

    * 从缓存中获取值

    

    * @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<String,Singleton> map =

    new HashMap<String,Singleton>();

    /**

    * 私有化构造方法

    */

    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;

    }

}

复制代码

 


http://chatgpt.dhexx.cn/article/Ledge6Ue.shtml

相关文章

java缓存学习

首先说一下缓存著名的开源框架&#xff1a; 最出名的当属 Redis 和 Memcached 了&#xff0c;它们因为使用简便、高性能而成为事实上的标准。还有一些是比较有名的Java开源缓存框架&#xff0c;例如Ehcache、GuavaCache 和 Caffeine 静态缓存和动态缓存&#xff1a; 所谓静态…

JAVA缓存技术

最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下,找到一篇,暂作保存,后面如果有用到可以参考。此为转贴,帖子来处:http://cogipard.info/articles/cache-static-files-with-jnotify-and-ehcache 介绍 JNotify:http://jnotify.sourcefor…

Java缓存机制

1 Java缓存 1.1 jvm内置缓存 Java中实现缓存的方式有很多&#xff0c;比如用static hashMap基于内存缓存的jvm内置缓存&#xff0c;简单不实用&#xff0c;保对象的有效性和周期无法控制&#xff0c;容易造成内存急剧上升。常用的有Oscache&#xff08;主要针对jsp页面&#…

java中Cache缓存的使用

java中Cache缓存 1.JSR107 缓存的整体架构&#xff1a; 2.SpringBoot的缓存抽象 几个重要概念以及缓存注解 其中想要使用缓存直接&#xff0c;就必须开启**EnableCaching**注解 开启缓存注解的步骤&#xff1a; 作为Spring框架的核心功能之缓存注解&#xff0c;该功能也继承…

JAVA缓存的实现

缓存可分为二大类: 一、通过文件缓存,顾名思义文件缓存是指把数据存储在磁盘上&#xff0c;不管你是以XML格式&#xff0c;序列化文件DAT格式还是其它文件格式&#xff1b; 二、内存缓存&#xff0c;也就是实现一个类中静态Map,对这个Map进行常规的增删查. 下面为一个简单的缓…

java缓存技术的介绍

一、什么是缓存 1、Cache是高速缓冲存储器 一种特殊的存储器子系统&#xff0c;其中复制了频繁使用的数据以利于快速访问 2、凡是位于速度相差较大的两种硬件/软件之间的&#xff0c;用于协调两者数据传输速度差异的结构&#xff0c;均可称之为 Cache 二、缓存的分类 1、基于we…

Java缓存介绍

一、缓存 1、什么是缓存&#xff1f; 缓存是硬件&#xff0c;是CPU中的组件&#xff0c;CPU存取数据的速度非常的快&#xff0c;一秒钟能够存取、处理十亿条指令和数据&#xff08;术语&#xff1a;CPU主频1G&#xff09;&#xff0c;而内存就慢很多&#xff0c;快的内存能够达…

Java实现本地缓存、分布式缓存及多级缓存

以下均为自己参考其它博主文章或自己理解整理而成&#xff0c;如有错误之处&#xff0c;欢迎在评论区批评指正&#xff01; 0. 缓存简介 像MySql等传统的关系型数据库已经不能适用于所有的业务场景&#xff0c;比如电商系统的秒杀场景&#xff0c;APP首页的访问流量高峰场景&a…

Java本地高性能缓存的几种实现方式

Java缓存技术可分为远端缓存和本地缓存&#xff0c;远端缓存常用的方案有著名的redis和memcache&#xff0c;而本地缓存的代表技术主要有HashMap&#xff0c;Guava Cache&#xff0c;Caffeine和Encahche。本篇博文仅覆盖了本地缓存&#xff0c;且突出探讨高性能的本地缓存。 本…

SIFT的两个版本:OpenCV和VL_SIFT

暂时记录一下 OpenCV版本&#xff1a; #include<iostream> #include<opencv2/opencv.hpp> #include<opencv2/core.hpp> #include<opencv2/features2d.hpp> #include <opencv2/xfeatures2d/nonfree.hpp>using namespace std; using namespace c…

论文阅读笔记《Matching Images With Multiple Descriptors: An Unsupervised Approach for Locally Adaptive》

核心思想 本文提出一种将多种特征描述算法融合起来实现更好图像匹配的方法。近些年来&#xff0c;图像特征的描述算法层出不穷如SIFT、LIOP 、DAISY等等&#xff0c;每种方法都有各自的优势和侧重点&#xff0c;对于不同图像其效果也各有优劣。那么能不能将多种算法的优势结合起…

LIFT: Learned Invariant Feature Transform详细笔记

LIFT: Learned Invariant Feature Transform Paper: LIFT: Learned Invariant Feature Transform | SpringerLink Code: GitHub - cvlab-epfl/LIFT: Code release for the ECCV 2016 paper 文章目录 Abstract思路来源LIFT文献来源 方法&#xff1a;LIFTPipeline网络架构训练流…

简单的倒计时shell脚本

效果如下: 代码如下: #! /bin/bash #####################倒计时################ #作者:liop #完成时间:2019.12.17 #三位数以内秒数的倒计时 ########################################## display(){case $1 in1)case $2 in1)echo "******** ";;2)echo "…

计算机视觉领域经典论文源码

计算机视觉领域经典论文源码 转载自&#xff1a;http://blog.csdn.net/ddreaming/article/details/52416643 2016-CVPR论文代码资源&#xff1a; https://tensortalk.com/?catconference-cvpr-2016 一个GitHub账号&#xff0c;里面有很多计算机视觉领域最新论文的代码实现&am…

【译文】Local Intensity Order Pattern for Feature Description

在上一篇文章【特征检测】LIOP特征描述算法中讲到了LIOP描述符&#xff0c;下面我将原文翻译如下&#xff0c;如有出入请以原文为准。 —————————————————————————————————————————————————————————————————…

[2015 Springer] Local Image Descriptor: Modern Approaches——2 Classical Local Descriptors

转载请注明链接&#xff1a; 有问题请及时联系博主&#xff1a;Alliswell_WP 第一篇链接&#xff1a;https://blog.csdn.net/qq_21685903/article/details/103475243 第二篇链接&#xff1a;https://blog.csdn.net/qq_21685903/article/details/103610331 翻译 本地图像描述…

[2015 Springer] Local Image Descriptor: Modern Approaches——3 Intensity Order-Based Local Descriptors

转载请注明链接&#xff1a; 有问题请及时联系博主&#xff1a;Alliswell_WP&#xff1a;Alliswell_WP 第一篇链接&#xff1a;https://blog.csdn.net/qq_21685903/article/details/103475243 第二篇链接&#xff1a;https://blog.csdn.net/qq_21685903/article/details/10361…

在SIFT和SURF之后,有哪些比较新的且具有一定影响力的自然图像配准算法?

链接&#xff1a;https://www.zhihu.com/question/32066833/answer/2041516754 编辑&#xff1a;深度学习与计算机视觉 声明&#xff1a;仅做学术分享&#xff0c;侵删 作者&#xff1a;Vinjn张静https://www.zhihu.com/question/32066833/answer/54575191 我就提一下 OpenCV 中…

matlab vlfeat hog,vlfeat-0.9.20-bin 特征提取的工具包,实现各种 ,如hog,lbp,sift. matlab 242万源代码下载- www.pudn.com...

文件名称: vlfeat-0.9.20-bin下载 收藏√ [ 5 4 3 2 1 ] 开发工具: matlab 文件大小: 17828 KB 上传时间: 2015-07-21 下载次数: 0 提 供 者: 刘晓晶 详细说明&#xff1a;特征提取的工具包&#xff0c;实现各种特征&#xff0c;如hog,lbp,sift.-Feature extraction kit …

关于视觉SLAM的最先进技术的调查-A survey of state-of-the-art on visual SLAM

原文见文章末尾&#xff1a; 今天读了一篇视觉slam的综述&#xff0c;真的是读了一天&#xff0c;记录一下。我比较关注的是特征提取和匹配和深度学习有关的章节。好久&#xff0c;但是还算是有收获的吧。 摘要&#xff1a; 本文概述了视觉同步定位和测绘&#xff08;V-SLAM&a…