【发布时间】:2011-04-15 15:50:15
【问题描述】:
我有一个 java 程序,它使用弱 hashmap 来缓存一些东西,如果 java 需要更多内存,弱 hashmap 会被清除。这对我来说很好。现在我也在同一台计算机上运行了一个 c# 程序并识别了以下内容。
当 java 程序运行时,我的 c# 程序在计算机压力很大的时候运行不正确。另一方面,当 java 程序未运行时,我的 c# 程序也可以正常运行。
可能是我的 java 程序阻塞了我的 c# 程序可以使用的内存吗?我怎样才能找到这个?
【问题讨论】:
-
您是否通过为您的 java 程序分配任何特定的堆大小来运行您的代码?
-
我猜你应该详细描述不正确的行为。
-
听起来像是 C# 中的竞争条件。 (注意,弱引用会尽快清除。如果您正在实现缓存,请使用
SoftReference并忽略WeakHashMap。) -
你的 C# 程序是多线程的吗?那么原因可能是在高负载下发生的竞争条件。
-
使用了jvm最大堆大小的参数,程序不是多线程的,可以排除死锁。
标签: c# java memory garbage-collection