为什么缓存Java对象?

为什么缓存Java对象?,java,caching,Java,Caching,为什么我们需要Java对象的缓存?有人能给我一个需要缓存对象的真实例子吗?另外,给出一些关于缓存设计、缓存类型以及多线程执行期间缓存的后果的要点。在Java中支持缓存的所有API是什么 为什么我需要单独的缓存API,因为我可以在内存中存储普通的java对象。当创建对象的操作非常昂贵时,您想要缓存对象,这对于从硬件级别的磁盘与ram读取数据一直到像java这样的高级编程语言都是如此。如果创建一个对象需要10毫秒,从缓存中提取该对象需要1毫秒,如果您重复使用对象,则可以使用10毫秒+1毫秒来创建对象

为什么我们需要Java对象的缓存?有人能给我一个需要缓存对象的真实例子吗?另外,给出一些关于缓存设计、缓存类型以及多线程执行期间缓存的后果的要点。在Java中支持缓存的所有API是什么


为什么我需要单独的缓存API,因为我可以在内存中存储普通的java对象。

当创建对象的操作非常昂贵时,您想要缓存对象,这对于从硬件级别的磁盘与ram读取数据一直到像java这样的高级编程语言都是如此。如果创建一个对象需要10毫秒,从缓存中提取该对象需要1毫秒,如果您重复使用对象,则可以使用10毫秒+1毫秒来创建对象并重复使用,或者使用10毫秒+10毫秒来创建对象两次。重复使用次数越多,缓存性能越好

当你编写一个多线程程序时,你需要考虑并发访问你的对象,如果你有一个银行账户对象,两个线程读取余额并更新它,那么你最终可以让两个线程读取相同的值,并在此基础上写入一个新值,因此,两次100英镑的存款可能只会导致您的银行余额增加100英镑,因为要更新的第二个线程的当前余额值已过时


包中有很多类来处理并发性以及
synchronized
关键字。Oracle提供了大量资源。

当创建对象的成本非常高时,您希望缓存对象,从硬件级别的磁盘与ram读取数据,一直到Java之类的高级编程语言,都是如此。如果创建一个对象需要10毫秒,从缓存中提取该对象需要1毫秒,如果您重复使用对象,则可以使用10毫秒+1毫秒来创建对象并重复使用,或者使用10毫秒+10毫秒来创建对象两次。重复使用次数越多,缓存性能越好

当你编写一个多线程程序时,你需要考虑并发访问你的对象,如果你有一个银行账户对象,两个线程读取余额并更新它,那么你最终可以让两个线程读取相同的值,并在此基础上写入一个新值,因此,两次100英镑的存款可能只会导致您的银行余额增加100英镑,因为要更新的第二个线程的当前余额值已过时

包中有很多类来处理并发性以及
synchronized
关键字。Oracle有很多资源。

您不需要缓存对象,但是您可能希望这样做以节省内存、I/O和CPU资源等

记忆力 例如,JVM可能缓存
Integer
对象,每当您要求创建一个新对象时,它可能只返回一个对已经存在的具有相同值的对象的引用。阅读更多关于模式的内容

中央处理器 通过将需要大量CPU计算的结果存储在缓存中,可以节省CPU资源。相关技术:

输入输出 通过在应用程序中缓存一些数据,您可以在I/O上进行保存,而不是每次访问时都访问数据库、硬盘驱动器或网络

请求的示例:

假设您正在构建一个需要显示股票报价的网站,您将通过一个web API(网络I/O)来读取这些报价。您只需要每分钟更新一次价格(不经常更改)。您的网站同时被多个用户使用(并发/多线程)

缓存解决方案可以是每分钟读取一次股票价格,然后将其保存在线程安全的对象中。每个线程(表示并发用户的请求)都将从该对象读取数据,而不是每次都点击web API(节省网络I/O)

该对象是线程安全的,因此当缓存值每分钟更新时,线程不会以不一致的状态读取该缓存值

所以每个客户端都需要等待 让另一个客户完成他们的 任务

旁注:这是一个并发问题,而不是缓存问题

不,不一定,因为有线程安全的结构不会阻止读取。此外,在本例中,只有一个线程将更新对象(周期性的一分钟价格更新)

为了详细说明,假设我们将这些股票价格缓存在
ConcurrentHashMap
中,其中字符串表示股票符号“GOOG”、“ORCL”、“MSFT”等,大十进制表示股票的价格/报价

为了服务您的用户,您将从该地图中读取如下值:

price = quotesMap.get("GOOG"); // get Google stocks quote
该调用是线程安全的非阻塞(不需要锁定)调用,您的多个线程可以同时从映射中进行检索

所有get()调用都将收到最新的完成的更新(由价格更新线程在调用
ConcurrentHashMap.put()
更新价格缓存时完成)。

您不需要缓存对象,但您可能希望这样做以节省内存,I/O和CPU资源等

记忆力 例如,JVM可能缓存
Integer
对象,每当您要求创建一个新对象时,它可能只返回一个对已经存在的具有相同值的对象的引用。阅读更多关于模式的内容

中央处理器 通过将需要大量CPU计算的结果存储在缓存中,可以节省CPU资源。相关技术:

输入输出 通过在应用程序中缓存一些数据,您可以在I/O上进行保存,而不是每次访问时都访问数据库、硬盘驱动器或网络

请求的示例:

假设您正在构建一个需要显示股票报价的网站,您将通过一个web API(网络I/O)来读取这些报价。你只是