Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSR107-缓存(JCache)与CPU缓存_Java_Jcache - Fatal编程技术网

Java JSR107-缓存(JCache)与CPU缓存

Java JSR107-缓存(JCache)与CPU缓存,java,jcache,Java,Jcache,我读过关于JSR107缓存(JCache)的文章 我很困惑: 据我所知,每个CPU都管理自己的缓存内存(无需操作系统的任何帮助) 那么,为什么我们需要Java缓存处理程序呢?(如果CPU管理自己的缓存) 我错过了什么 谢谢这是关于缓存Java对象的,比如创建成本很高的对象,或者需要在多个Java虚拟机之间共享的对象。看 缓存通常用于在两次使用之间临时保存数据,因为它需要太多时间,或者如果在两次使用之间将数据丢弃,则无法重新创建 CPU缓存保留数据和指令,以防再次访问,因为从内存读取数据需要更多时

我读过关于JSR107缓存(JCache)的文章

我很困惑: 据我所知,每个CPU都管理自己的缓存内存(无需操作系统的任何帮助)

那么,为什么我们需要Java缓存处理程序呢?(如果CPU管理自己的缓存)

我错过了什么


谢谢

这是关于缓存Java对象的,比如创建成本很高的对象,或者需要在多个Java虚拟机之间共享的对象。看

缓存通常用于在两次使用之间临时保存数据,因为它需要太多时间,或者如果在两次使用之间将数据丢弃,则无法重新创建

CPU缓存保留数据和指令,以防再次访问,因为从内存读取数据需要更多时间


JSR107缓存工作在完全不同的级别

CPU缓存和内存缓存之间存在差异。这种JCache将把东西缓存在内存中,这样您就不必从昂贵的资源(如磁盘)或通过网络获取它

所以CPU内置了缓存,这样就可以避免进入内存。CPU通常有三级缓存和8MB左右的存储空间。CPU缓存不是您必须担心的事情,因为它是为您处理的。如果某个东西不在CPU缓存中,那么它必须将其从内存中取出


在内存中缓存是为了避免访问磁盘,甚至是我前面提到的较慢的资源。这种机制由程序控制。因此,如果您想避免不断地向DB询问某个对象,您可以将其存储在内存中,并不断返回相同的对象。这节省了相当多的性能。正如Thomas提到的,JCache添加了能够跨JVM提供缓存的功能。据我所知,这意味着不同的Java程序可以共享同一个缓存。

谢谢。如果我使用池,并且在启动时(而不是在运行时)创建所有对象,那么我是否也需要使用JCache?(在这种情况下使用JCache是否有效?)。使用池也是一种缓存。如果一个简单的游泳池适合你,那就去吧。如果它真的是最好的设计,那么在应用程序上没有更多的信息是不可能的。我将对象存储在池中,但我不确定数据是否总是存储在缓存中而不是RAM中……所有对象都在RAM中。因为您的池和JCache都使用对象,所以它们也在RAM中。好的,所以没有区别,因为JCache使用的是RAM而不是CPU缓存?请您提供更多信息。CPU缓存也会做同样的事情:缓存内存中的东西,这样它就不必从RAM(昂贵的资源)获取它,那么有什么不同呢?CPU缓存被限制为8MB,您无法控制它。你有足够的内存,千兆字节的内容,你可以控制它。谢谢你的帮助:)