Titan专栏
用文字来整理生命
BlogJava
::
首页
::
新随笔
::
联系
::
聚合
::
管理
::
44 随笔 :: 49 文章 :: 19 评论 :: 0 Trackbacks
<
2024年11月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(7)
给我留言
查看公开留言
查看私人留言
随笔档案
(44)
2009年3月 (1)
2006年3月 (1)
2006年2月 (9)
2006年1月 (26)
2005年12月 (6)
2005年11月 (1)
文章分类
(49)
C#技术(1)
(rss)
Dictionary(1)
(rss)
Java技术(10)
(rss)
MS SQLServer(3)
(rss)
Oracle(1)
(rss)
PerformanceMonitor(5)
(rss)
候捷老师的文笔(2)
(rss)
娱乐(5)
(rss)
性能测试(3)
(rss)
数据库同步(2)
(rss)
数据库系统概念--习题答案
(rss)
数据结构与算法(1)
(rss)
精彩人生(6)
(rss)
索引调优(7)
(rss)
读书(2)
(rss)
文章档案
(49)
2006年3月 (5)
2006年2月 (16)
2006年1月 (20)
2005年12月 (7)
2005年11月 (1)
相册
Life
家乡
国外经典
MIT's OpenCourseWare
www.quest.com
好友
jerry
Paul's Repository
(rss)
下巴
滔滔
技术测试
piaocl的专栏
可慧网络
技术链接
读书、思考、生活
Bjug
EclipsePowered
jini (99% jakarta) blogging
Michael Chen
O'Reilly BookList
Programmer's Life
刑红瑞
地狱男爵
梦想风暴
满江红
破门点滴
透明思考
搜索
最新评论
1. re: [转]快速平方根算法
推导方式是:泰勒公式,高等数学中可以看到相关知识。
多次求导。多项式累加。精度与多项式个数有关。
--隐秘机动部队
2. re: 使用javamail发送html邮件[未登录]
hhhhh
--ggg
3. re: 使用javamail发送html邮件
来了来了
--来了来了
4. re: 使用javamail发送html邮件
charset=gb2312设置后还是乱码啊
--11
5. re: >读后感
有点唯心
--newbie
阅读排行榜
1. B-树(3024)
2. 关于"错误 18483:未能连接到服务器 "XXX",因为 'distributor_admin'未在该服务器上定义为远程登陆"(2592)
3. B+树的定义(1550)
4. 罗列一下自己看过了的小说(572)
5. <英雄时代>>读后感(514)
评论排行榜
1. B-树(3)
2. 幸福在哪里(2)
3. 罗列一下自己看过了的小说(2)
4. <英雄时代>>读后感(1)
5. 阅读程序,学习程序开发的关键环节 (1)
1M内存可用来缓存多少对象?
为了提高系统的响应性能,一般都会采用缓存技术来实现,如果用象ehcache、oscache这样的开源的cache工具来实现,一般都需要由开发人员来设置maxElementsInMemory这个值,但这个值在设置的时候大家都是怎么去设置的呢?凭想像还是随便写一个值呢?这个值设的过大嘛有可能会造成outofmemory,设的过小嘛又浪费服务器巨大的内存,为了能够更好的设置这个值,我写了个测试程序来估算1M内存能够缓存多少个对象,代码如下:
1
public
void
testSpike()
{
2
print(
"
最大的内存为:
"
+
Runtime.getRuntime().maxMemory()
/
1024
);
3
print(
"
总的内存为:
"
+
Runtime.getRuntime().totalMemory()
/
1024
);
4
print(
"
==================================
"
);
5
long
currMemory
=
Runtime.getRuntime().freeMemory();
6
print(
"
目前可用的内存为:
"
+
currMemory
/
1024
);
7
print(
"
==================================
"
);
8
Map cache
=
new
HashMap();
9
for
(
int
i
=
0
; i
<
500000
; i
++
)
{
10
MockBean bean
=
new
MockBean();
11
bean.setId(i);
12
bean.setName(
"
jerry
"
+
i);
13
bean.setValue(i
+
"
jerry
"
);
14
cache.put(String.valueOf(i), bean);
15
long
tempMemory
=
Runtime.getRuntime().freeMemory();
16
if
((currMemory
-
tempMemory)
/
1024
==
1024
)
{
17
print(
"
此时可用的内存为:
"
+
tempMemory
/
1024
);
18
print(
"
此时缓存了:
"
+
i
+
"
个对象
"
);
19
break
;
20
}
21
}
22
print(
"
==================================
"
);
23
cache.clear();
24
long
tempMemory
=
Runtime.getRuntime().freeMemory();
25
print(
"
目前可用的内存为:
"
+
tempMemory
/
1024
);
26
print(
"
消耗的内存为:
"
+
(currMemory
-
tempMemory)
/
1024
);
27
print(
"
==================================
"
);
28
Runtime.getRuntime().gc();
29
tempMemory
=
Runtime.getRuntime().freeMemory();
30
print(
"
目前可用的内存为:
"
+
tempMemory
/
1024
);
31
print(
"
消耗的内存为:
"
+
(currMemory
-
tempMemory)
/
1024
);
32
}
33
34
private
void
print(String msg)
{
35
System.out.println(msg);
36
}
在我机器上运行的结果是1M内存可缓存大概4479个对象,同时可以看到,在cache.clear后内存并没有变化,因为gc是没那么及时的,这个时候显式的调用gc则会发现可用的内存量甚至比最初都多,呵呵
当然,这里只是个简单的测试,这里测试的也只是缓存一个非常简单的bean对象,缓存的对象消耗的内存大小还需要根据这个对象中具体的内容而定,比如当缓存的是blob类型的字段的时候,可想而知,这个时候消耗的内存量绝对是不同的。
这里只是建议大家在对系统性能做优化时最好根据需要缓存的内容做一个估算,设置好应用所需要的jvm的内存值,以便充分利用服务器的硬件资源。
posted on 2006-01-17 21:18
Titan
阅读(254)
评论(0)
编辑
收藏
所属分类:
Java技术
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
使用javamail发送html邮件
javamail发送带有附件的html邮件
执行的Runtime类调用程序停掉的原因
java语言对时间的处理
java如何计算两个日期之间相差的天数
[转]正则表达式之道
1M内存可用来缓存多少对象?
[转]一些好用的Eclipse 3.0插件
[转]JDBC连接数据库经验技巧集萃
[转]Java操作Excel完美解决方案
Powered by:
BlogJava
Copyright © Titan