我正在获得声纳vilation性能 - 巨大的字符串常量在多个类文件中重复。
我得到这个的原因是什么? 如何解决这个问题?
这是代码
public static final String GET_CO_ADMIN_GRID_DTLS ="A 30 line huge query";
答案 0 :(得分:2)
这是因为final关键字。最后的领域也进入了参考类。
大型String常量在多个类文件中重复。这可能是因为final字段被初始化为String常量,并且Java语言要求将对来自其他类的final字段的所有引用内联到该类文件中。有关JDK中此错误发生的描述,请参阅JDK错误6447475,以及解析它如何将JDK的大小减少1兆字节。
我们需要从该字符串中删除final关键字....
答案 1 :(得分:2)
Gowtham的答案是正确的。创建一个常量类并不能解决问题
// creating the constants class like this would lead into duplication of the huge string assigned to FOO
// class A and B would also contain the huge string, after compilation
class C {
public static final String FOO = "HUGE STRING";
}
class A {
public void f() {
String c = C.FOO;
}
}
class B {
public void f() {
String c = C.FOO;
}
}
创建像上面提到的错误报告中提出的常量类http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6447475,避免重复使用大字符串
class C {
public static final String FOO;
static {
FOO = "BAR";
}
}
答案 2 :(得分:2)
解决方案:性能 - 在多个类文件中重复使用大量字符串常量。
1.将该类声明为final,将该字段设为public static final并指定静态块内部 2.Dont忘记声明私有构造函数,否则声纳将显示"实用程序类不应该是公共或默认构造函数(MAJOR问题)"。
public final class QueryConstants {
/**
* Default Constructor.
*/
private QueryConstants(){
//
}
public static final String COMMON_SELECT;
static {
COMMON_SELECT = "Your Query Here";
}
答案 3 :(得分:1)
如果字符串常量相同,则创建一个常量文件并将该常量放在那里。在多个类文件中使用该常量。像:
Constants.CONSTANT_1