gpt4 book ai didi

java - 关于在 Java 中加载 Class 实例

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:10:58 26 4
gpt4 key购买 nike

下面的代码有可能打印出“false”吗?

如果类类型的对象可能在程序执行期间加载然后卸载然后重新加载这可能会打印错误?

android 和“普通 java”中的情况相同吗?

    class Person
{
Integer age;
Person(Integer age) {this.age=age;}
}

int v1;
{
Person p1 = new Person(5);
v1 = System.identityHashCode(p1.getClass());
}
.
.

int v2;
{
Person p2 = new Person(10);
v2 = System.identityHashCode(p2.getClass());
}


if (v1 == v2)
System.out.println("true");
else
System.out.println("false");

最佳答案

如果所有代码(Person 的类定义除外)都在一个类中,我不认为它可以获得 Person 类的两个不同实例。

如果你使用像 OSGI 这样的东西,你实际上可以让不同的类加载器多次加载 Person 类,并且它们的 hashCode 会不同,所以我猜:

是的,您可以构造返回“false”的情况

由于您不保留对 Person 实例的引用,因此当两个实例化部分本身通过反射加载并随后收集垃圾时,理论上该类实际上可以被卸载。 AFAIK 语言规范中没有任何内容可以防止类定义的垃圾回收。当您有例如一个 Web 容器,您可以在开发过程中始终在其中部署新版本的类。如果旧版本没有得到垃圾收集,这将导致内存问题。

另见:

Unloading classes in java?

How to unload an already loaded class in Java?

关于java - 关于在 Java 中加载 Class 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13707804/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com