From 58f794e28563fd47d9e52de0e2db2ee20250e6e9 Mon Sep 17 00:00:00 2001 From: Djordje Cvijetic Date: Fri, 29 Jun 2018 22:52:27 +0200 Subject: [PATCH 1/2] BAEL-1865 - Java Objects Sizes --- .../objectsize/InstrumentationAgent.java | 18 ++++++ .../objectsize/InstrumentationExample.java | 59 +++++++++++++++++++ .../java/com/baeldung/objectsize/MANIFEST.MF | 1 + 3 files changed, 78 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/objectsize/InstrumentationAgent.java create mode 100644 core-java/src/main/java/com/baeldung/objectsize/InstrumentationExample.java create mode 100644 core-java/src/main/java/com/baeldung/objectsize/MANIFEST.MF diff --git a/core-java/src/main/java/com/baeldung/objectsize/InstrumentationAgent.java b/core-java/src/main/java/com/baeldung/objectsize/InstrumentationAgent.java new file mode 100644 index 000000000000..66e9a44af841 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/objectsize/InstrumentationAgent.java @@ -0,0 +1,18 @@ +package com.baeldung.objectsize; + +import java.lang.instrument.Instrumentation; + +public class InstrumentationAgent { + private static volatile Instrumentation globalInstrumentation; + + public static void premain(final String agentArgs, final Instrumentation inst) { + globalInstrumentation = inst; + } + + public static long getObjectSize(final Object object) { + if (globalInstrumentation == null) { + throw new IllegalStateException("Agent not initialized."); + } + return globalInstrumentation.getObjectSize(object); + } +} diff --git a/core-java/src/main/java/com/baeldung/objectsize/InstrumentationExample.java b/core-java/src/main/java/com/baeldung/objectsize/InstrumentationExample.java new file mode 100644 index 000000000000..4734b610e354 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/objectsize/InstrumentationExample.java @@ -0,0 +1,59 @@ +package com.baeldung.objectsize; + +import java.util.ArrayList; +import java.util.List; + +public class InstrumentationExample { + + public static void printObjectSize(final Object object) { + System.out.println("Object type: " + object.getClass() + ", size: " + InstrumentationAgent.getObjectSize(object) + " bytes"); + } + + public static void main(final String[] arguments) { + final String emptyString = ""; + final String string = "Estimating Object Size Using Instrumentation"; + final String[] stringArray = { emptyString, string, "com.baeldung" }; + final String[] anotherStringArray = new String[100]; + final List stringList = new ArrayList<>(); + final StringBuilder stringBuilder = new StringBuilder(100); + final int maxIntPrimitive = Integer.MAX_VALUE; + final int minIntPrimitive = Integer.MIN_VALUE; + final Integer maxInteger = Integer.MAX_VALUE; + final Integer minInteger = Integer.MIN_VALUE; + final long zeroLong = 0L; + final double zeroDouble = 0.0; + final boolean falseBoolean = false; + final Object object = new Object(); + + class EmptyClass { + } + final EmptyClass emptyClass = new EmptyClass(); + + class StringClass { + public String s; + } + final StringClass stringClass = new StringClass(); + + printObjectSize(emptyString); + printObjectSize(string); + printObjectSize(stringArray); + printObjectSize(anotherStringArray); + printObjectSize(stringList); + printObjectSize(stringBuilder); + printObjectSize(maxIntPrimitive); + printObjectSize(minIntPrimitive); + printObjectSize(maxInteger); + printObjectSize(minInteger); + printObjectSize(zeroLong); + printObjectSize(zeroDouble); + printObjectSize(falseBoolean); + printObjectSize(Day.TUESDAY); + printObjectSize(object); + printObjectSize(emptyClass); + printObjectSize(stringClass); + } + + public enum Day { + MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY + } +} diff --git a/core-java/src/main/java/com/baeldung/objectsize/MANIFEST.MF b/core-java/src/main/java/com/baeldung/objectsize/MANIFEST.MF new file mode 100644 index 000000000000..b814f624d0a2 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/objectsize/MANIFEST.MF @@ -0,0 +1 @@ +Premain-class: com.baeldung.objectsize.InstrumentationAgent From 0aea729ee5375ebe220e38164df461fa0bc57cf2 Mon Sep 17 00:00:00 2001 From: Djordje Cvijetic Date: Mon, 2 Jul 2018 23:46:52 +0200 Subject: [PATCH 2/2] BAEL-1865 - PR fix --- .../objectsize/InstrumentationExample.java | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/core-java/src/main/java/com/baeldung/objectsize/InstrumentationExample.java b/core-java/src/main/java/com/baeldung/objectsize/InstrumentationExample.java index 4734b610e354..f751d954c847 100644 --- a/core-java/src/main/java/com/baeldung/objectsize/InstrumentationExample.java +++ b/core-java/src/main/java/com/baeldung/objectsize/InstrumentationExample.java @@ -5,34 +5,34 @@ public class InstrumentationExample { - public static void printObjectSize(final Object object) { + public static void printObjectSize(Object object) { System.out.println("Object type: " + object.getClass() + ", size: " + InstrumentationAgent.getObjectSize(object) + " bytes"); } - public static void main(final String[] arguments) { - final String emptyString = ""; - final String string = "Estimating Object Size Using Instrumentation"; - final String[] stringArray = { emptyString, string, "com.baeldung" }; - final String[] anotherStringArray = new String[100]; - final List stringList = new ArrayList<>(); - final StringBuilder stringBuilder = new StringBuilder(100); - final int maxIntPrimitive = Integer.MAX_VALUE; - final int minIntPrimitive = Integer.MIN_VALUE; - final Integer maxInteger = Integer.MAX_VALUE; - final Integer minInteger = Integer.MIN_VALUE; - final long zeroLong = 0L; - final double zeroDouble = 0.0; - final boolean falseBoolean = false; - final Object object = new Object(); + public static void main(String[] arguments) { + String emptyString = ""; + String string = "Estimating Object Size Using Instrumentation"; + String[] stringArray = { emptyString, string, "com.baeldung" }; + String[] anotherStringArray = new String[100]; + List stringList = new ArrayList<>(); + StringBuilder stringBuilder = new StringBuilder(100); + int maxIntPrimitive = Integer.MAX_VALUE; + int minIntPrimitive = Integer.MIN_VALUE; + Integer maxInteger = Integer.MAX_VALUE; + Integer minInteger = Integer.MIN_VALUE; + long zeroLong = 0L; + double zeroDouble = 0.0; + boolean falseBoolean = false; + Object object = new Object(); class EmptyClass { } - final EmptyClass emptyClass = new EmptyClass(); + EmptyClass emptyClass = new EmptyClass(); class StringClass { public String s; } - final StringClass stringClass = new StringClass(); + StringClass stringClass = new StringClass(); printObjectSize(emptyString); printObjectSize(string);