每次创建不同 Class 的新对象
Create Object of new different Class every time
我想连续创建新的class(具体名称不同)的对象。
public static void main(String args[]) {
while (true) {
Object obj = getNewClassObject();
System.out.println(obj.getClass.getName());
}
}
public static Object getNewClassObject() {
// some code
}
任务是我们应该在方法中写什么,所以它 return 每次都是不同 class 的对象,并且程序在每一行打印不同的 class 名称。
我试过使用匿名 class、内部 class、lambda 等。但它们都 return 相同的 class 名称。
我当前的“蹩脚”解决方案是在播放应用程序中创建新的 class 文件(具有重新加载能力),然后使用反射库(或仅 java 代码)加载 class 并获取对象新 class.
但它需要大量内存,反射方法 getSubTypeOf() 也需要很多时间 ~100 秒,一段时间后我得到 OutOfMemoryError。
我希望有更好的方法来做到这一点。我正在考虑卸载或释放 class 元数据以释放内存。
用Javassist试试
private static ClassPool pool = ClassPool.getDefault();
private static RandomString rs = new RandomString();
public static Object getNewClassObject() {
String name = rs.nextString();
Object obj = null;
try {
obj = pool.makeClass(name).toClass().newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
return obj;
}
RandomString
来自这里:How to generate a random alpha-numeric string?
pom.xml
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.27.0-GA</version>
</dependency>
我想连续创建新的class(具体名称不同)的对象。
public static void main(String args[]) {
while (true) {
Object obj = getNewClassObject();
System.out.println(obj.getClass.getName());
}
}
public static Object getNewClassObject() {
// some code
}
任务是我们应该在方法中写什么,所以它 return 每次都是不同 class 的对象,并且程序在每一行打印不同的 class 名称。
我试过使用匿名 class、内部 class、lambda 等。但它们都 return 相同的 class 名称。 我当前的“蹩脚”解决方案是在播放应用程序中创建新的 class 文件(具有重新加载能力),然后使用反射库(或仅 java 代码)加载 class 并获取对象新 class.
但它需要大量内存,反射方法 getSubTypeOf() 也需要很多时间 ~100 秒,一段时间后我得到 OutOfMemoryError。 我希望有更好的方法来做到这一点。我正在考虑卸载或释放 class 元数据以释放内存。
用Javassist试试
private static ClassPool pool = ClassPool.getDefault();
private static RandomString rs = new RandomString();
public static Object getNewClassObject() {
String name = rs.nextString();
Object obj = null;
try {
obj = pool.makeClass(name).toClass().newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
return obj;
}
RandomString
来自这里:How to generate a random alpha-numeric string?
pom.xml
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.27.0-GA</version>
</dependency>