nlothik (nlothik) wrote,
nlothik
nlothik

Java vs. C++

Постоянно встречаю людей, причём многих -- с университетским образованием, которые ЖЕЛЕЗНО УВЕРЕНЫ, что проект, писанный на Джаве, будучи переписан на Си, работает в пицот тыщ раз быстрее.

Я не поленился. Я, может быть, по призванию не программист, но volens-nolens имею в этой области некоторое образование.

Я написал две программы, которые выполняют абсолютно одинаковые действия, в одинаковой же последовательности. А именно:

1. Открывают текстовый файл c:\testdata.txt. Внутри этого файла -- 65536 строчки со случайными числами от 0 до 65536. Случайные числа были сгенерированы в Microsoft Excel 2010 функцией RANDBETWEEN(0,65536).
2. Читают файл в массив целых чисел unsorted [].
3. Копируют массив unsorted [] в массив toSort [] (зачем -- объясню ниже).
4. Сортируют массив toSort [] алгоритмом сортировки вставками ( O(n2) ).
5. Выводят на консоль слово "Done!".

Чтобы получить более значащие цифры, так как одна сортировка может выполняться слишком быстро, шаги 3 и 4 я делаю 2 раза (можно и больше, но умаешься ждать). Отсюда шаг №3 -- чтобы не сортировать уже отсортированные данные.

Прочтение файла в массив занимает буквально доли секунды. Львиная доля времени выполнения программы приходится на сортировку.

Программа, написанная на Си, была скомпилирована в exe-файл в Visual Studio 2008. Программа на Джаве была, соответственно, экспортирована в jar из Eclipse.

Мерял время я по обыкновенному цифровому будильнику фирмы Sharp :)

Итого, какие же результаты, сэры мои?

А вот такие! Программа, написанная на Си, выполняет эти действия за 17 секунд. А программа, написанная на Джаве, выполняется за 8 (восемь!) секунд, то-есть, джавовская программа работает в два с гаком раза быстрее!!

О чём тут дальше можно говорить, дорогие сэры, кроме как о том, что постулат "программа, написанная на Си, по определению работает быстрее программы, написанной на Джаве" -- как минимум заслуживает серьёзного пересмотра??!!!!

Сырцы программ, если кому-то захочется перепроверить -- под катом!


SpeedTest.cpp
----------------------------------------------------------
#include "stdafx.h"
#include "iostream"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{

int unsorted[65536];

char number[7];

int z = 0;

FILE *testfile;

testfile = fopen("c:\\testdata.txt", "r");

while (fgets(number,7,testfile) != NULL)
{
unsorted[z] = atoi(number);
z++;
}

fclose(testfile);

int toSort[65536];
int temp;

for (int timesToRepeat = 0; timesToRepeat < 2; timesToRepeat++)
{

for (int i = 0; i < 65536; i++)
{
toSort[i] = unsorted[i];
}

//sorting
for (int i = 1; i < 65536; i++)
{
for (int k = i; k > 0; k--)
{
if (toSort[k] < toSort[k - 1])
{
temp = toSort[k];
toSort[k] = toSort[k - 1];
toSort[k - 1] = temp;
}
else
{
break;
}
}
}
}

cout << "Done!\n";

return 0;
}
----------------------------------------------------------

SpeedTest.java
----------------------------------------------------------
import java.io.*;

public class SpeedTest
{
public static void main (String [] arguments) throws IOException
{

int [] unsorted = new int[65536];

String line;

int z = 0;

BufferedReader input = new BufferedReader(new FileReader("c:\\testdata.txt"));

while ((line = input.readLine()) != null)
{
unsorted[z] = Integer.parseInt(line);
z++;
}

input.close();

int [] toSort = new int[65536];
int temp;

for (int timesToRepeat = 0; timesToRepeat < 2; timesToRepeat++)
{

for (int i = 0; i < 65536; i++)
{
toSort[i] = unsorted[i];
}

//sorting
for (int i = 1; i < 65536; i++)
{
for (int k = i; k > 0; k--)
{
if (toSort[k] < toSort[k - 1])
{
temp = toSort[k];
toSort[k] = toSort[k - 1];
toSort[k - 1] = temp;
}
else
{
break;
}
}
}
}

System.out.println("Done!");
}

}
----------------------------------------------------------
Tags: компьютерное, обалдеть
Subscribe

  • Как люди раньше быстрее старились

    Вот удивительное дело. Смотрю я на старые фотографии, где моей бабушке примерно тридцатник. А выглядит она лет на пятьдесят. Или вот в литературе…

  • Всякая всячина

    Оказывается, .vodka теперь официальный домен верхнего уровня. Горiлка “Немирів” из предыдущего поста в интернете представлена вебсайтом…

  • Всегда быть в маске — судьба моя!

    Последняя строчка арии Мистера Икс как никогда к месту в наше непростое время 🙂 Всегда любил эту арию. Именно в исполнении великого Отса. Многие…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 14 comments

  • Как люди раньше быстрее старились

    Вот удивительное дело. Смотрю я на старые фотографии, где моей бабушке примерно тридцатник. А выглядит она лет на пятьдесят. Или вот в литературе…

  • Всякая всячина

    Оказывается, .vodka теперь официальный домен верхнего уровня. Горiлка “Немирів” из предыдущего поста в интернете представлена вебсайтом…

  • Всегда быть в маске — судьба моя!

    Последняя строчка арии Мистера Икс как никогда к месту в наше непростое время 🙂 Всегда любил эту арию. Именно в исполнении великого Отса. Многие…