JVM-JVM是如何執行方法呼叫的
阿新 • • 發佈:2020-11-23
例子:
1 package javap.method; 2 3 4 // Run with: java -XX:CompileCommand='dontinline,*.passThroughImmigration' Passenger 5 public abstract class Passenger { 6 abstract void passThroughImmigration(); 7 8 public static void main(String[] args) { 9 Passenger a = new ChinesePassenger();10 Passenger b = new ForeignerPassenger(); 11 long current = System.currentTimeMillis(); 12 for (int i = 1; i <= 2000000000; i++) { // 20億 13 if (i % 100000000 == 0) { // 1億 14 long temp = System.currentTimeMillis(); 15 System.out.println(temp - current);16 current = temp; 17 } 18 Passenger c = (i < 1000000000) ? a : b; // 10億 19 c.passThroughImmigration(); 20 } 21 } 22 } 23 class ChinesePassenger extends Passenger { 24 @Override void passThroughImmigration() {} 25 } 26 class ForeignerPassenger extendsPassenger { 27 @Override void passThroughImmigration() {} 28 }
java -XX:CompileCommand='dontinline,*.passThroughImmigration' javap.method.Passenger,執行4次,每次結果為1列
1 263 272 256 260 // a開始 2 258 277 269 263 3 247 257 248 294 4 247 242 249 312 5 250 241 249 404 6 242 263 248 468 7 258 255 242 364 8 262 243 242 263 9 252 271 252 279 10 246 258 246 249 11 328 316 296 320 // b開始 12 315 339 293 369 13 345 323 286 761 14 287 314 279 398 15 294 311 290 349 16 303 341 289 367 17 289 345 283 346 18 282 315 278 363 19 288 401 277 416 20 293 388 284 331
java javap.method.Passenger,執行4次,每次結果為1列
1 116 83 82 115 // a開始 2 143 134 128 149 3 122 141 117 141 4 131 173 124 128 5 124 149 131 116 6 120 153 117 117 7 115 141 114 114 8 115 125 116 114 9 114 116 114 135 10 113 112 119 132 11 158 143 144 168 // b開始 12 140 141 142 156 13 148 146 145 142 14 156 153 144 144 15 142 140 141 144 16 145 198 307 147 17 191 216 236 156 18 157 206 163 144 19 150 199 152 145 20 147 191 162 144