2009/5/19 David kerber <dcker...@verizon.net>: > Caldarale, Charles R wrote: >>> >>> From: David kerber [mailto:dcker...@verizon.net] >>> Subject: Performance: switch vs if ... else if >>> >>> I had to process based on a parameter that could take >>> one of 6 different single-character string values. I >>> had been using an if .. else if construct. >>> >> >> Interesting numbers. Can you show us the exact code of the if .. else >> construct? >> >> - Chuck >> > > Here is the entire code. The variables o and p are used to make sure there > is actually some work done in each call to the test methods. I've seen > cases (mainly in Delphi) where an optimizer completely removed large chunks > of code because it wasn't doing anything. I don't know of java can do that > or not... > > public class SwitchVsIfTest { > (...) >
1. If you are doing tests with the classic VM, allow it some time to warmup and compile your code. That is, run the same test first with a smaller count of iterations. Server VM precompiles code before using it, while Classic one compiles heavily used parts of code on-the-fly. 2. This line: rtFields.valueOf( myChr ) does all the job that your if/elif/else tree did. That is, I expect that all the time is spent in there, not in switch(number) that follows it. 3. You can try the following: private static void switchSub2( String myChr ) { if (myChr.length() != 1) { throw new AssertionError(); } switch ( myChr.charAt(0)) { case 'c': o += 1; break; case 'r': o += 2; break; case 'l': o += 3; break; case 'a': o += 4; break; case 't': o += 5; break; case 'd': o += 6; break; } return; } Best regards, Konstantin Kolinko --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org