[PATCH] Use #valueOf()-methods in Unsafe-based FieldAccessors
Andrej Golovnin
golovnin at gmx.net
Wed May 2 21:04:51 UTC 2012
Hi Rémi,
> your far from Swing :)
> (I remember you from the glorious appframework time)
I still do some Swing stuff. :)
> And the mailer deamon (or mailer imp ?) remove attachment, so you have to repost it inlined.
Some one should mention this fact on this site:
http://openjdk.java.net/contribute/
> and your ORM doesn't use neither field.getInt() (and variants) instead of field.get()
> nor do bytecode enhancement ?
Hibernate uses for example field.get() if you use @AccessType(FIELD)
for JPA entities:
https://github.com/hibernate/hibernate-orm/blob/master/hibernate-core/src/main/java/org/hibernate/property/DirectPropertyAccessor.java
> Also, because currently the escape analysis done by Hotspot is a little bit broken
> you may introduce a slowdown/more memory consumption because the JIT
> may be able to remove new Integer()/Integer.intValue() pair but not
> Integer.valueOf()/Integer.intValue() pair.
>
> But I know that someone is working on this :)
I know it too. :)
When I analyze memory dumps from production systems,
I see often a lot of Boolean and Integer objects which were created
from classes in sun.reflect package. One part of objects is created
by Unsafe-based FieldAccessors and the other part is created by
classes generated by sub-classes of AccessorGenerator.
So my idea was/is:
- first to change the Unsafe-based FieldAccessors to use #valueOf()-methods (very simple patch)
- and then to change AccessorGenerator and its sub-classes to use #valueOf()-methods.
What do you think about it?
Best regards
Andrej Golovnin
PS: here is the inlined patch
# HG changeset patch
# User golovnin
# Date 1335989617 -7200
# Node ID 13e3638f723582d1df0b7c45c6aa983d4c2eed17
# Parent cfd7602f5c5247d551290ccf2cb2f5cd13fd8ce2
- use #valueOf()-methods in Unsafe-based FieldAccessors
diff --git a/src/share/classes/sun/reflect/UnsafeBooleanFieldAccessorImpl.java b/src/share/classes/sun/reflect/UnsafeBooleanFieldAccessorImpl.java
--- a/src/share/classes/sun/reflect/UnsafeBooleanFieldAccessorImpl.java
+++ b/src/share/classes/sun/reflect/UnsafeBooleanFieldAccessorImpl.java
@@ -33,7 +33,7 @@
}
public Object get(Object obj) throws IllegalArgumentException {
- return new Boolean(getBoolean(obj));
+ return Boolean.valueOf(getBoolean(obj));
}
public boolean getBoolean(Object obj) throws IllegalArgumentException {
diff --git a/src/share/classes/sun/reflect/UnsafeByteFieldAccessorImpl.java b/src/share/classes/sun/reflect/UnsafeByteFieldAccessorImpl.java
--- a/src/share/classes/sun/reflect/UnsafeByteFieldAccessorImpl.java
+++ b/src/share/classes/sun/reflect/UnsafeByteFieldAccessorImpl.java
@@ -33,7 +33,7 @@
}
public Object get(Object obj) throws IllegalArgumentException {
- return new Byte(getByte(obj));
+ return Byte.valueOf(getByte(obj));
}
public boolean getBoolean(Object obj) throws IllegalArgumentException {
diff --git a/src/share/classes/sun/reflect/UnsafeCharacterFieldAccessorImpl.java b/src/share/classes/sun/reflect/UnsafeCharacterFieldAccessorImpl.java
--- a/src/share/classes/sun/reflect/UnsafeCharacterFieldAccessorImpl.java
+++ b/src/share/classes/sun/reflect/UnsafeCharacterFieldAccessorImpl.java
@@ -33,7 +33,7 @@
}
public Object get(Object obj) throws IllegalArgumentException {
- return new Character(getChar(obj));
+ return Character.valueOf(getChar(obj));
}
public boolean getBoolean(Object obj) throws IllegalArgumentException {
diff --git a/src/share/classes/sun/reflect/UnsafeIntegerFieldAccessorImpl.java b/src/share/classes/sun/reflect/UnsafeIntegerFieldAccessorImpl.java
--- a/src/share/classes/sun/reflect/UnsafeIntegerFieldAccessorImpl.java
+++ b/src/share/classes/sun/reflect/UnsafeIntegerFieldAccessorImpl.java
@@ -33,7 +33,7 @@
}
public Object get(Object obj) throws IllegalArgumentException {
- return new Integer(getInt(obj));
+ return Integer.valueOf(getInt(obj));
}
public boolean getBoolean(Object obj) throws IllegalArgumentException {
diff --git a/src/share/classes/sun/reflect/UnsafeLongFieldAccessorImpl.java b/src/share/classes/sun/reflect/UnsafeLongFieldAccessorImpl.java
--- a/src/share/classes/sun/reflect/UnsafeLongFieldAccessorImpl.java
+++ b/src/share/classes/sun/reflect/UnsafeLongFieldAccessorImpl.java
@@ -33,7 +33,7 @@
}
public Object get(Object obj) throws IllegalArgumentException {
- return new Long(getLong(obj));
+ return Long.valueOf(getLong(obj));
}
public boolean getBoolean(Object obj) throws IllegalArgumentException {
diff --git a/src/share/classes/sun/reflect/UnsafeQualifiedBooleanFieldAccessorImpl.java b/src/share/classes/sun/reflect/UnsafeQualifiedBooleanFieldAccessorImpl.java
--- a/src/share/classes/sun/reflect/UnsafeQualifiedBooleanFieldAccessorImpl.java
+++ b/src/share/classes/sun/reflect/UnsafeQualifiedBooleanFieldAccessorImpl.java
@@ -35,7 +35,7 @@
}
public Object get(Object obj) throws IllegalArgumentException {
- return new Boolean(getBoolean(obj));
+ return Boolean.valueOf(getBoolean(obj));
}
public boolean getBoolean(Object obj) throws IllegalArgumentException {
diff --git a/src/share/classes/sun/reflect/UnsafeQualifiedByteFieldAccessorImpl.java b/src/share/classes/sun/reflect/UnsafeQualifiedByteFieldAccessorImpl.java
--- a/src/share/classes/sun/reflect/UnsafeQualifiedByteFieldAccessorImpl.java
+++ b/src/share/classes/sun/reflect/UnsafeQualifiedByteFieldAccessorImpl.java
@@ -35,7 +35,7 @@
}
public Object get(Object obj) throws IllegalArgumentException {
- return new Byte(getByte(obj));
+ return Byte.valueOf(getByte(obj));
}
public boolean getBoolean(Object obj) throws IllegalArgumentException {
diff --git a/src/share/classes/sun/reflect/UnsafeQualifiedCharacterFieldAccessorImpl.java b/src/share/classes/sun/reflect/UnsafeQualifiedCharacterFieldAccessorImpl.java
--- a/src/share/classes/sun/reflect/UnsafeQualifiedCharacterFieldAccessorImpl.java
+++ b/src/share/classes/sun/reflect/UnsafeQualifiedCharacterFieldAccessorImpl.java
@@ -35,7 +35,7 @@
}
public Object get(Object obj) throws IllegalArgumentException {
- return new Character(getChar(obj));
+ return Character.valueOf(getChar(obj));
}
public boolean getBoolean(Object obj) throws IllegalArgumentException {
diff --git a/src/share/classes/sun/reflect/UnsafeQualifiedIntegerFieldAccessorImpl.java b/src/share/classes/sun/reflect/UnsafeQualifiedIntegerFieldAccessorImpl.java
--- a/src/share/classes/sun/reflect/UnsafeQualifiedIntegerFieldAccessorImpl.java
+++ b/src/share/classes/sun/reflect/UnsafeQualifiedIntegerFieldAccessorImpl.java
@@ -35,7 +35,7 @@
}
public Object get(Object obj) throws IllegalArgumentException {
- return new Integer(getInt(obj));
+ return Integer.valueOf(getInt(obj));
}
public boolean getBoolean(Object obj) throws IllegalArgumentException {
diff --git a/src/share/classes/sun/reflect/UnsafeQualifiedLongFieldAccessorImpl.java b/src/share/classes/sun/reflect/UnsafeQualifiedLongFieldAccessorImpl.java
--- a/src/share/classes/sun/reflect/UnsafeQualifiedLongFieldAccessorImpl.java
+++ b/src/share/classes/sun/reflect/UnsafeQualifiedLongFieldAccessorImpl.java
@@ -35,7 +35,7 @@
}
public Object get(Object obj) throws IllegalArgumentException {
- return new Long(getLong(obj));
+ return Long.valueOf(getLong(obj));
}
public boolean getBoolean(Object obj) throws IllegalArgumentException {
diff --git a/src/share/classes/sun/reflect/UnsafeQualifiedShortFieldAccessorImpl.java b/src/share/classes/sun/reflect/UnsafeQualifiedShortFieldAccessorImpl.java
--- a/src/share/classes/sun/reflect/UnsafeQualifiedShortFieldAccessorImpl.java
+++ b/src/share/classes/sun/reflect/UnsafeQualifiedShortFieldAccessorImpl.java
@@ -35,7 +35,7 @@
}
public Object get(Object obj) throws IllegalArgumentException {
- return new Short(getShort(obj));
+ return Short.valueOf(getShort(obj));
}
public boolean getBoolean(Object obj) throws IllegalArgumentException {
diff --git a/src/share/classes/sun/reflect/UnsafeQualifiedStaticBooleanFieldAccessorImpl.java b/src/share/classes/sun/reflect/UnsafeQualifiedStaticBooleanFieldAccessorImpl.java
--- a/src/share/classes/sun/reflect/UnsafeQualifiedStaticBooleanFieldAccessorImpl.java
+++ b/src/share/classes/sun/reflect/UnsafeQualifiedStaticBooleanFieldAccessorImpl.java
@@ -35,7 +35,7 @@
}
public Object get(Object obj) throws IllegalArgumentException {
- return new Boolean(getBoolean(obj));
+ return Boolean.valueOf(getBoolean(obj));
}
public boolean getBoolean(Object obj) throws IllegalArgumentException {
diff --git a/src/share/classes/sun/reflect/UnsafeQualifiedStaticByteFieldAccessorImpl.java b/src/share/classes/sun/reflect/UnsafeQualifiedStaticByteFieldAccessorImpl.java
--- a/src/share/classes/sun/reflect/UnsafeQualifiedStaticByteFieldAccessorImpl.java
+++ b/src/share/classes/sun/reflect/UnsafeQualifiedStaticByteFieldAccessorImpl.java
@@ -35,7 +35,7 @@
}
public Object get(Object obj) throws IllegalArgumentException {
- return new Byte(getByte(obj));
+ return Byte.valueOf(getByte(obj));
}
public boolean getBoolean(Object obj) throws IllegalArgumentException {
diff --git a/src/share/classes/sun/reflect/UnsafeQualifiedStaticCharacterFieldAccessorImpl.java b/src/share/classes/sun/reflect/UnsafeQualifiedStaticCharacterFieldAccessorImpl.java
--- a/src/share/classes/sun/reflect/UnsafeQualifiedStaticCharacterFieldAccessorImpl.java
+++ b/src/share/classes/sun/reflect/UnsafeQualifiedStaticCharacterFieldAccessorImpl.java
@@ -35,7 +35,7 @@
}
public Object get(Object obj) throws IllegalArgumentException {
- return new Character(getChar(obj));
+ return Character.valueOf(getChar(obj));
}
public boolean getBoolean(Object obj) throws IllegalArgumentException {
diff --git a/src/share/classes/sun/reflect/UnsafeQualifiedStaticIntegerFieldAccessorImpl.java b/src/share/classes/sun/reflect/UnsafeQualifiedStaticIntegerFieldAccessorImpl.java
--- a/src/share/classes/sun/reflect/UnsafeQualifiedStaticIntegerFieldAccessorImpl.java
+++ b/src/share/classes/sun/reflect/UnsafeQualifiedStaticIntegerFieldAccessorImpl.java
@@ -35,7 +35,7 @@
}
public Object get(Object obj) throws IllegalArgumentException {
- return new Integer(getInt(obj));
+ return Integer.valueOf(getInt(obj));
}
public boolean getBoolean(Object obj) throws IllegalArgumentException {
diff --git a/src/share/classes/sun/reflect/UnsafeQualifiedStaticLongFieldAccessorImpl.java b/src/share/classes/sun/reflect/UnsafeQualifiedStaticLongFieldAccessorImpl.java
--- a/src/share/classes/sun/reflect/UnsafeQualifiedStaticLongFieldAccessorImpl.java
+++ b/src/share/classes/sun/reflect/UnsafeQualifiedStaticLongFieldAccessorImpl.java
@@ -35,7 +35,7 @@
}
public Object get(Object obj) throws IllegalArgumentException {
- return new Long(getLong(obj));
+ return Long.valueOf(getLong(obj));
}
public boolean getBoolean(Object obj) throws IllegalArgumentException {
diff --git a/src/share/classes/sun/reflect/UnsafeQualifiedStaticShortFieldAccessorImpl.java b/src/share/classes/sun/reflect/UnsafeQualifiedStaticShortFieldAccessorImpl.java
--- a/src/share/classes/sun/reflect/UnsafeQualifiedStaticShortFieldAccessorImpl.java
+++ b/src/share/classes/sun/reflect/UnsafeQualifiedStaticShortFieldAccessorImpl.java
@@ -35,7 +35,7 @@
}
public Object get(Object obj) throws IllegalArgumentException {
- return new Short(getShort(obj));
+ return Short.valueOf(getShort(obj));
}
public boolean getBoolean(Object obj) throws IllegalArgumentException {
diff --git a/src/share/classes/sun/reflect/UnsafeShortFieldAccessorImpl.java b/src/share/classes/sun/reflect/UnsafeShortFieldAccessorImpl.java
--- a/src/share/classes/sun/reflect/UnsafeShortFieldAccessorImpl.java
+++ b/src/share/classes/sun/reflect/UnsafeShortFieldAccessorImpl.java
@@ -33,7 +33,7 @@
}
public Object get(Object obj) throws IllegalArgumentException {
- return new Short(getShort(obj));
+ return Short.valueOf(getShort(obj));
}
public boolean getBoolean(Object obj) throws IllegalArgumentException {
diff --git a/src/share/classes/sun/reflect/UnsafeStaticBooleanFieldAccessorImpl.java b/src/share/classes/sun/reflect/UnsafeStaticBooleanFieldAccessorImpl.java
--- a/src/share/classes/sun/reflect/UnsafeStaticBooleanFieldAccessorImpl.java
+++ b/src/share/classes/sun/reflect/UnsafeStaticBooleanFieldAccessorImpl.java
@@ -33,7 +33,7 @@
}
public Object get(Object obj) throws IllegalArgumentException {
- return new Boolean(getBoolean(obj));
+ return Boolean.valueOf(getBoolean(obj));
}
public boolean getBoolean(Object obj) throws IllegalArgumentException {
diff --git a/src/share/classes/sun/reflect/UnsafeStaticByteFieldAccessorImpl.java b/src/share/classes/sun/reflect/UnsafeStaticByteFieldAccessorImpl.java
--- a/src/share/classes/sun/reflect/UnsafeStaticByteFieldAccessorImpl.java
+++ b/src/share/classes/sun/reflect/UnsafeStaticByteFieldAccessorImpl.java
@@ -33,7 +33,7 @@
}
public Object get(Object obj) throws IllegalArgumentException {
- return new Byte(getByte(obj));
+ return Byte.valueOf(getByte(obj));
}
public boolean getBoolean(Object obj) throws IllegalArgumentException {
diff --git a/src/share/classes/sun/reflect/UnsafeStaticCharacterFieldAccessorImpl.java b/src/share/classes/sun/reflect/UnsafeStaticCharacterFieldAccessorImpl.java
--- a/src/share/classes/sun/reflect/UnsafeStaticCharacterFieldAccessorImpl.java
+++ b/src/share/classes/sun/reflect/UnsafeStaticCharacterFieldAccessorImpl.java
@@ -33,7 +33,7 @@
}
public Object get(Object obj) throws IllegalArgumentException {
- return new Character(getChar(obj));
+ return Character.valueOf(getChar(obj));
}
public boolean getBoolean(Object obj) throws IllegalArgumentException {
diff --git a/src/share/classes/sun/reflect/UnsafeStaticIntegerFieldAccessorImpl.java b/src/share/classes/sun/reflect/UnsafeStaticIntegerFieldAccessorImpl.java
--- a/src/share/classes/sun/reflect/UnsafeStaticIntegerFieldAccessorImpl.java
+++ b/src/share/classes/sun/reflect/UnsafeStaticIntegerFieldAccessorImpl.java
@@ -33,7 +33,7 @@
}
public Object get(Object obj) throws IllegalArgumentException {
- return new Integer(getInt(obj));
+ return Integer.valueOf(getInt(obj));
}
public boolean getBoolean(Object obj) throws IllegalArgumentException {
diff --git a/src/share/classes/sun/reflect/UnsafeStaticLongFieldAccessorImpl.java b/src/share/classes/sun/reflect/UnsafeStaticLongFieldAccessorImpl.java
--- a/src/share/classes/sun/reflect/UnsafeStaticLongFieldAccessorImpl.java
+++ b/src/share/classes/sun/reflect/UnsafeStaticLongFieldAccessorImpl.java
@@ -33,7 +33,7 @@
}
public Object get(Object obj) throws IllegalArgumentException {
- return new Long(getLong(obj));
+ return Long.valueOf(getLong(obj));
}
public boolean getBoolean(Object obj) throws IllegalArgumentException {
diff --git a/src/share/classes/sun/reflect/UnsafeStaticShortFieldAccessorImpl.java b/src/share/classes/sun/reflect/UnsafeStaticShortFieldAccessorImpl.java
--- a/src/share/classes/sun/reflect/UnsafeStaticShortFieldAccessorImpl.java
+++ b/src/share/classes/sun/reflect/UnsafeStaticShortFieldAccessorImpl.java
@@ -33,7 +33,7 @@
}
public Object get(Object obj) throws IllegalArgumentException {
- return new Short(getShort(obj));
+ return Short.valueOf(getShort(obj));
}
public boolean getBoolean(Object obj) throws IllegalArgumentException {
More information about the core-libs-dev
mailing list