有效克隆不支持克隆的未知对象

时间:2012-03-07 17:09:41

标签: java

我正在构建一个框架,我需要在运行时制作对象的副本,我不想强​​制这些对象类实现任何接口,如Cloneable,Prototype模式或其他任何东西。

因此,为此目的,我计划使用sun.misc.Unsafe及其方法的功能有效克隆这些对象:allocateInstance(Class cls)copyMemory(Object srcBase, long srcOffset, Object destBase, long destOffset, long bytes)。但我找不到任何方法来获取堆空间中的对象大小。

我知道我可以使用反射和从字段到字段的复制。但这并非没有效率。 你知道在堆中获取对象大小的任何方式吗?或者有效复制对象的任何其他方式?

2 个答案:

答案 0 :(得分:3)

正确地说,正确的方法是使用对象自己的方法,构造函数和工厂来执行复制。 clone严重受损,而不会像这样滥用它。

答案 1 :(得分:0)

一旦我使用ASM字节码检测工具,我就可以通过类getObjectSize(Object objectToSize)中的方法java.lang.instrument.Instrumentation获取对象的大小。问题解决了。