C# java块内存
我有一个java程序,它使用弱hashmap来缓存一些东西,如果java需要更多内存,弱hashmap就会被清除。这对我来说很好。现在,我在同一台计算机上运行了一个c#程序,并识别出以下内容 当java程序运行时,我的c#程序在计算机压力很大的时候不能正确运行。另一方面,当java程序不运行时,我的c#程序也可以正常运行C# java块内存,c#,java,memory,garbage-collection,C#,Java,Memory,Garbage Collection,我有一个java程序,它使用弱hashmap来缓存一些东西,如果java需要更多内存,弱hashmap就会被清除。这对我来说很好。现在,我在同一台计算机上运行了一个c#程序,并识别出以下内容 当java程序运行时,我的c#程序在计算机压力很大的时候不能正确运行。另一方面,当java程序不运行时,我的c#程序也可以正常运行 是不是我的java程序阻塞了我的c#程序可以使用的内存?我怎样才能找到答案呢?您的Java程序将把堆扩展到给定的大小。垃圾收集将释放返回堆的可用空间的对象,但不会减少Java程
是不是我的java程序阻塞了我的c#程序可以使用的内存?我怎样才能找到答案呢?您的Java程序将把堆扩展到给定的大小。垃圾收集将释放返回堆的可用空间的对象,但不会减少Java程序使用的总体内存
使用你的操作系统CAPABAISEVE来研究C++和java应用程序消耗的内存。
您可以在JVM上使用命令行选项来控制Java的最大堆大小,从而限制它的饥饿程度。当然,如果您需要一个巨大的堆,那么很可能无法在一台机器上容纳所有内容。您不能像为JVM堆设置最大限制那样为.net CLR堆设置最大限制。有关更多信息,请参阅。CLR只会尝试扩展其堆,直到达到操作系统强加的进程内存限制,或者机器的可用内存用完为止 是的,当您增加JVM堆大小时,您可以保留CLR将使用的内存。JVM将从下限开始,并在需要时扩展到上限。如上所述,该内存不会在JVM之外释放—它不会提供给.net CLR
不过,您需要进行更多的监控,看看内存是否真的是问题的原因。您是否通过为java程序分配特定的堆大小来运行代码?我想您应该详细描述不正确的行为。听起来像是C#中的竞争条件。(注意,弱引用会尽快被清除。如果您正在实现缓存,请使用
SoftReference
并忽略WeakHashMap
)您的C程序是否可能是多线程的?那么原因可能是在高负载下发生了竞争情况。使用了最大堆大小的jvm参数,程序不是多线程的,我可以排除死锁。这些参数都打开了,在.net/c#-环境中也可以使用这些参数吗?它不仅仅是打开的,但是他们设置了什么很重要——做数学,测量c#需要什么,再加上你的max for Java——它适合吗?当您的c#出现问题时,您是否看到内存耗尽?我是Java爱好者,恐怕我不知道如何控制c#。请阅读此链接和此链接