1 9 package javolution; 10 11 import javolution.lang.MathLib; 12 import javolution.lang.Text; 13 import javolution.realtime.PoolContext; 14 15 21 final class Perf_Lang extends Javolution implements Runnable { 22 23 private static final int COUNT = 1000; 24 25 private final String STRING = "Concatenates this line 1000 times (resulting in a text of about 80,000 characters)"; 26 27 private final Text TEXT = Text.valueOf(STRING); 28 29 private final Text ONE_CHAR = Text.valueOf('X'); 30 31 34 public void run() { 35 println("//////////////////////////////"); 36 println("// Package: javolution.lang //"); 37 println("//////////////////////////////"); 38 println(""); 39 40 println("-- String/StringBuffer versus Text --"); 41 println(""); 42 43 println("\"" + STRING + "\""); 44 45 print("String \"+\" operator: "); 46 startTime(); 47 String str = ""; 48 for (int j = 0; j < COUNT; j++) { 49 str += STRING; 50 } 51 println(endTime(1)); 52 53 print("StringBuffer \"append\" : "); 54 startTime(); 55 for (int i = 0; i < 100; i++) { 56 StringBuffer sb = new StringBuffer(); 57 for (int j = 0; j < COUNT; j++) { 58 sb.append(STRING); 59 } 60 } 61 println(endTime(100)); 62 63 print("Text \"concat\" (heap): "); 64 startTime(); 65 for (int i = 0; i < 100; i++) { 66 Text txt = Text.EMPTY; 67 for (int j = 0; j < COUNT; j++) { 68 txt = txt.concat(TEXT); 69 } 70 } 71 println(endTime(100)); 72 73 print("Text \"concat\" (stack): "); 74 startTime(); 75 for (int i = 0; i < 100; i++) { 76 PoolContext.enter(); 77 Text txt = Text.EMPTY; 78 for (int j = 0; j < COUNT; j++) { 79 txt = txt.concat(TEXT); 80 } 81 PoolContext.exit(); 82 } 83 println(endTime(100)); 84 85 println(""); 86 println("Inserts one character at random locations 1,000 times to the 80,000 characters text."); 87 88 print("StringBuffer insert: "); 89 startTime(); 90 for (int i = 0; i < 100; i++) { 91 StringBuffer sb = new StringBuffer(str); 92 for (int j = 1; j < COUNT; j++) { 93 int index = MathLib.randomInt(0, sb.length()); 94 sb.insert(index, 'X'); 95 } 96 } 97 println(endTime(100)); 98 99 print("Text insert (heap): "); 100 startTime(); 101 for (int i = 0; i < 100; i++) { 102 Text txt = Text.valueOf(str); 103 for (int j = 1; j < COUNT; j++) { 104 int index = MathLib.randomInt(0, txt.length()); 105 txt = txt.insert(index, ONE_CHAR); 106 } 107 } 108 println(endTime(100)); 109 110 print("Text insert (stack): "); 111 startTime(); 112 for (int i = 0; i < 100; i++) { 113 PoolContext.enter(); 114 Text txt = Text.valueOf(str); 115 for (int j = 1; j < COUNT; j++) { 116 int index = MathLib.randomInt(0, txt.length()); 117 txt = txt.insert(index, ONE_CHAR); 118 } 119 PoolContext.exit(); 120 } 121 println(endTime(100)); 122 123 println(""); 124 println("Delete 1,000 times one character at random location from the 80,000 characters text."); 125 126 StringBuffer tmp = new StringBuffer(); 127 print("StringBuffer delete: "); 128 startTime(); 129 for (int i = 0; i < 100; i++) { 130 StringBuffer sb = new StringBuffer(str); 131 for (int j = 0; j < COUNT; j++) { 132 int index = MathLib.randomInt(0, sb.length() - 1); 133 sb.deleteCharAt(index); 134 } 135 } 136 println(endTime(100)); 137 138 print("Text delete (heap): "); 139 startTime(); 140 for (int i = 0; i < 100; i++) { 141 Text txt = Text.valueOf(str); 142 for (int j = 0; j < COUNT; j++) { 143 int index = MathLib.randomInt(0, txt.length() - 1); 144 txt = txt.delete(index, index + 1); 145 } 146 } 147 println(endTime(100)); 148 149 print("Text delete (stack): "); 150 startTime(); 151 for (int i = 0; i < 100; i++) { 152 PoolContext.enter(); 153 Text txt = Text.valueOf(str); 154 for (int j = 0; j < COUNT; j++) { 155 int index = MathLib.randomInt(0, txt.length() - 1); 156 txt = txt.delete(index, index + 1); 157 } 158 PoolContext.exit(); 159 } 160 println(endTime(100)); 161 162 println(""); 163 } 164 } | Popular Tags |