【问题标题】:How do instance variable works on Google App Engine? [Java]实例变量如何在 Google App Engine 上工作? [爪哇]
【发布时间】:2014-05-13 03:27:31
【问题描述】:

我对我在谷歌应用引擎上设置的这个示例应用感到非常困惑。这是我所拥有的:

package com.ha.ha.ha;
import java.io.IOException;
import javax.servlet.http.*;

@SuppressWarnings("serial")
public class SecondTrialServlet extends HttpServlet {

    private static int sCounter = 0;
    private int mCounter = 0;

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        resp.setContentType("text/plain");
        resp.getWriter().println("sCounter is : " + (sCounter++));
        resp.getWriter().println("mCounter is : " + (mCounter++));
    }
}

当我在浏览器页面上点击我的本地主机(或已部署的版本)并刷新页面 9 次时,我看到:

sCounter is : 9
mCounter is : 9

为什么会这样?我认为当我执行新请求(刷新浏览器页面)时,实例变量应该被“清除”或其他东西。

我可以期望柜台继续运行多长时间?就像如果我在那里设置一个不断刷新页面,它会一直持续到Integer.MAX_VALUE 吗?

这仅仅是因为我有 1 个“实例”吗?如果是这样,我可以期望这个实例继续运行多长时间?

我想构建一个简单的应用程序,可以无限期地保留一些哈希图。我不希望网络应用程序有必须的流量(可能每天少于 100 个请求)。我可以像使用 counter 变量一样存储所有内容吗?

【问题讨论】:

    标签: java google-app-engine memory-management google-cloud-datastore ram


    【解决方案1】:

    在 GooglaAppEngine 中,您不能依赖 servlet 的内部状态。

    如果你想拥有一个状态,你需要使用他们缓存中提供的API。

    在 mCounter = 9 上,同样适用:垃圾收集器在更适合 GAE 时调用,您不能依赖它。

    此外,如果您要扩展您的实例,则无法以这种方式管理任何状态,而只能通过 GAE 的内部缓存系统。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-21
      • 2011-05-20
      • 2016-05-25
      • 2017-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多