evi*_*iko 3 java memory-management
我写了一个抽象类来包含应用程序的所有规则,因为我几乎在我的应用程序的所有地方都需要它们.所以它包含的大部分内容都是static final变量,如下所示:
public abstract class appRules
{
public static final boolean IS_DEV = true;
public static final String CLOCK_SHORT_TIME_FORMAT = "something";
public static final String CLOCK_SHORT_DATE_FORMAT = "something else";
public static final String CLOCK_FULL_FORMAT = "other thing";
public static final int USERNAME_MIN = 5;
public static final int USERNAME_MAX = 16;
// etc.
}
Run Code Online (Sandbox Code Playgroud)
这个类很大,包含很多这样的变量.
我的问题:
public final),所以我实例化该类并仅在我需要它时才使用它们.鉴于现代机器,RAM容量等,您必须拥有数千条规则(如果不是数百万条)才能在性能和内存方面做出明显的差异.
所以问题不在于是否会占用你的系统:事实并非如此.
问题是这是否是一个好习惯.
我当然自己使用这种模式,所以我理解它的用处.但主要的缺点是:它使你的代码不可测试.由于没有简单的方法来为单元测试设置不同的值(与在类路径中放置不同文件的属性文件相反),如果不连接整个应用程序,将很难测试单个模块的功能,但这取决于你在这些常数中保留的内容.
我想也许我会尝试拆分,每个模块有一个常量类,包等,并从属性文件初始化这些常量:
private static final String CONSTANT_FOO;
private static final String CONSTANT_BAR;
static{
try{
Properties props = new Properties();
InputStream is =
MyConstantClass.class
.getResourceAsStream("my.module.properties");
props.load(is);
// you'll actually want to move this to finally, but I'm lazy
is.close();
CONSTANT_FOO = props.get("constants.foo");
CONSTANT_BAR = props.get("constants.bar");
}catch(Exception e){
throw new IllegalStateException(e);
}
}
Run Code Online (Sandbox Code Playgroud)
这样,您的代码可以更加可测试和配置,同时仍然享受全局配置常量的好处.
| 归档时间: |
|
| 查看次数: |
258 次 |
| 最近记录: |