Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Java vs C++ speed (IO & Sorting)

Reply
Thread Tools

Java vs C++ speed (IO & Sorting)

 
 
Razii
Guest
Posts: n/a
 
      03-20-2008
This topic was on these newsgroups 7 years ago

http://groups.google.com/group/comp....5ebf877e25b287

I said then: "How about reading the whole Bible, sorting by lines, and
writing the sorted book to a file?"

Who remember that from 7 years ago, one of the longest thread on this
newsgroup

The text file used for the bible is here
ftp://ftp.cs.princeton.edu/pub/cs126...iles/bible.txt

Back to see if anything has changed

(downloaded whatever is latest version from sun.java.com)

Time for reading, sorting, writing: 359 ms (Java)
Time for reading, sorting, writing: 375 ms (Java)
Time for reading, sorting, writing: 375 ms (Java)

Visual C++ express and command I used was cl IOSort.cpp /O2

Time for reading, sorting, writing: 375 ms (c++)
Time for reading, sorting, writing: 390 ms (c++)
Time for reading, sorting, writing: 359 ms (c++)

The question still is (7 years later), where is great speed advantage
you guys were claiming for c++?

------------------- Java Code -------------- (same as 7 years ago

import java.io.*;
import java.util.*;
public class IOSort
{
public static void main(String[] arg) throws Exception
{
ArrayList ar = new ArrayList(5000);


String line = "";


BufferedReader in = new BufferedReader(
new FileReader("bible.txt"));
PrintWriter out = new PrintWriter(new BufferedWriter(
new FileWriter("output.txt")));


long start = System.currentTimeMillis();
while (true)
{
line = in.readLine();
if (line == null)
break;
if (line.length() == 0)
continue;
ar.add(line);
}


Collections.sort(ar);
int size = ar.size();
for (int i = 0; i < size; i++)
{
out.println(ar.get(i));
}
out.close();
long end = System.currentTimeMillis();
System.out.println("Time for reading, sorting, writing: "+
(end - start) + " ms");
}
}

--------- C++ Code ---------------

#include <fstream>
#include<iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <ctime>
using namespace ::std;


int main()
{
vector<string> buf;
string linBuf;
ifstream inFile("bible.txt");
clock_t start=clock();
buf.reserve(50000);


while(getline(inFile,linBuf)) buf.insert(buf.end(), linBuf);
sort(buf.begin(), buf.end());
ofstream outFile("output.txt");
copy(buf.begin(),buf.end(),ostream_iterator<string >(outFile,"\n"));
clock_t endt=clock();
cout <<"Time for reading, sorting, writing: " << endt-start << "
ms\n";
return 0;

}
 
Reply With Quote
 
 
 
 
Tim H
Guest
Posts: n/a
 
      03-20-2008
On Mar 19, 11:10 pm, Razii <(E-Mail Removed)> wrote:
> This topic was on these newsgroups 7 years ago
>
> http://groups.google.com/group/comp....5ebf877e25b287
>
> I said then: "How about reading the whole Bible, sorting by lines, and
> writing the sorted book to a file?"
>
> Who remember that from 7 years ago, one of the longest thread on this
> newsgroup
>
> The text file used for the bible is hereftp://ftp.cs.princeton.edu/pub/cs126/markov/textfiles/bible.txt
>
> Back to see if anything has changed
>
> (downloaded whatever is latest version from sun.java.com)
>
> Time for reading, sorting, writing: 359 ms (Java)
> Time for reading, sorting, writing: 375 ms (Java)
> Time for reading, sorting, writing: 375 ms (Java)
>
> Visual C++ express and command I used was cl IOSort.cpp /O2
>
> Time for reading, sorting, writing: 375 ms (c++)
> Time for reading, sorting, writing: 390 ms (c++)
> Time for reading, sorting, writing: 359 ms (c++)
>
> The question still is (7 years later), where is great speed advantage
> you guys were claiming for c++?
>
> ------------------- Java Code -------------- (same as 7 years ago
>
> import java.io.*;
> import java.util.*;
> public class IOSort
> {
> public static void main(String[] arg) throws Exception
> {
> ArrayList ar = new ArrayList(5000);
>
> String line = "";
>
> BufferedReader in = new BufferedReader(
> new FileReader("bible.txt"));
> PrintWriter out = new PrintWriter(new BufferedWriter(
> new FileWriter("output.txt")));
>
> long start = System.currentTimeMillis();
> while (true)
> {
> line = in.readLine();
> if (line == null)
> break;
> if (line.length() == 0)
> continue;
> ar.add(line);
> }
>
> Collections.sort(ar);
> int size = ar.size();
> for (int i = 0; i < size; i++)
> {
> out.println(ar.get(i));
> }
> out.close();
> long end = System.currentTimeMillis();
> System.out.println("Time for reading, sorting, writing: "+
> (end - start) + " ms");
> }
>
> }
>
> --------- C++ Code ---------------
>
> #include <fstream>
> #include<iostream>
> #include <string>
> #include <vector>
> #include <algorithm>
> #include <ctime>
> using namespace ::std;
>
> int main()
> {
> vector<string> buf;
> string linBuf;
> ifstream inFile("bible.txt");
> clock_t start=clock();
> buf.reserve(50000);
>
> while(getline(inFile,linBuf)) buf.insert(buf.end(), linBuf);
> sort(buf.begin(), buf.end());
> ofstream outFile("output.txt");
> copy(buf.begin(),buf.end(),ostream_iterator<string >(outFile,"\n"));
> clock_t endt=clock();
> cout <<"Time for reading, sorting, writing: " << endt-start << "
> ms\n";
> return 0;
>
> }


Did this include JVM startup time? What were the memory footprints?
 
Reply With Quote
 
 
 
 
Razii
Guest
Posts: n/a
 
      03-20-2008
On Wed, 19 Mar 2008 23:39:01 -0700 (PDT), Tim H <(E-Mail Removed)>
wrote:

>Did this include JVM startup time? What were the memory footprints?



Read the code.. you will see where the time comes from. What does
start time of virtual machine has to do with the time for reading,
sorting and writing file?


 
Reply With Quote
 
jason.cipriani@gmail.com
Guest
Posts: n/a
 
      03-20-2008
On Mar 20, 2:10 am, Razii <(E-Mail Removed)> wrote:
> The question still is (7 years later), where is great speed advantage
> you guys were claiming for c++?


Well I was not involved in that original topic, but I can tell you
that Java has improved a lot over the years. VM startup times aside,
there are VM's that will compile to native code on the fly, the byte
code optimizers have been greatly improved, there are even CPU's that
execute Java byte code directly (not on your test platform, but you'll
find these on devices like PDAs and mobile phones).

C++ will bring you closer to the hardware you are developing for, that
is one of the strengths of the language, but Java can be just as
respectable as far as performance goes. It really just depends on what
you are using the language for. Use the most appropriate tool for the
job.

Also, comparing to your results 7 years ago, it looks like Java has
slowed down a bit, relatively.

Jason
 
Reply With Quote
 
Razii
Guest
Posts: n/a
 
      03-20-2008
On Wed, 19 Mar 2008 23:57:25 -0700 (PDT), "(E-Mail Removed)"
<(E-Mail Removed)> wrote:


>Also, comparing to your results 7 years ago, it looks like Java has
>slowed down a bit, relatively.


Slowed down? It was 2080 ms in the google link that I posted. It's 359
ms this time (however, the bible.txt file was different back then. So
there can't be any comparison with the old times).

 
Reply With Quote
 
jason.cipriani@gmail.com
Guest
Posts: n/a
 
      03-20-2008
On Mar 20, 3:03 am, Razii <(E-Mail Removed)> wrote:
> On Wed, 19 Mar 2008 23:57:25 -0700 (PDT), "(E-Mail Removed)"
>
> <(E-Mail Removed)> wrote:
> >Also, comparing to your results 7 years ago, it looks like Java has
> >slowed down a bit, relatively.

>
> Slowed down? It was 2080 ms in the google link that I posted. It's 359
> ms this time (however, the bible.txt file was different back then. So
> there can't be any comparison with the old times).


Key word: relatively. I was making a joke that the old C++:Java ratio
was 3400:2080 (1.0:0.6), and the new one is 375:370 (1.0:1.0).

Jason
 
Reply With Quote
 
Ian Collins
Guest
Posts: n/a
 
      03-20-2008
Razii wrote:
>
> --------- C++ Code ---------------
>
> #include <fstream>
> #include<iostream>
> #include <string>
> #include <vector>
> #include <algorithm>
> #include <ctime>


#include <iterator>

Is required for ostream_iterator.

> using namespace ::std;
>
>
> int main()
> {
> vector<string> buf;
> string linBuf;
> ifstream inFile("bible.txt");
> clock_t start=clock();
> buf.reserve(50000);
>
>
> while(getline(inFile,linBuf)) buf.insert(buf.end(), linBuf);
> sort(buf.begin(), buf.end());


Why not use a sorted container? Your example takes 120mS on my box,
using std::multiset reduces this to 90.

> ofstream outFile("output.txt");
> copy(buf.begin(),buf.end(),ostream_iterator<string >(outFile,"\n"));
> clock_t endt=clock();
> cout <<"Time for reading, sorting, writing: " << endt-start << "
> ms\n";


endt-start is in what ever unit the system returns from clock(), it
should be scaled by CLOCKS_PER_SEC.

--
Ian Collins.
 
Reply With Quote
 
peter koch
Guest
Posts: n/a
 
      03-20-2008
On 20 Mar., 07:10, Razii <(E-Mail Removed)> wrote:
> This topic was on these newsgroups 7 years ago
>
> http://groups.google.com/group/comp....5ebf877e25b287
>
> I said then: "How about reading the whole Bible, sorting by lines, and
> writing the sorted book to a file?"
>
> Who remember that from 7 years ago, one of the longest thread on this
> newsgroup
>

[snip]

First of all, I believe this is a bad test. A lot of the time will be
involved with I/O which the compilers cant really affect. I also
notice that the time included does not involve releasing memory used
by the Java-program which is unfair as this time was measured in the C+
+ version.
Be that as it is, I notice that the C++ version is fifty percent
shorter which suggests that developing with C++ will be quite a lot
faster.
I also wonder what happens in the hypothetical case where you were
told that the solution produced was simply to slow. I know that C++
offers you lots of flexibility where you could program towards a
certain environment, using e.g. memory-mapped I/O. (*)
So all in all, the above benchmark could never make me consider
switching languages.

/Peter

(*) Simpler measures such as adjusting the buffers of the streams
could also have an effect.
 
Reply With Quote
 
jason.cipriani@gmail.com
Guest
Posts: n/a
 
      03-20-2008
On Mar 20, 4:20 am, Ian Collins <(E-Mail Removed)> wrote:
> Why not use a sorted container? Your example takes 120mS on my box,
> using std::multiset reduces this to 90.


What kind of super computers are you guys using? I mean my machine is
a little over a year old but... took me 790ms on a 2.16GHz Core Duo,
7200 RPM SATA something or other hard drive, with GCC -O2 (MinGW, GCC
3.4.5), using QueryPerformanceCounter for timings. Multiset reduced it
to about 720; with 380 for read + sort and 340 for write.

Jason
 
Reply With Quote
 
Razii
Guest
Posts: n/a
 
      03-20-2008
On Thu, 20 Mar 2008 01:16:58 -0700 (PDT), "(E-Mail Removed)"
<(E-Mail Removed)> wrote:

>Key word: relatively. I was making a joke that the old C++:Java ratio
>was 3400:2080 (1.0:0.6), and the new one is 375:370 (1.0:1.0).


Read the whole thread.. (700+ posts .. is that still a record in this
group?)

In the end they whined, made me change compilers, then after I got
VC++, claimed there is a bug in VC++ 5.0 library, . I had to fix the
bug. c++ ended up slightly faster after all that. even then there was
nothing to brag about.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Reported Wireless speed w/ repeater 7-9x Measured Speed Lance Wireless Networking 0 10-31-2004 09:31 PM
I need speed Mr .Net....speed Ham ASP .Net 6 10-29-2004 08:04 AM
speed speed speed a.metselaar Computer Support 14 12-30-2003 03:34 AM
java tool to test disk i/o, processor speed, and network speed efiedler Java 1 10-09-2003 03:36 PM
USB High Speed against USB Non High Speed DannyD1355 Computer Support 1 09-07-2003 02:59 AM



Advertisments