各位大大,请容小弟先描述一下情况。
我用了一个map来做缓存聊天记录,一有新的记录我就往map里面放。
但是我们怎么知道这map的量呢?比如这里面存的数据达到一定量的时候我释放一部分。
map在引用聊天记录,java肯定不会自动释放的。
我忘了说,是static 来定义的map,不是B/S的程序,C/S模式的。
java内存或者是缓存管理怎么实现?
答案:6 悬赏:70
解决时间 2021-03-05 10:31
- 提问者网友:年齡太小℡蘿莉
- 2021-03-05 00:28
最佳答案
- 二级知识专家网友:颜值超标
- 2021-03-05 01:05
晕, 你确定你是用Java,
OK,不管Java还是C#
1. 定义你的map
HashMap<String, String> map = new HashMap<String, String>();
2. 存入你的信息, 反正你得要有个唯一标识的key,以及你想存的对象
map.put("userid", "userMessage");
....
3. 每次存入后,判断一下当前大小,java 的hashmap是size()方法,如果大于你的最大数,把原来存的前进前出删掉
if(map.size()>100){
//map.remove(arg0)
....
}
更高级内容:
如果对map中的cache内容有过访问,给该内容的权重+1,每次删除的时候先将权重由小至大删除。 这就是命中率缓存,一般缓存都是按这种算法做的,只是具体算法有改进
OK,不管Java还是C#
1. 定义你的map
HashMap<String, String> map = new HashMap<String, String>();
2. 存入你的信息, 反正你得要有个唯一标识的key,以及你想存的对象
map.put("userid", "userMessage");
....
3. 每次存入后,判断一下当前大小,java 的hashmap是size()方法,如果大于你的最大数,把原来存的前进前出删掉
if(map.size()>100){
//map.remove(arg0)
....
}
更高级内容:
如果对map中的cache内容有过访问,给该内容的权重+1,每次删除的时候先将权重由小至大删除。 这就是命中率缓存,一般缓存都是按这种算法做的,只是具体算法有改进
全部回答
- 1楼网友:青春如此荒謬
- 2021-03-05 05:51
看你是要怎么保留 hibernate有二级缓存 你可以利用,还有就是session cookie都是可以设置的
session会话层面。可以设置时间 cookie基于浏览器 一端即为客户端~
- 2楼网友:兮沫♡晨曦
- 2021-03-05 04:46
我不太清楚你为什么用map来存放数据?你用什么作为key呢?如果是我做的话我会自定义一个对象,里面大体上有如下属性:发言人、发言时间、发言内容等。然后用list存放这些对象,list是由顺序的。如果长度到达一定值可以把最先放进去的对象清除掉或移动到其他地方。
- 3楼网友:不傲怎称霸
- 2021-03-05 03:39
利用数据池来监听 此map 即可。一旦超过你所设定的量 清空
- 4楼网友:一个很哇塞的汉子
- 2021-03-05 03:20
缓存有2部分,1客户端缓存,
2服务器端缓存
你说的是客户端缓存,jquery主要是利用js进行缓存的,也就是cookie
学java吧,给我email我指点你 [email protected]
- 5楼网友:荒唐后生
- 2021-03-05 02:43
1、Java的内存管理就是对象的分配和释放问题。
在Java中,程序员需要通过关键字new为每个对象申请内存空间 (基本类型除外),所有的对象都在堆 (Heap)中分配空间。
对象的释放是由GC决定和执行的。
在Java中,内存的分配是由程序完成的,而内存的释放是有GC完成的,这种收支两条线的方法简化了程序员的工作。但也加重了JVM的工作。这也是Java程序运行速度较慢的原因之一。
GC释放空间方法:
监控每一个对象的运行状态,包括对象的申请、引用、被引用、赋值等。当该对象不再被引用时,释放对象。
2、内存管理结构
Java使用有向图的方式进行内存管理,对于程序的每一个时刻,我们都有一个有向图表示JVM的内存分配情况。
将对象考虑为有向图的顶点,将引用关系考虑为图的有向边,有向边从引用者指向被引对象。另外,每个线程对象可以作为一个图的起始顶点,例如大多程序从main进程开始执行,那么该图就是以main进程顶点开始的一棵根树。在这个有向图中,根顶点可达的对象都是有效对象,GC将不回收这些对象。如果某个对象 (连通子图)与这个根顶点不可达(注意,该图为有向图),那么我们认为这个(这些)对象不再被引用,可以被GC回收。
3、使用有向图方式管理内存的优缺点
Java使用有向图的方式进行内存管理,可以消除引用循环的问题,例如有三个对象,相互引用,只要它们和根进程不可达的,那么GC也是可以回收它们的。
这种方式的优点是管理内存的精度很高,但是效率较低。
另外一种常用的内存管理技术是使用计数器,例如COM模型采用计数器方式管理构件,它与有向图相比,精度行低(很难处理循环引用的问题),但执行效率很高。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯