JavaMemoryModel: Synchronization in the spec benchmarks

From: Bill Pugh (pugh@cs.umd.edu)
Date: Tue Nov 09 1999 - 13:55:56 EST


Jeremy Manson, one of my students, did some profiling of where synchronization is done
in the spec benchmarks. The following is his results. Each line contains the
number of synchronization locks obtained, the method that called the method requiring
synchronization, and the method that required synchronization.

As it turns out, almost all of the synchronization cost in the benchmarks
is because the db benchmark is saving Entries as a Vector, which is synchronized,
and then performing a shell sort on them.

        Bill

db
45015302 spec/benchmarks/_209_db/Database.shell_sort java/util/Vector.elementAt
5270215 spec/benchmarks/_209_db/Database.set_index java/util/Vector$1.nextElement
2920198 spec/benchmarks/_209_db/Entry.equals java/util/Vector$1.nextElement
122663 spec/benchmarks/_209_db/Database.read_db java/util/Vector.addElement
18874 java/io/DataInputStream.readLine spec/io/FileInputStream.read
15553 spec/benchmarks/_209_db/Database.add java/util/Vector.addElement
9224 spec/io/ValidityCheckOutputStream.strip1 java/lang/StringBuffer.append
5203 java/io/LineNumberInputStream.read spec/io/FileInputStream.read
5203 java/io/LineNumberInputStream.read java/io/ByteArrayInputStream.read
5202 spec/io/ValidityCheckOutputStream.write java/io/ByteArrayOutputStream.write

javac
7981865 spec/benchmarks/_213_javac/ScannerInputStream.read java/io/BufferedInputStream.read
1954188 java/io/DataOutputStream.writeUTF java/io/ByteArrayOutputStream.write
993048 java/io/DataOutputStream.writeShort java/io/ByteArrayOutputStream.write
877380 java/io/DataOutputStream.writeByte java/io/ByteArrayOutputStream.write
695828 spec/benchmarks/_213_javac/ConstantPool.put java/util/Hashtable.get
458756 spec/benchmarks/_213_javac/ConstantPool.index java/util/Hashtable.get
426193 spec/benchmarks/_213_javac/Identifier.lookup java/util/Hashtable.get
406760 spec/benchmarks/_213_javac/ClassDefinition.getFirstMatch java/util/Hashtable.get
356364 spec/benchmarks/_213_javac/Scanner.scanIdentifier spec/benchmarks/_213_javac/Identifier.lookup
312822 java/lang/StringBuffer.toString java/lang/String.<init>

jack
1456424 spec/benchmarks/_228_jack/RunTimeNfaState.Move java/util/Hashtable.get
1345856 java/util/Vector.contains java/util/Vector.indexOf
1340586 spec/benchmarks/_228_jack/RunTimeNfaState.Move java/util/Vector.addElement
1340476 spec/benchmarks/_228_jack/TokenEngine.getNextTokenFromStream java/util/Vector.elementAt
1319515 spec/benchmarks/_228_jack/RunTimeNfaState.Move java/util/Hashtable.keys
1146072 spec/benchmarks/_228_jack/RunTimeNfaState.Move java/util/Vector.elementAt
561265 spec/benchmarks/_228_jack/TokenEngine.getNextTokenFromStream java/util/Vector.removeAllElements
372971 java/lang/StringBuffer.toString java/lang/String.<init>
372636 java/lang/StringBuffer.<init> java/lang/StringBuffer.append
322642 spec/benchmarks/_228_jack/TokenEngine.getNextTokenFromStream java/lang/StringBuffer.append

jess
1409194 spec/benchmarks/_202_jess/jess/RU.getAtom java/util/Hashtable.get
1060952 spec/benchmarks/_202_jess/jess/Rete.findFact java/util/Vector.elementAt
701290 spec/benchmarks/_202_jess/jess/Rete.FindUserfunction java/util/Hashtable.get
701290 spec/benchmarks/_202_jess/jess/Rete.FindDeffunction java/util/Hashtable.get
701290 spec/benchmarks/_202_jess/jess/Funcall.SimpleExecute java/util/Hashtable.get
71958 spec/benchmarks/_202_jess/jess/Rete.Run java/util/Vector.elementAt
33461 spec/benchmarks/_202_jess/jess/Rete.findFactByID java/util/Vector.elementAt
14007 spec/benchmarks/_202_jess/jess/Context.findBinding java/util/Vector.elementAt
12539 java/io/StreamTokenizer.read spec/io/FileInputStream.read
9719 spec/benchmarks/_202_jess/jess/Rete.ProcessToken java/util/Vector.elementAt

mtrt
694769 java/io/DataInputStream.readLine java/io/BufferedInputStream.read
2946 java/util/Properties.loadConvert java/lang/StringBuffer.append
1828 spec/io/ValidityCheckOutputStream.strip1 java/lang/StringBuffer.append
1241 java/io/LineNumberInputStream.read spec/io/FileInputStream.read
1241 java/io/LineNumberInputStream.read java/io/ByteArrayInputStream.read
1239 spec/io/ValidityCheckOutputStream.write java/io/ByteArrayOutputStream.write
1110 spec/io/ConsoleOutputStream.write java/lang/StringBuffer.append
1023 java/lang/StringBuffer.toString java/lang/String.<init>
 633 spec/io/TableOfExistingFiles.<init> java/util/Hashtable.put
 418 java/io/Writer.write java/io/BufferedWriter.write

compress
2946 java/util/Properties.loadConvert java/lang/StringBuffer.append
 789 java/lang/StringBuffer.toString java/lang/String.<init>
 756 spec/io/ValidityCheckOutputStream.strip1 java/lang/StringBuffer.append
 633 spec/io/TableOfExistingFiles.<init> java/util/Hashtable.put
 483 java/io/LineNumberInputStream.read spec/io/FileInputStream.read
 483 java/io/LineNumberInputStream.read java/io/ByteArrayInputStream.read
 482 spec/io/ValidityCheckOutputStream.write java/io/ByteArrayOutputStream.write
 430 spec/io/ConsoleOutputStream.write java/lang/StringBuffer.append
 264 java/io/BufferedReader.readLine java/io/BufferedReader.readLine
 262 java/io/BufferedReader.readLine java/lang/StringBuffer.append

mpeg
2946 java/util/Properties.loadConvert java/lang/StringBuffer.append
1955 spec/benchmarks/_222_mpegaudio/k.U spec/io/FileInputStream.read
 710 java/lang/StringBuffer.toString java/lang/String.<init>
 633 spec/io/TableOfExistingFiles.<init> java/util/Hashtable.put
 383 java/lang/StringBuffer.<init> java/lang/StringBuffer.append
 296 spec/io/ValidityCheckOutputStream.strip3 java/lang/StringBuffer.append
 264 java/io/BufferedReader.readLine java/io/BufferedReader.readLine
 262 java/io/BufferedReader.readLine java/lang/StringBuffer.append
 211 java/io/LineNumberInputStream.read java/io/ByteArrayInputStream.read
 210 spec/io/ValidityCheckOutputStream.write java/io/ByteArrayOutputStream.write

-------------------------------
JavaMemoryModel mailing list - http://www.cs.umd.edu/~pugh/java/memoryModel



This archive was generated by hypermail 2b29 : Thu Oct 13 2005 - 07:00:22 EDT