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 {


Reply via email to