我有一个java程序,它使用弱hashmap来缓存一些东西,如果java需要更多的内存,弱hashmap就会被清除。这对我来说很好。现在,我在同一台计算机上运行了一个c#程序,并认识到了以下内容。
当java程序运行时,我的c#程序在计算机压力很大的时候不能正常运行。另一方面,我的c#程序在java程序不运行时也能正常运行。
会不会是我的java程序阻塞了c#程序可以使用的内存?我怎么才能知道这件事呢?
发布于 2010-09-22 18:30:47
您的Java程序将把它的堆扩展到给定的大小。垃圾收集将释放返回到堆可用空间的对象,但不会减少Java程序使用的总内存。
使用您的操作系统功能来调查C++和Java应用程序所消耗的内存。
您可以在JVM上使用命令行选项来控制Java的最大堆大小,从而限制它的饥饿程度。当然,如果你需要一个巨大的堆,那么有可能所有的东西都不能放在一台机器上。
发布于 2010-09-22 19:58:01
您不能以与.net堆相同的方式为JVM的堆设置最大界限。有关详细信息,请参阅this question。CLR将简单地尝试扩展它的堆,直到它达到操作系统强加的进程内存限制,或者计算机的空闲内存用完。
所以,当你增加你的JVM堆大小时,你可以保留你的CLR会使用的内存。如果需要,JVM将从下限开始并扩展到上限。如上所述,该内存不是在JVM外部释放的-它不能用于.net CLR。
不过,您需要进行更多的监控,以确定内存是否真的是问题的原因。
https://stackoverflow.com/questions/3768276
复制相似问题