Subject:
More: C++ vs. Python vs. Perl vs. PHP performance benchmark
From:
Isaac Gouy
Date:
19.6.2012 г. 22:44 ч.
To:
Ivan Zahariev

> 4) Your blog post says -- "The benchmarks here do not try to be complete, 

> as they are showing the performance of the languages in one aspect, and mainly: 
> loops, arrays with numbers, basic math operations." -- but what is really 
> being shown for your Java program is unnecessary Integer boxing/unboxing.


Actually, that's easy to demonstrate, just change int[] to Integer[] (see attached program)

/* int[] 
real    0m3.156s 
user    0m4.388s 
sys    0m0.204s 
*/
 
/* Integer[]
real    0m9.898s
user    0m24.106s
sys    0m0.444s
*/


best wishes, Isaac

SimplePrimesInteger.java

/* int[]
real	0m3.156s
user	0m4.388s
sys	0m0.204s
*/

/* Integer[]
real	0m9.898s
user	0m24.106s
sys	0m0.444s
*/

import java.util.ArrayList;

public final class SimplePrimesInteger
{
   static ArrayList<Integer> primes7(int n){
      ArrayList<Integer> res = new ArrayList<Integer>();
      if (n < 2) { return res; }
      res.add(2);
      if (n == 2) { return res; }

      // do only odd numbers starting at 3
      Integer[] s = n%2==0 ? new Integer[n/2 - 1] : new Integer[n/2];
      for (int i=3, j=0; i <= n; i+=2, j++) s[j] = i;

      int mroot = (int)Math.sqrt(n);
      int half = s.length;
      int i = 0;
      int m = 3;
      while (m <= mroot){
         if (s[i] != 0){
            int j = (m*m-3)/2; 
            s[j] = 0;
            while (j < half){
               s[j] = 0;
               j += m;
            }
         }
         i++; 
         m = 2*i+3;
      }      
      for (int j : s) if (j !=0) res.add(j);
      return res;
   }

   public static void main(String[] args){
      for (int i=0; i < 10; i++) 
         System.out.printf("Found %d prime numbers.\n", primes7(10000000).size());
   }
}

Attachments:
SimplePrimesInteger.java1.2 KB