我正在构建一个框架,我需要在运行时制作对象的副本,我不想强制这些对象类实现任何接口,如Cloneable,Prototype模式或其他任何东西。
因此,为此目的,我计划使用sun.misc.Unsafe
及其方法的功能有效克隆这些对象:allocateInstance(Class cls)
和copyMemory(Object srcBase, long srcOffset, Object destBase, long destOffset, long bytes)
。但我找不到任何方法来获取堆空间中的对象大小。
我知道我可以使用反射和从字段到字段的复制。但这并非没有效率。 你知道在堆中获取对象大小的任何方式吗?或者有效复制对象的任何其他方式?
答案 0 :(得分:3)
正确地说,正确的方法是使用对象自己的方法,构造函数和工厂来执行复制。 clone
严重受损,而不会像这样滥用它。
答案 1 :(得分:0)
一旦我使用ASM字节码检测工具,我就可以通过类getObjectSize(Object objectToSize)
中的方法java.lang.instrument.Instrumentation
获取对象的大小。问题解决了。