why python is slower than java?
Alex Martelli
aleaxit at yahoo.com
Sat Nov 6 06:10:47 EST 2004
On 2004 Nov 06, at 08:31, Maurice LING wrote:
...
> 1. it is a disk intensive I/O operation.
> 2. users delay is not in the equation (there is no user input)
> 3. I am not interested in the amount of time needed to develop it. But
> only interested execution speed.
OK, could you provide a simple toy example that meets these conditions
-- does lot of identical disk-intensive I/O "in batch" -- and the
execution speed measured (and on what platform) for what Python and
Java implementations, please?
For example, taking a trivial Copy.java from somewhere on the net:
import java.io.*;
public class Copy {
public static void main(String[] args) throws IOException {
File inputFile = new File("/usr/share/dict/web2");
File outputFile = new File("/tmp/acopy");
FileReader in = new FileReader(inputFile);
FileWriter out = new FileWriter(outputFile);
int c;
while ((c = in.read()) != -1)
out.write(c);
in.close();
out.close();
}
}
and I observe (on an iBook 800, MacOSX 10.3.5):
kallisti:~ alex$ java -version
java version "1.4.2_05"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_05-141.3)
Java HotSpot(TM) Client VM (build 1.4.2-38, mixed mode)
-r--r--r-- 1 root wheel 2486825 12 Sep 2003 /usr/share/dict/web2
kallisti:~ alex$ time java Copy
real 0m7.058s
user 0m5.820s
sys 0m0.390s
versus:
kallisti:~ alex$ time python2.4 Copy.py
real 0m0.296s
user 0m0.080s
sys 0m0.170s
with Python 2.4 beta 1 for the roughly equivalent:
inputFile = file("/usr/share/dict/web2", 'r')
outputFile = file("/tmp/acopy", 'w')
outputFile.write(inputFile.read())
inputFile.close()
outputFile.close()
which isn't all that far from highly optimized system commands:
kallisti:~ alex$ time cp /usr/share/dict/web2 /tmp/acopy
real 0m0.167s
user 0m0.000s
sys 0m0.040s
kallisti:~ alex$ time cat /usr/share/dict/web2 >/tmp/acopy
real 0m0.149s
user 0m0.000s
sys 0m0.090s
I'm sure the Java version can be optimized easily, too -- I just
grabbed the first thing I saw off the net. But surely this example
doesn't point to any big performance issue with Python disk I/O wrt
Java. So, unless you post concrete examples yourself, the smallest the
better, it's going to be pretty difficult to understand where your
doubts are coming from!
Alex
More information about the Python-list
mailing list