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