检测网站是否被挂黑链,网站建设公司需要哪些,app官方免费下载,网页生成appkey 和secret总览 首先#xff0c;很自然地假设静态字段具有特殊的生命周期#xff0c;并且在应用程序的生命周期中一直存在。 您可以假设它们存在于内存中的特殊位置#xff0c;例如C或类元信息的perm gen中的内存开始。 但是#xff0c;得知静态字段驻留在堆上#xff… key 和secret 总览 首先很自然地假设静态字段具有特殊的生命周期并且在应用程序的生命周期中一直存在。 您可以假设它们存在于内存中的特殊位置例如C或类元信息的perm gen中的内存开始。 但是得知静态字段驻留在堆上可以具有任意数量的副本并像其他任何对象一样被GC清除可能会令人惊讶。 这是在先前的讨论之后得出的 静态块会被解释吗 加载静电场 当获得用于链接的类时它可能不会导致静态块被初始化。 一个简单的例子 public class ShortClassLoadingMain {public static void main(String... args) {System.out.println(Start);Class aClass AClass.class;System.out.println(Loaded);String s AClass.ID;System.out.println(Initialised);}
}class AClass {static final String ID;static {System.out.println(AClass: Initialising);ID ID;}
} 版画 Start
Loaded
AClass: Initialising
Initialised 您可以看到您可以在初始化类之前获得对类的引用只有在使用该类时该类的引用才会被初始化。 加载多个静态场 每个加载类的类加载器都有其自己的静态字段副本。 如果在两个不同的类加载器中加载一个类则这些类可以具有具有不同值的静态字段。 卸载静电场 当类的ClassLoader被卸载时静态字段将被卸载。 执行GC时将卸载该线程并且线程堆栈中没有强引用。 将这两个概念放在一起 这是一个示例其中类在初始化消息时以及在其字段完成时打印消息。 class UtilityClass {static final String ID Integer.toHexString(System.identityHashCode(UtilityClass.class));private static final Object FINAL new Object() {Overrideprotected void finalize() throws Throwable {super.finalize();System.out.println(ID Finalized.);}};static {System.out.println(ID Initialising);}
} 通过重复加载此类一次两次 for (int i 0; i 2; i) {cl new CustomClassLoader(url);clazz cl.loadClass(className);loadClass(clazz);cl new CustomClassLoader(url);clazz cl.loadClass(className);loadClass(clazz);triggerGC();
}
triggerGC(); 你可以看到这样的输出 1b17a8bd Initialising
2f754ad2 Initialising-- Starting GC
1b17a8bd Finalized.
-- End of GC6ac2a132 Initialising
eb166b5 Initialising-- Starting GC
6ac2a132 Finalized.
2f754ad2 Finalized.
-- End of GC-- Starting GC
eb166b5 Finalized.
-- End of GC 在此日志中将首先加载该类的两个副本。 对第一类/类加载器的引用被对第二类/类加载器的引用覆盖。 第一个在GC上清理第二个保留。 在第二个循环中又初始化了两个副本。 保留第四个在GC上清理第二个和第三个。 最后当不再使用静态字段的第四份副本时将在GC上清除它们。 代码 第一个示例– ShortClassLoadingMain 第二个示例– LoadAndUnloadMain 参考 Java Secret从Vanilla Java的 JCG合作伙伴 Peter Lawrey 加载和卸载静态字段 。 相关文章 每个程序员都应该知道的事情 正确记录应用程序的10个技巧 软件设计法则 Java最佳实践系列 生存在荒野西部开发过程中的9条提示 翻译自: https://www.javacodegeeks.com/2011/10/java-secret-loading-and-unloading.htmlkey 和secret