dsp*_*pyz 24 java memory stack memory-management
我有一个项目,我正在编写一个类,其中教授说我们不允许使用超过200米我用-Xmx50m限制堆栈内存到50米(只是为了绝对肯定)但是根据顶部,它仍然使用300米
我尝试运行Eclipse Memory Analyzer,它只报告26米
这可能都是堆栈上的内存吗?我很确定我从不会超过大约300个方法调用深度(是的,它是一个递归DFS搜索),所以这意味着每个堆栈帧几乎用完了看起来很难相信的兆字节.
该程序是单线程的.有谁知道我可能减少内存使用的任何其他地方?另外,如何检查/限制堆栈使用的内存量?
更新:我现在使用以下JVM选项没有效果(根据顶部仍然约300米): -Xss104k -Xms40m -Xmx40m -XX:MaxPermSize=1k
另一个更新:实际上,如果我让它运行一点点(带有所有这些选项)大约一半的时间它会在4或5秒后突然下降到150米(另一半它不会下降).这真的很奇怪的是我的程序没有随机(并且正如我所说的那样是单线程)所以没有理由它在不同的运行中表现不同
它可能与我正在使用的JVM有关吗?
java version "1.6.0_27"
OpenJDK Runtime Environment (IcedTea6 1.12.3) (6b27-1.12.3-0ubuntu1~10.04)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
Run Code Online (Sandbox Code Playgroud)
根据java -h,默认的JVM是-server.我尝试添加-cacao和现在(所有其他选项)它只有59米.所以我想这解决了我的问题.谁能解释为什么这是必要的?另外,我应该知道有什么缺点吗?
还有一个更新:与服务器相比,可可真的很慢.这是一个糟糕的选择
Eya*_*der 16
Top命令反映Java应用程序使用的内存总量.其中包括:
小智 6
Max memory = [-Xmx] + [-XX:MaxPermSize] + number_of_threads * [-Xss]
Run Code Online (Sandbox Code Playgroud)
这里max heap memory as -Xmx,min heap memory as -Xms,stack memory as -Xss和-XX maxPermSize
以下示例说明了这种情况.我用以下启动参数启动了我的tomcat:
-Xmx168m -Xms168m -XX:PermSize=32m -XX:MaxPermSize=32m -Xss1m
Run Code Online (Sandbox Code Playgroud)
随着-Xmx您配置堆大小.配置堆栈大小使用-Xss参数.这两个参数的总和应该大概是你想要的:
-Xmx150m -Xss50m
Run Code Online (Sandbox Code Playgroud)
例如.
此外,还有-XX:MaxPermSize控制参数.此参数的-client默认值为32mb,-server64mb.根据您的配置计算它.PermGen空间是:
永久生成用于保持VM本身的反射,例如类对象和方法对象.
所以基本上它存储了JVM的内部数据,比如类定义和内部字符串.
最后我必须说有一部分你无法控制,那就是本机java进程使用的内存.Java是程序,就像其他任何程序一样,所以它也使用内存.如果您正在查看任务管理器中的内存使用情况,您将看到此内存以及程序内存消耗.
需要注意的是,“使用的总内存”(Linux 中的 RSS)包括 JDK 堆(+其他 JDK 区域)以及分配的任何“本机内存”。
例如,这些人发现在 GC 之间分配过多的 jaxbcontext(具有关联的本机内存)可能会导致它使用大量额外的 RAM。另一个常见的显然是 ZipInflater,如果你不调用 close (或 GZipStream 等)
http://sleeplessinslc.blogspot.com/2014/08/jvm-native-memory-leak.html
他的最终解决方法/修复是“更频繁地”进行 GC(通过使用 GC1 垃圾收集器,或指定较小的[讽刺]-Xmx 设置)或通过缓存 JaxBContext 对象(因为它们没有 close 方法,因此您无法控制泄漏)。
另请注意,有时您只需检查 jstack 即可找到内存罪魁祸首:http://javaeesupportpatterns.blogspot.com/2011/09/jaxbcontext-performance-problem-case.html
有时也可能“错过”关闭,例如 GZipStreams 意外http://kohsuke.org/2011/11/03/quiz-time-memory-leak-in-java
| 归档时间: |
|
| 查看次数: |
22587 次 |
| 最近记录: |