java - 如何在JVM中持久化变量

时间:2010-09-07 17:37:07

标签: java jvm

我有一个奇怪的情况,我希望能够在内存中保存变量..就像我可以在JVM中固定的全局变量。

这可能吗?我记得在大学里做过类似的事情,但谷歌搜索无法找到它。我有一个逻辑问题,有一些人为限制,使这成为最好的解决方案。

编辑1:

我需要更新变量的值。

编辑2:

我很欣赏回应的人。我是一名.net程序员,从大学开始就没用过java。再次感谢。

4 个答案:

答案 0 :(得分:5)

是的,使用static字段:

public class GlobalVariableHolder {
    public static int globalVariable;
}

但请注意,这被认为是一种不好的做法,可能会导致难以调试的意外结果。不使用全局变量的方法是将其作为参数或方法传递给您。

如果您仍然确定需要这个,为了尽可能地保护自己,请使用同步。更好的是,如果变量是原始的(intlong等),您可以使用AtomicIntegergetAndAdd()addAndGet()方法。

答案 1 :(得分:2)

通常,您最终会将这些内容存储在某种全局类中 - 这个类可以从任何地方访问,并且具有受控制的实例数。

单身人士常用于此。如果您查找单身人士的模式并将变量存储在该单身人士中(添加一个setter和一个getter),那么您就可以了。

执行此操作(与公共静态变量相反)将为您提供一定程度的访问控制和可跟踪性 - 例如,如果您发现无法获得不可预测的结果,则可以将调试语句放入getter中。

从长远来看,setter and getters和singletons都是糟糕的代码味道,但没有可设置的公共变量那么差。

稍后您可能希望将操纵该变量的代码移动到单个对象中,并可能将单例转换为您可以通过IOC获取的内容,但是使用单例是一个比使用公共静态更好的起点。 / p>

答案 2 :(得分:1)

你的意思是在java.exe的多次调用中会存在什么,或者你是指一个单独的变量,它将在内存中的相同位置,而不管java.exe中的哪个线程访问它?或者你的意思是只有在你使用JRockit时才能访问的变量?或者也许只是开发机器上的JVM,而不是另一个系统上的JVM?

在第一种情况下,您需要另一种方式来存储它,例如配置文件。

在第二种情况下,就像Bozho所说,使用static关键字。

在第三种情况下,您可能需要使用System类并确定JVM制造商(假设可以从System获得 - 我不确定是否在我的头顶,您将通过查看了解更多信息自己创建API。

在第四种情况下,你几乎回到配置文件。

答案 3 :(得分:0)

它不会赢得任何奖项,但这应该有效:

package mypackage;

public class MyGlobal { public static String MY_GLOBAL_VAR = "my variable"; }

该JVM实例中的任何类都可以访问MyGlobal.MY_GLOBAL_VAR。
已更新以允许更新。