java 进程消耗内存只增不减
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 进程消耗内存只增不减相关的知识,希望对你有一定的参考价值。
我现在用一个死循环来做一个操作, 每循环一次等待3分钟, 当运行这个代码的时候, java进程消耗的内存不断的增加,且不下降, 为什么会出现这样一种情况呢?
简单的代码逻辑描述:
while(true)
do(需要重复进行的操作)
wait(3mins)
我将最大和最小内存都设置成一样,会让java进程消耗内存只增不减么? 我发现我的初始化内存是这样设置的: -Xms 1024m -Xmx1024m
是死循环造成java进程消耗内存不断增加, 还是jvm的初始化造成这样的结果?(假设while循环体内不存在内存泄露)
首先要清楚,java中的内存分两种,一个是堆内存,一个是栈内存!内存泄露到底在哪个区间中泄露了呢,看你“需要重复进行的操作”这里面的代码怎么写了!如果这里面在不断的对变量进行操作的话,内存泄露是肯定的,因为要释放栈内存必须等该方法结束才会释放其变量!很明显,你这个方法永远不会结束!至于“jvm的初始化造成这样的结果”不会的!jvm的初始化只是把字节码加载进内存里而已!不会造成这样的结果!
呵呵,希望对你有帮助! 参考技术A 虚拟机内存不断增加没有问题,问题的关键是,当增加到你设置的:-Xmx1024m
,1024M左右时能下降就行。你的设置没有问题。追问
java.exe这个进程消耗的内存没有下降, 是不是我的while循环体内就一定有内存泄露呢?
你的意思是在java.exe内存消耗未达到1024M的时候, 他的内存消耗会一直增加,到了1024M后, 它会下降, 是么?
是的,你设置了最大内存是1024M,JAVA虚拟机就会一直增加内存占用,一直到1024M附近,才会触发垃圾回收机制,内存回收。你如果不放心,可以把你的代码贴出来给我看看,应该不会有内存泄漏的。没有必要自己调用楼下说的“gc()”方法。
本回答被提问者和网友采纳 参考技术B 这个是jvm的后果,你这么设置的话堆区不会自动扩展 参考技术C 你可以定义一个runtime类的实例来释放内存;如Runtime run=Runtime.getRuntime(); //取得当前jvm的运行时实例
run.gc(); //运行Runtime的垃圾回收方法
参考资料:、、
以上是关于java 进程消耗内存只增不减的主要内容,如果未能解决你的问题,请参考以下文章
Cesium的3D在多个单页面应用中,内存只增不减致内存溢出问题的解决
为啥我的 Java 进程在 docker 容器与主机之间消耗两倍的内存