Я использую пакет java.lang.instrument.Instrumentation
для вычисления размера строки Java.Я следую инструкциям здесь , чтобы создать jav-агент jar.Ниже приведен код приложения, который вызывает класс агента java
public static void main(String[] args) {
String string = "A very long string which I have trimmed for this example";
StringBuilder sb = new StringBuilder(string);
for (int i=0; i<16000; i++) {
sb.append(string);
}
printObjectSize(sb.toString());
}
private static long printObjectSize(Object object) {
final long objectSize = ObjectSizeFetcher.getObjectSize(object);
System.out.println("Object type: " + object.getClass() + ", size: " + objectSize + " bytes");
return objectSize;
}
Здесь ObjectSizeFetcher
- это класс агента java, который вызывает код инструментария внутри.Независимо от размера строки, я всегда получаю вывод как
Object type: class java.lang.String, size: 24 bytes
Что может пойти не так?