java内存缓存
1、TreeCache / JBossCache
JBossCache是一个复制的事务处理缓存,它允许你缓存企业级应用数据来更好的改善性能。缓存数据被自动复制,让你轻松进行JBoss服务器之间 的集群工作。JBossCache能够通过JBoss应用服务或其他J2EE容器来运行一个MBean服务,当然,它也能独立运行。
2、WhirlyCache
Whirlycache是一个快速的、可配置的、存在于内存中的对象的缓存。它能够通过缓存对象来加快网站或应用程序的速度,否则就必须通过查询数据库或其他代价较高的处理程序来建立。
3、SwarmCache
SwarmCache是一个简单且有效的分布式缓存,它使用IP multicast与同一个局域网的其他主机进行通讯,是特别为集群和数据驱动web应用程序而设计的。SwarmCache能够让典型的读操作大大超过写操作的这类应用提供更好的性能支持。
4、JCache
JCache是个开源程序,正在努力成为JSR-107开源规范,JSR-107规范已经很多年没改变了。这个版本仍然是构建在最初的功能定义上。
5、ShiftOne
ShiftOne Java Object Cache是一个执行一系列严格的对象缓存策略的Java lib,就像一个轻量级的配置缓存工作状态的框架。
㈡ java 怎么把数据存到内存中
这里你采纳与否没关系,给你说说编程与内存的关系。
你定义的任何变量,常量,类,方法等等,其实都在内存中,没有所谓的把数据存内存中,这概念,你可以想一下电脑重启或关机后,内存中的所有数据,都会丢失,除非你保存到磁盘中去。
在内存中的数据有两块,第一、缓冲,一般写数据到磁盘的时候开辟出来的内存空间;第二、缓存,一般是从磁盘读数据到内存中开辟出来的内存空间。会这么使用,原因很简单,磁盘读写数据速度与内存不一致(磁盘的存取效率远远小于内存的存取效率),为了提高数据的存取效率,才会这么干的。
一般而言,java中的所谓数据,大部分都是类,从自动引用计数的概念来分析,你想把对象长久的放在内存中,不会被垃圾回收机制释放,注意制药有一个对象在使用/引用你的数据,这条数据就会存在内存中。所以,想servlet中的全局配置参数,随时可以取到还是唯一一份,你可以参考一下。
另外内存使用分堆与栈,堆在面向对象编程中存储对象的,栈是方法或函数执行的时候临时开辟的存储空间,方法或函数执行完毕就会释放。
希望我的回复能帮助到你,采纳与否没关系。有更好的答案,我就隐藏我的回复。
㈢ java缓存
缓存有2部分,1客户端缓存,
2服务器端缓存
你说的是客户端缓存,jquery主要是利用js进行缓存的,也就是cookie
学java吧,给我email我指点你 [email protected]
㈣ 使用java实现以个简单的缓存机制
你这个分数太少了吧,程序到是有,不过给你有点可惜
CacheMgr.java
import java.util.*;
import cn.javass.framework.cache.vo.CacheConfModel;
public class CacheMgr {
private static Map cacheMap = new HashMap();
private static Map cacheConfMap = new HashMap();
private CacheMgr(){
}
private static CacheMgr cm = null;
public static CacheMgr getInstance(){
if(cm==null){
cm = new CacheMgr();
Thread t = new ClearCache();
t.start();
}
return cm;
}
/**
* 增加缓存
* @param key
* @param value
* @param ccm 缓存对象
* @return
*/
public boolean addCache(Object key,Object value,CacheConfModel ccm){
boolean flag = false;
cacheMap.put(key, value);
cacheConfMap.put(key, ccm);
System.out.println("now addcache=="+cacheMap.size());
return true;
}
/**
* 删除缓存
* @param key
* @return
*/
public boolean removeCache(Object key){
cacheMap.remove(key);
cacheConfMap.remove(key);
System.out.println("now removeCache=="+cacheMap.size());
return true;
}
/**
* 清除缓存的类
* @author wanglj
* 继承Thread线程类
*/
private static class ClearCache extends Thread{
public void run(){
while(true){
Set tempSet = new HashSet();
Set set = cacheConfMap.keySet();
Iterator it = set.iterator();
while(it.hasNext()){
Object key = it.next();
CacheConfModel ccm = (CacheConfModel)cacheConfMap.get(key);
//比较是否需要清除
if(!ccm.isForever()){
if((new Date().getTime()-ccm.getBeginTime())>= ccm.getDurableTime()*60*1000){
//可以清除,先记录下来
tempSet.add(key);
}
}
}
//真正清除
Iterator tempIt = tempSet.iterator();
while(tempIt.hasNext()){
Object key = tempIt.next();
cacheMap.remove(key);
cacheConfMap.remove(key);
}
System.out.println("now thread================>"+cacheMap.size());
//休息
try {
Thread.sleep(60*1000L);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
CacheConfModel.java
public class CacheConfModel implements java.io.Serializable{
private long beginTime;
private boolean isForever = false;
private int rableTime;
public long getBeginTime() {
return beginTime;
}
public void setBeginTime(long beginTime) {
this.beginTime = beginTime;
}
public boolean isForever() {
return isForever;
}
public void setForever(boolean isForever) {
this.isForever = isForever;
}
public int getDurableTime() {
return rableTime;
}
public void setDurableTime(int rableTime) {
this.rableTime = rableTime;
}
}
顺便说一句,缓存的管理不是靠时间久来计算的,是靠最大不活动间隔计算的,你的设计思想有问题
㈤ Java编程测试1M内存可用来缓存多少对象
为了提高系统的响应 性能 ,一般都会采用缓存技术来实现,如果用象ehcache、oscache这样的 开源 的cache工具来实现,一般都需要由 开发 人员来设置maxElementsInMemory这个值,但这个值在设置的时候大家都是怎么去设置的呢?凭想象还是随便写一个值呢?
为了提高系统的响应性能,一般都会采用缓存技术来实现,如果用象ehcache、oscache这样的开源的cache工具来实现,一般都需要由开发人员来设置maxElementsInMemory这个值,但这个值在设置的时候大家都是怎么去设置的呢?凭想象还是随便写一个值呢?这个值设的过大嘛有可能会造成outofmemory,设的过小嘛又浪费服务器巨大的内存,为了能够更好的设置这个值,我写了个测试程序来估算1M内存能够缓存多少个对象,代码如下:
clearcase/" target="_blank" >cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
public void testSpike(){
print("最大的内存为:"+Runtime.getRuntime().maxMemory()/1024);
print("总的内存为:"+Runtime.getRuntime().totalMemory()/1024);
print("==================================");
long currMemory=Runtime.getRuntime().freeMemory();
print("目前可用的内存为:"+currMemory/1024);
print("==================================");
Map cache=new HashMap();
for (int i = 0; i < 500000; i++) {
MockBean bean=new MockBean();
bean.setId(i);
bean.setName("jerry"+i);
bean.setValue(i+"jerry");
cache.put(String.valueOf(i), bean);
long tempMemory=Runtime.getRuntime().freeMemory();
if((currMemory-tempMemory)/1024==1024){
print("此时可用的内存为:"+tempMemory/1024);
print("此时缓存了:"+i+"个对象");
break;
}
}
print("==================================");
cache.clear();
long tempMemory=Runtime.getRuntime().freeMemory();
print("目前可用的内存为:"+tempMemory/1024);
print("消耗的内存为:"+(currMemory-tempMemory)/1024);
print("==================================");
Runtime.getRuntime().gc();
tempMemory=Runtime.getRuntime().freeMemory();
print("目前可用的内存为:"+tempMemory/1024);
print("消耗的内存为:"+(currMemory-tempMemory)/1024);
}
private void print(String msg){
System.out.println(msg);
}
在我机器上运行的结果是1M内存可缓存大概4479个对象,同时可以看到,在cache.clear后内存并没有变化,因为gc是没那么及时的,这个时候显式的调用gc则会发现可用的内存量甚至比最初都多。
当然,这里只是个简单的测试,这里测试的也只是缓存一个非常简单的bean对象,缓存的对象消耗的内存大小还需要根据这个对象中具体的内容而定,比如当缓存的是blob类型的字段的时候,可想而知,这个时候消耗的内存量绝对是不同的。
这里只是建议大家在对系统性能做优化时最好根据需要缓存的内容做一个估算,设置好应用所需要的jvm的内存值,以便充分利用服务器的硬件资源
㈥ 什么是Java缓存技术Cache
java缓存技术
一、什么是缓存
1、Cache是高速缓冲存储器 一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问
2、凡是位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为 Cache
二、缓存的分类
1、基于web应用的系统架构图
2、在系统架构的不同层级之间,为了加快访问速度,都可以存在缓存
操作系统磁盘缓存->减少磁盘机械操作
数据库缓存->减少文件系统I/O
应用程序缓存->减少对数据库的查询
Web服务器缓存->减少应用服务器请求
客户端浏览器缓存->减少对网站的访问。
㈦ Java的缓存框架有什么用
(1100)(0)一、什么是缓存1、Cache是高速缓冲存储器一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问2、凡是位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为Cache二、缓存的分类1、基于web应用的系统架构图2、在系统架构的不同层级之间,为了加快访问速度,都可以存在缓存操作系统磁盘缓存->减少磁盘机械操作数据库缓存->减少文件系统I/O应用程序缓存->减少对数据库的查询Web服务器缓存->减少应用服务器请求客户端浏览器缓存->减少对网站的访问三、操作系统缓存1、文件系统提供的DiskCache:操作系统会把经常访问到的文件内容放入到内存当中,由文件系统来管理2、当应用程序通过文件系统访问磁盘文件的时候,操作系统从DiskCache当中读取文件内容,加速了文件读取速度3、DiskCache由操作系统来自动管理,一般不用人工干预,但应当保证物理内存充足,以便于操作系统可以使用尽量多的内存充当DiskCache,加速文件读取速度4、特殊的应用程序对文件系统DiskCache有很高的要求,会绕开文件系统DiskCache,直接访问磁盘分区,自己实现Disk5、Cache策略Oracle的rawdevice(裸设备)–直接抛弃文件系统MySQL的InnoDB:innodb_flush_method=O_DIRECT四、数据库缓存1、重要性数据库通常是企业应用系统最核心的部分数据库保存的数据量通常非常庞大数据库查询操作通常很频繁,有时还很复杂以上原因造成数据库查询会引起非常频繁的磁盘I/O读取操作,迫使CPU挂起等待,数据库性能极度低下2、缓存策略a、QueryCache以SQL作为key值缓存查询结果集一旦查询涉及的表记录被修改,缓存就会被自动删除设置合适的QueryCache会极大提高数据库性能QueryCache并非越大越好,过大的QqueryCache会浪费内存。MySQL:query_cache_size=128Mb、DataBufferdatabuffer是数据库数据在内存中的容器databuffer的命中率直接决定了数据库的性能databuffer越大越好,多多益善MySQL的InnoDBbuffer:innodb_buffer_pool_size=2GMySQL建议bufferpool开大到服务器物理内存60-80%五、应用程序缓存1、对象缓存由O/RMapping框架例如Hibernate提供,透明性访问,细颗粒度缓存数据库查询结果,无需业务代码显式编程,是最省事的缓存策略当软件结构按照O/RMapping框架的要求进行针对性设计,使用对象缓存将会极大降低Web系统对于数据库的访问请求良好的设计数据库结构和利用对象缓存,能够提供极高的性能,对象缓存适合OLTP(联机事务处理)应用2、查询缓存对数据库查询结果集进行缓存,类似数据库的QueryCache适用于一些耗时,但是时效性要求比较低的场景。查询缓存和对象缓存适用的场景不一样,是互为补充的当查询结果集涉及的表记录被修改以后,需要注意清理缓存3、页面缓存a、作用针对页面的缓存技术不但可以减轻数据库服务器压力,还可以减轻应用服务器压力好的页面缓存可以极大提高页面渲染速度页面缓存的难点在于如何清理过期的缓存b、分类I、动态页面静态化利用模板技术将访问过一次的动态页面生成静态html,同时修改页面链接,下一次请求直接访问静态链接页面动态页面静态化技术的广泛应用于互联网CMS/新闻类Web应用,但也有BBS应用使用该技术,例如Discuz!无法进行权限验证,无法显示个性化信息可以使用AJAX请求弥补动态页面静态化的某些缺点II、Servlet缓存针对URL访问返回的页面结果进行缓存,适用于粗粒度的页面缓存,例如新闻发布可以进行权限的检查OScache提供了简单的Servlet缓存(通过web.xml中的配置)也可以自己编程实现Servlet缓存III、页面内部缓存针对动态页面的局部片断内容进行缓存,适用于一些个性化但不经常更新的页面(例如博客)OSCache提供了简单的页面缓存可以自行扩展JSPTag实现页面局部缓存六、web服务器端缓存基于代理服务器模式的Web服务器端缓存,如squid/nginxWeb服务器缓存技术被用来实现CDN(内容分发网络contentdeliverynetwork)被国内主流门户网站大量采用不需要编程,但仅限于新闻发布类网站,页面实时性要求不高七、基于ajax的浏览器缓存使用AJAX调用的时候,将数据库在浏览器端缓存只要不离开当前页面,不刷新当前页面,就可以直接读取缓存数据只适用于使用AJAX技术的页面
㈧ java怎么将数据放入缓存
java放入session缓存中
方法如下:
session.setAttribute("Name",Value);
Name 随便取,value就是要放的数据
获取的时候session.getAttribute("Name);
就可以了
㈨ java作缓存时,缓存进内存还是用redis好
如果数据比较小,并且不会大量并发存储 可以选择存在内存, 否则 当然选用存储服务来进行存储。 没有什么是一定好的,根据实际情况选择技术。
㈩ java 线程什么时候会从主内存刷新本地缓存
你的4个变量一旦声明会自动在内存中创建。
jvm也没有你说的缓存,高速缓存这些东西,全部放在堆内存中。
堆内存中的东西在GC的时候会移动