有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java调用系统。gc()导致JSP中的数据丢失

我目前正在调试一个web应用程序,它会导致间歇性问题,尤其是在命中率很高的情况下。由于每个新用户都有一个包含个性化导航菜单的会话,我想我会尝试看看会话变量需要多少内存

在JSP中处理会话对象创建的代码部分,我添加了以下代码:

System.gc();
long orgHeap = Runtime.getRuntime().freeMemory();

... create session variables ...

System.gc();
log.info("Heap delta: " + (Runtime.getRuntime().freeMemory() - orgHeap));

令我惊讶的是,添加系统。gc()会破坏应用程序。它不再工作,因为一些对象正在丢失(或者看起来是这样)。已初始化的值为空。当gc()调用被删除时,应用程序工作正常。gc()应该只删除标记为删除的对象-对吗

还有其他人有类似的问题吗


共 (1) 个答案

  1. # 1 楼答案

    垃圾收集永远不会移除活动对象,所以我认为你的问题在其他地方

    当您声明这是在负载下时——“命中率很高”——这可能是一种错误使用EJB的情况,在这种情况下,您预计会发生一些事情,因为它是在低负载下进行的(比如在请求时重复获得同一个EJB),但在高负载下会发生变化(其他人得到了那个EJB,您得到了另一个)