Re: Do you use a garbage collector (java vs c++ difference in "new")
On Thu, 10 Apr 2008 19:14:12 -0500, Razii
<DONTwhatevere3e@hotmail.com> wrote:
However, part of my C++ programming style just naturally also avoids
doing tons of news and deletes in tight loops (which is, again, very
different from eg. Java programming where you basically have no choice)
Let's test this about the keyword "new" and tight loops. Because in
most cases Java allocates new memory blocks on it's internal heap and
bypasses memory allocation mechanisms of the underlying OS, the
keyword "new" doesn't mean the same thing that it does in C++, where
each "new" allocation request is sent to the operating system, which
is very slow.
Creating 10000000 new objects with the keyword 'new' in tight loop.
Time: 2125 ms (C++)
Time: 328 ms (java)
--- c++--
#include <ctime>
#include <cstdlib>
#include <iostream>
using namespace std;
class Test {
public:
Test (int c) {count = c;}
virtual ~Test() { }
int count;
};
int main(int argc, char *argv[]) {
clock_t start=clock();
for (int i=0; i<=10000000; i++) {
Test *test = new Test(i);
if (i % 5000000 == 0)
cout << test;
}
clock_t endt=clock();
std::cout <<"Time: " <<
double(endt-start)/CLOCKS_PER_SEC * 1000 << " ms\n";
}
-- java ---
import java.util.*;
class Test {
Test (int c) {count = c;}
int count;
public static void main(String[] arg) {
long start = System.currentTimeMillis();
for (int i=0; i<=10000000; i++) {
Test test = new Test(i);
if (i % 5000000 == 0)
System.out.println (test);
}
long end = System.currentTimeMillis();
System.out.println("Time: " + (end - start) + " ms");
}
}