首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >本机进程的Java内存使用情况

本机进程的Java内存使用情况
EN

Stack Overflow用户
提问于 2009-06-19 02:08:38
回答 4查看 2.3K关注 0票数 4

调优使用原生C++库的Java语言编写的服务器应用程序的最佳方式是什么?

该环境是一台具有4 4GB的32位Windows计算机。JDK是Sun 1.5.0_12。

Java进程在启动时被分配了1024MB的内存(-Xmx),但是我经常看到OutOfMemoryErrors,因为缺少堆空间。如果内存增加到1200MB,则由于缺少交换空间而发生OutOfMemoryErrors。如何在JVM和本机进程之间共享内存?

Windows开关对本机进程和Sun /3GB有影响吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-06-19 20:43:47

我在这个设置上遇到了很多问题(32位系统上的Java- msw和其他系统),这些问题都是通过为JVM保留*不到1 1GB的RAM来解决的。

否则,如上所述,该进程在系统中实际占用的内存将超过2 2GB;在这一点上,我对该进程进行了“静默死亡”--没有错误,没有警告,只是进程非常安静地终止了。

在同一系统上运行几个JVM (每个JVM的RAM都不到1 1GB )时,我获得了更高的稳定性和性能。

票数 2
EN

Stack Overflow用户

发布于 2009-06-19 20:31:23

我在JNI memory management here上找到了一些信息,下面是JNI section on memory management

3 2GB的用户空间超过2 2GB的用户空间应该会有所帮助,但如果你在2 2GB时遇到交换空间不足的问题,我认为3 2GB只会让情况变得更糟。你的页面文件有多大?它是不是已经满了?

通过将jconsole连接到jvm,您可以更好地了解堆分配。

票数 1
EN

Stack Overflow用户

发布于 2009-06-19 03:59:16

如何在JVM和本机进程之间共享内存?

Sun的JVM的垃圾收集器是标记和清除的,具有支持并发和增量GC的选项。

好吧,更准确地说,它是阶段性的,上面的规定只适用于长期(长期)对象。对于年轻的对象,GC仍然是使用stop-and-copy收集器完成的,这对于处理短期对象要好得多(并且所有典型的Java程序都会创建许多短期对象)。

复制收集器遍历堆中的所有元素,如果它们被引用,则将它们复制到新堆中,然后丢弃前一个堆。因此,1M的活动对象需要高达2M的实际内存:如果每个对象都是活动的,则在垃圾收集期间将有两个所有内容的副本。

因此,JVM需要的系统内存远远超过在VM中运行的代码所能使用的内存,因为管理和垃圾收集需要大量的开销。

Windows /3GB开关对本机进程和Sun JVM有影响吗?

/3GB允许用户虚拟内存地址空间为3 3GB,但仅适用于标头标记为IMAGE_FILE_LARGE_ADDRESS_AWARE的可执行文件。据我所知,Sun的java.exe并非如此。我这里没有Windows系统,所以我无法验证。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1016053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档