日期:2014-05-20  浏览次数:20843 次

怎么让jvm可调用更多内存…… 高分!求大侠帮助
试过用-Xmx 但是只能设置在1600M左右内存 再大就会启动不了~说内存不足
这个程序需要大量的内存(本机内存4G) 但是内存一般占用到1600M左右就会显示内存溢出了 
但是还有2G多的物理内存没被使用 我想让程序可以继续使用剩下的物理内存 也就是说分配尽可能多的内存给这个程序 请问要怎么设置呢。。1600M完全不够呢……

------解决方案--------------------
貌似有个办法,忘记具体怎么做了,反正是可以把win32的最大应用程序可用内存扩大到3G。 google吧,如果能翻墙的话。。。。。
------解决方案--------------------
探讨
引用:
jar包由400多个文件编译而成 1600M的内存大概够用3天左右 更换处理方式不太实际 所以想拓展程序可用内存


我们的项目光jar就用到了284个,总大小为117M,有开源的jar,有我们自己写的,程序照样跑啊!

一开始够用,跑着跑着就不够用,很明显存在内存泄露,加再大的内存也没用!

------解决方案--------------------
不知道楼主要干什么

貌似32位的硬件,给一个进程最多分配也就2G内存

建议你看看打印的oom信息是哪里溢出了

是heap的还是stack的

先找到内存分配为什么会一直增加,看是否有解决方案。比如有资源没关闭神马的

然后,看看你内存中的对象是否可以尽量缩短生命周期

再然后,看下你的程序中是否有使用软引用或者弱引用的机会




------解决方案--------------------
dos命令行:java -Xss512k
------解决方案--------------------
如果是堆溢出,那么说明在申请新的内存的时候堆内存已经到最大值并且全部被分配出去了

基于这种情况,建议楼主做的事情是

1、纠集一部分研发骨干,通读整体代码,结合工具找到内存被分配且没被回收的原因,解决此问题

2、分析业务与代码实现,找到一些不必须一直持有的大的对象,变更引用方式为弱引用。

3、如果确实没有内存溢出。通过-Xmx和-Xms 设置虚拟机最大堆内存

-Xss 是设置每个线程的虚拟机栈、计数器、本地方法栈的大小。这个默认值貌似是256K,设置为512K,在总内存不变的情况下,堆内存会变的更小,加快了内存溢出的时间。

另外,如果是Heap的溢出,是否可以看到是老年代溢出还是新生代溢出呢?我记得是可以的