【问题标题】:When do variable values die or deleted in JavaJava中的变量值何时死亡或删除
【发布时间】:2011-07-13 06:22:39
【问题描述】:

我以为我已经知道变量何时具有值。 但令我惊讶的是,当我在另一个浏览器中打开该变量时,它已经有了一个值。 我猜该值仍然驻留在网络服务器中。我在想,当我将它打开到另一个浏览器甚至另一台计算机时,它会在内存中拥有自己的变量。

我在我的 Servlet 的全局范围内首次出现时声明该变量设置为 null。

List<RecordsInfo> recordsInfo = null;

//with getter and setter;

那我有这样的功能

function exportToExcel(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
String filePath = "";

try {
    if(recordsInfo != null){
        /*I need to check first if recordsInfo has already value before creating an excel file. 
        This is to make sure that the records viewed are the same and will not make another query.*/
        filePath = excelExporter.generateExcel(recordsInfo); //do something...

        request.setAttribute("filePath ",filePath );                               
        getServletContext().getRequestDispatcher("/docs/download.jsp").forward(request, response);
    } else {
        //so something....
    }
} catch (Exception e)    
     e.printStackTrace();
}
}

下载.jsp (JSTL)

Click <a href="${filePath}">here</a> to download.

我知道我初始化后可以获取recordsInfo的值,所以我在exportToExcel中使用了它。但我的问题是使用相同功能的其他浏览器得到相同的结果,我认为它是空的,因为它有不同的会话。

虽然我已经计划解决这个问题,但我只是想从专家那里得到一些建议。

我的问题是什么时候变量死亡(当 Java 垃圾收集器处理它时) 以及为每个会话声明唯一的变量的最佳实践是什么。 我希望我把我的问题说清楚了。我会很感激任何帮助。谢谢!

【问题讨论】:

标签: java jsp servlets jakarta-ee scope


【解决方案1】:

我在 Servlet 的全局范围内首次出现时声明该变量设置为 null。

Servlet 在第一次被请求时被加载到内存中..

现在对于每个请求,它的服务方法都会被调用。但是您在全局范围内拥有 recordsInfo,因此它将为所有会话/请求共享,直到类加载器重新加载 servlet。

因此,对于您的场景,您可以将recordsInfo 设置为会话属性,因为您需要不同的session 并缓存requests

更新您的新 Q.:

Servlet 将加载到哪个内存中,是在 web-server 中吗?

内存将是您机器的内存,尤其是运行服务器的 jvm 的堆内存。

是的,如果它太大而无法缓存,不要

【讨论】:

  • Servlet 将加载到哪个内存中,是在 web-server 中吗?根据你的回答,我认为它是网络服务器,我只是想确保:)。关于类加载器,我对此并不十分熟悉,而且我对 java 还是很陌生,这可以替代会话。关于会话,我认为这是一个比我计划做的更好的选择。但我尽可能不想在我的会话中放置大对象。我有可能获得大约数十万或数百万的记录。那么再次感谢现在我会尝试使用会话。
  • 将答案添加到您的新 Q 中。
猜你喜欢
  • 2012-04-11
  • 2018-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-10
  • 1970-01-01
相关资源
最近更新 更多