我在执行JUnit测试时收到此错误消息:
java.lang.OutOfMemoryError: GC overhead limit exceeded
Run Code Online (Sandbox Code Playgroud)
我知道它OutOfMemoryError是什么,但GC开销限制意味着什么?我怎么解决这个问题?
我对类似问题的答案很感兴趣.我认为这是不正确的.所以我创建了一些测试代码.我的问题是,这个代码是否证明/反驳/不确定在拆解方法中使成员变量无效的假设?我用JUnit4.8.1测试了它.
JUnit为4个测试中的每个测试创建一个新的测试类实例.每个实例都包含一个Object obj.此obj也作为静态WeakHashMap的键插入.如果JUnit释放对测试实例的引用,则关联的obj值将被弱引用,因此符合gc条件.测试试图强制gc.WeakHashMap的大小将告诉我objs是否是gc'ed.一些测试使obj变量无效,而其他测试则没有.
import org . junit . Before ;
import org . junit . After ;
import org . junit . Test ;
import java . util . ArrayList ;
import java . util . WeakHashMap ;
import java . util . concurrent . atomic . AtomicInteger ;
import static org . junit . Assert . * ;
public class Memory
{
static AtomicInteger idx = new AtomicInteger ( 0 ) ;
static WeakHashMap < Object , …Run Code Online (Sandbox Code Playgroud)