如何提高Runtime.getRuntime().totalMemory()

jackker 2008-01-26 06:46:13
使用启动参数
-J-server -J-Xms1024m -J-Xmx1024m

可以正常的将
maxMemory 最大设置为1g
但是totalMemory只有60m左右,这是什么回事?
如果使用内存超过了totalmemory会不会频繁gc?
如果提高totalMemory到和maxMomory一样的水平上?
...全文
1387 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackker 2008-01-27
  • 打赏
  • 举报
回复
楼上,问题是我设置了
-Xms1024m -Xmx1024m

现在的情况是,resin刚启动 totalMemory和 maxMemory是相等的
但是totalMemory会自己不断的减少
程序运行2,3天后,就变成了:

usedMemory: 61.63 MB
totalMemory: 84.50 MB
maxMemory: 986.12 MB


totalMemory和maxMemory的差距变得很大
但程序跑的仍然很好,我没开gc日志,不知道这种情况是否正常,为什么totalMemory会自己变少.
PS:我程序目前用得内存是比较小.
huoyin 2008-01-27
  • 打赏
  • 举报
回复
我的也是不相等的:
totalMemory: 4194304
maxMemory: 1072914432

老紫竹的两个相等的原因是这两个参数相等-Xms256m -Xmx256m,可以使这改为-Xms64m -Xmx256m应当就不会相等了。

totalMemory表示当前jvm正在占用的内存有多大,而maxMemory表示jvm最大可占用的内存有多大,所以一般maxMemory会大于totalMemory,如果两者很接近,怎应用程序的性能可能会比较差因为垃圾回收的缘故
jackker 2008-01-27
  • 打赏
  • 举报
回复
upup
huoyin 2008-01-27
  • 打赏
  • 举报
回复
你先把这个-Xms1024m调低到-Xms256m再试试看
jackker 2008-01-27
  • 打赏
  • 举报
回复
对,刚启动的时候都是1g,两者是相等的
但运行一会totalMemory就开始逐渐减少了.
huoyin 2008-01-27
  • 打赏
  • 举报
回复
不知道resin刚启动totalMemory和maxMemory是多大?都是1G吗?
jackker 2008-01-26
  • 打赏
  • 举报
回复
晕,我的windows系统下和linux下的都是totalMemory和maxMemory不相等.
谢谢帮忙测试,结贴事我会算好分的 :)
老紫竹 2008-01-26
  • 打赏
  • 举报
回复
测试结果没有问题!相等的
老紫竹 2008-01-26
  • 打赏
  • 举报
回复
好的!我测一下我的Tomcat
jackker 2008-01-26
  • 打赏
  • 举报
回复
啊,我是resin的启动脚本,直接贴过来了,实际和-Xmx1024m 是一样的,-J是resin启动脚本传递给JVM的参数.
你是否方便测试一下你的tomcat或者resin在使用过程中,totalMemory和maxMemory是否是一样的?
老紫竹 2008-01-26
  • 打赏
  • 举报
回复
你那个 -J-Xmx1024m

是啥啊?我还真没注意,标准JVM参数是没有-J的
jackker 2008-01-26
  • 打赏
  • 举报
回复
maxMemory() == 1g,这个显示的是正常的

usedMemory: 61.63 MB
totalMemory: 84.50 MB
maxMemory: 986.12 MB

这是目前我机器的情况

我关心的是,usedMemory不短的达到totalMemory,然后是否会进行频繁GC?
totalMemory比maxMemory小这么多是否正常?
能不能totalMemory和maxMemory一样?
老紫竹 2008-01-26
  • 打赏
  • 举报
回复
我晕,我测试的结果

  public static void main(String[] args) {
System.out.println(Runtime.getRuntime().totalMemory());
System.out.println(Runtime.getRuntime().maxMemory());
}


JVM 参数
 -Xms256m -Xmx256m


运行结果
266403840
266403840


竟然是全部的分配的内存!!!!
老紫竹 2008-01-26
  • 打赏
  • 举报
回复
你分配了最大允许内存,但JAVA不一定直接使用那么多哦!

也许当前就是60M呢,随着程序的运行,应该会逐步增加的
maxMemory(); 你运行看看,是不是有用!

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧