Java和PyPy速度对比

Java和PyPy运行同一段代码,对比结果.

Java代码:

package javatest;

import java.text.DecimalFormat;
import java.util.Date;

public class speedTest
{
    public static void main(String[] args)
    {
        int i = 0;
        int max = 2000000;
        Date start = new Date();
        while (i++ < max)
        {
            transform();
        }
        Date end = new Date();
        long diff = end.getTime() - start.getTime();
        
        StringBuffer maxToshow=new StringBuffer();
        maxToshow.append(max);
        int count=0;
        for(int a=1;a<String.valueOf(max).length();a++)
        {
            if(a%3==0)
            {
                count++;
                maxToshow.insert(String.valueOf(max).length()-count*3, ",");
            }
        }
        //String s = String.format("it takes %f seconds to run %s loops",
        //        diff / 1000.00, new DecimalFormat(",###").format(max));
        String s = String.format("it takes %f seconds to run %s loops",
                diff / 1000.00, maxToshow.toString());
        System.out.println(s);
    }

    public static void transform()
    {
        String str = "Pcybgle rfgq rsrmpgyj fyq npmzyzjw pcgldmpacb wmsp glrcpcqr gl sqgle Nwrfml - wms qfmsjb zc cyecp rm ynnjw Nwrfml rm qmjtgle wmsp pcyj-umpjb npmzjckq. Ufcpc qfmsjb wms em rm jcypl kmpc?";
        for (int i = 0; i < str.length(); i++)
        {
            char c = str.charAt(i);
            if (c >= 'a' && c <= 'z')
            {
                c += 2;
                if (c > 'z')
                {
                    c -= 26;
                }
                // System.out.print(c);
            }

            else if (c >= 'A' && c <= 'Z')
            {
                c += 2;
                if (c > 'Z')
                {
                    c -= 26;
                }
                // System.out.print(c);
            }
            else
                ;// System.out.print(c);
        }
    }
}

 

Python代码:

import sys,datetime
import numFormatter

def transform():
    str='''Pcybgle rfgq rsrmpgyj fyq npmzyzjw pcgldmpacb wmsp glrcpcqr gl sqgle Nwrfml - wms qfmsjb zc cyecp rm ynnjw Nwrfml rm qmjtgle wmsp pcyj-umpjb npmzjckq. Ufcpc qfmsjb wms em rm jcypl kmpc?'''
    for s in str:
        if ord(s)>=ord('a') and ord(s)<=ord('z'):
            new=ord(s)+2
            if new>ord('z'):
                new-=26
            #sys.stdout.write(chr(new))
        elif ord(s)>=ord('A') and ord(s)<=ord('Z'):
            new=ord(s)+2
            if new>ord('Z'):
                new-=26
            #sys.stdout.write(chr(new))
        else:
            1==1#sys.stdout.write(s)

            
def formatNumber(number):
    numStr='%d'%number
    formatStr=''
    numStr=numStr[::-1]
    i=0
    while i<len(numStr):
        formatStr+=numStr[i]
        i+=1
        if i%3==0:
            formatStr+=','
    formatStr=formatStr.strip(',')
    formatStr=formatStr[::-1]
    print formatStr
    
starttime = datetime.datetime.now()
loops=200000;
for i in range(loops):
    transform()
    #sys.stdout.write('\n')
endtime = datetime.datetime.now()

print 'it takes %s seconds to run %s loops'%((endtime - starttime).seconds,formatNumber(loops))
                                            

 

Java分别运行两百万次、两千万次、两亿次耗时结果:

PyPy运行上述代码,两百万次、两千万次、两亿次的耗时结果:

PyPy和Python解释器运行结果对比:

依据结果粗略估计,Java效率是PyPy的2.3倍,PyPy是Python的88.5倍

 

posted @ 2016-01-20 20:36  morein2008  阅读(1627)  评论(0编辑  收藏  举报