Fedora sun.misc.Unsafe statistics

Florian Weimer fweimer at redhat.com
Tue Mar 4 20:22:44 UTC 2014


Out of curiosity, I looked at JAR files in all RPMs in Fedora rawhide 
(the development version of Fedora that will turn into Fedora 21) and 
counted the number of RPM packages which had Java classes referencing 
individual methods in sun.misc.Unsafe.  The attached table is sorted by 
decreasing package count, and grouped by method name and descriptor.

These numbers do not include references through reflection, for obvious 
reasons.

Java programming practices are sometimes at odds with distribution 
packaging, and due to licensing bias, the Fedora repository might not be 
representative of the general Java ecosystem.  However, the statistics 
cover 1177 Java source RPMs containing 550829 classes in 570477 
versions, so it's quite a bit of code, despite the fairly low number of 
references to sun.misc.Unsafe.

-- 
Florian Weimer / Red Hat Product Security Team

-------------- next part --------------
         name         |                         descriptor                         | count 
----------------------+------------------------------------------------------------+-------
 objectFieldOffset    | (Ljava/lang/reflect/Field;)J                               |    17
 arrayBaseOffset      | (Ljava/lang/Class;)I                                       |    14
 putObject            | (Ljava/lang/Object;JLjava/lang/Object;)V                   |    12
 arrayIndexScale      | (Ljava/lang/Class;)I                                       |    11
 getLong              | (Ljava/lang/Object;J)J                                     |    11
 compareAndSwapInt    | (Ljava/lang/Object;JII)Z                                   |     9
 compareAndSwapLong   | (Ljava/lang/Object;JJJ)Z                                   |     9
 getUnsafe            | ()Lsun/misc/Unsafe;                                        |     9
 compareAndSwapObject | (Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z |     8
 getObject            | (Ljava/lang/Object;J)Ljava/lang/Object;                    |     8
 getInt               | (Ljava/lang/Object;J)I                                     |     7
 putInt               | (Ljava/lang/Object;JI)V                                    |     6
 putLong              | (Ljava/lang/Object;JJ)V                                    |     6
 getObjectVolatile    | (Ljava/lang/Object;J)Ljava/lang/Object;                    |     5
 putBoolean           | (Ljava/lang/Object;JZ)V                                    |     5
 putByte              | (Ljava/lang/Object;JB)V                                    |     5
 putChar              | (Ljava/lang/Object;JC)V                                    |     5
 putDouble            | (Ljava/lang/Object;JD)V                                    |     5
 putFloat             | (Ljava/lang/Object;JF)V                                    |     5
 putObjectVolatile    | (Ljava/lang/Object;JLjava/lang/Object;)V                   |     5
 putOrderedObject     | (Ljava/lang/Object;JLjava/lang/Object;)V                   |     5
 putShort             | (Ljava/lang/Object;JS)V                                    |     5
 getBoolean           | (Ljava/lang/Object;J)Z                                     |     4
 getByte              | (Ljava/lang/Object;J)B                                     |     4
 getChar              | (Ljava/lang/Object;J)C                                     |     4
 getDouble            | (Ljava/lang/Object;J)D                                     |     4
 getFloat             | (Ljava/lang/Object;J)F                                     |     4
 getInt               | (J)I                                                       |     4
 getLong              | (J)J                                                       |     4
 getShort             | (J)S                                                       |     4
 getShort             | (Ljava/lang/Object;J)S                                     |     4
 park                 | (ZJ)V                                                      |     4
 putInt               | (JI)V                                                      |     4
 putLong              | (JJ)V                                                      |     4
 putShort             | (JS)V                                                      |     4
 throwException       | (Ljava/lang/Throwable;)V                                   |     4
 unpark               | (Ljava/lang/Object;)V                                      |     4
 copyMemory           | (JJJ)V                                                     |     3
 copyMemory           | (Ljava/lang/Object;JLjava/lang/Object;JJ)V                 |     3
 getByte              | (J)B                                                       |     3
 putByte              | (JB)V                                                      |     3
 putOrderedInt        | (Ljava/lang/Object;JI)V                                    |     3
 allocateInstance     | (Ljava/lang/Class;)Ljava/lang/Object;                      |     2
 defineClass          | (Ljava/lang/String;[BII)Ljava/lang/Class;                  |     2
 getDouble            | (J)D                                                       |     2
 getFloat             | (J)F                                                       |     2
 putDouble            | (JD)V                                                      |     2
 putFloat             | (JF)V                                                      |     2
 addressSize          | ()I                                                        |     1
 getLong              | (Ljava/lang/Object;I)J                                     |     1
 monitorEnter         | (Ljava/lang/Object;)V                                      |     1
 monitorExit          | (Ljava/lang/Object;)V                                      |     1
 setMemory            | (JJB)V                                                     |     1
(53 rows)



More information about the core-libs-dev mailing list