Здравствуйте, anton_t, Вы писали:
WH>>А где исходники? _>У автора теста вестимо.
Тест без исходников ничего не стоит ибо невозможно проверить его корректность.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: Сравнение производительности Java 1.5 и .Net 2.0
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, anton_t, Вы писали:
WH>>>А где исходники? _>>У автора теста вестимо. WH>Тест без исходников ничего не стоит ибо невозможно проверить его корректность.
Абсолютно согласен. Я сравнивал производительность сортировок Java и С, так вот, в среднем мои замеры показали что Java отстает от С на 10-12 процентов на массивах различной длинны (от 1000 до 100000). Если верить этому тесту, то .NET выполнит те же операции на 38%-40%, что само по себе абсурд. Так что все это провокация, это нереально.
Re[5]: Сравнение производительности Java 1.5 и .Net 2.0
Здравствуйте, rjikzy, Вы писали:
R>Абсолютно согласен. Я сравнивал производительность сортировок Java и С, так вот, в среднем мои замеры показали что Java отстает от С на 10-12 процентов на массивах различной длинны (от 1000 до 100000). Если верить этому тесту, то .NET выполнит те же операции на 38%-40%, что само по себе абсурд. Так что все это провокация, это нереально.
Program.cs:
using System;
using System.Collections.Generic;
using System.Text;
namespace SortSpeed
{
class Program
{
static void Sort(double[] arr)
{
int len = arr.Length;
bool notSorted = true;
double tmp;
while (notSorted) {
notSorted = false;
for (int i = 0; i < len - 1; ++i) {
if (arr[i] > arr[i + 1]) {
tmp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = tmp;
notSorted = true;
}
}
}
}
static void Main(string[] args)
{
int len = 10000;
try {
len = int.Parse(args[0]);
} catch (Exception ex){
}
double[] arr = new double[len];
Random rand = new Random();
for (int i = 0; i < len; i++) {
arr[i] = rand.NextDouble();
}
DateTime d1 = DateTime.Now;
Sort(arr);
DateTime d2 = DateTime.Now;
Console.Out.WriteLine(string.Format("{0} - {1}", len, (d2 - d1).ToString()));
}
}
}
test.java:
import java.util.Date;
import java.util.Random;
import java.text.SimpleDateFormat;
public class test
{
public static void main(String[] args)
{
int len = 10000;
try {
len = Integer.parseInt(args[0]);
} catch (Exception ex){
}
double[] arr = new double[len];
Random rand = new Random();
for (int i = 0; i < len; i++) {
arr[i] = rand.nextDouble();
}
Date d1 = new Date();
Sort(arr);
Date d2 = new Date();
Date diff = new Date(d2.getTime() - d1.getTime());
SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss.SSSSSSS");
System.out.println(len + " - " + format.format(diff));
}
static void Sort(double[] arr)
{
int len = arr.length;
boolean notSorted = true;
double tmp;
while (notSorted) {
notSorted = false;
for (int i = 0; i < len - 1; ++i) {
if (arr[i] > arr[i + 1]) {
tmp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = tmp;
notSorted = true;
}
}
}
}
}
Я не специалист в Java, поэтому если уто-нибудь укажет, как побороть 7 часов, откуда-то вылезающие в явовской программе, то буду благодарен.
А так в общем видна разница в 30%.
Re[6]: Сравнение производительности Java 1.5 и .Net 2.0
Здравствуйте, anton_t, Вы писали:
_>Здравствуйте, rjikzy, Вы писали:
R>>Абсолютно согласен. Я сравнивал производительность сортировок Java и С, так вот, в среднем мои замеры показали что Java отстает от С на 10-12 процентов на массивах различной длинны (от 1000 до 100000). Если верить этому тесту, то .NET выполнит те же операции на 38%-40%, что само по себе абсурд. Так что все это провокация, это нереально.
_>Program.cs: _>
_>using System;
_>using System.Collections.Generic;
_>using System.Text;
_>namespace SortSpeed
_>{
_> class Program
_> {
_> static void Sort(double[] arr)
_> {
_> int len = arr.Length;
_> bool notSorted = true;
_> double tmp;
_> while (notSorted) {
_> notSorted = false;
_> for (int i = 0; i < len - 1; ++i) {
_> if (arr[i] > arr[i + 1]) {
_> tmp = arr[i];
_> arr[i] = arr[i + 1];
_> arr[i + 1] = tmp;
_> notSorted = true;
_> }
_> }
_> }
_> }
_> static void Main(string[] args)
_> {
_> int len = 10000;
_> try {
_> len = int.Parse(args[0]);
_> } catch (Exception ex){
_> }
_> double[] arr = new double[len];
_> Random rand = new Random();
_> for (int i = 0; i < len; i++) {
_> arr[i] = rand.NextDouble();
_> }
_> DateTime d1 = DateTime.Now;
_> Sort(arr);
_> DateTime d2 = DateTime.Now;
_> Console.Out.WriteLine(string.Format("{0} - {1}", len, (d2 - d1).ToString()));
_> }
_> }
_>}
_>
_>test.java: _>
_>import java.util.Date;
_>import java.util.Random;
_>import java.text.SimpleDateFormat;
_>public class test
_>{
_> public static void main(String[] args)
_> {
_> int len = 10000;
_> try {
_> len = Integer.parseInt(args[0]);
_> } catch (Exception ex){
_> }
_> double[] arr = new double[len];
_> Random rand = new Random();
_> for (int i = 0; i < len; i++) {
_> arr[i] = rand.nextDouble();
_> }
_> Date d1 = new Date();
_> Sort(arr);
_> Date d2 = new Date();
_> Date diff = new Date(d2.getTime() - d1.getTime());
_> SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss.SSSSSSS");
_> System.out.println(len + " - " + format.format(diff));
_> }
_> static void Sort(double[] arr)
_> {
_> int len = arr.length;
_> boolean notSorted = true;
_> double tmp;
_> while (notSorted) {
_> notSorted = false;
_> for (int i = 0; i < len - 1; ++i) {
_> if (arr[i] > arr[i + 1]) {
_> tmp = arr[i];
_> arr[i] = arr[i + 1];
_> arr[i + 1] = tmp;
_> notSorted = true;
_> }
_> }
_> }
_> }
_>}
_>
_>Я не специалист в Java, поэтому если уто-нибудь укажет, как побороть 7 часов, откуда-то вылезающие в явовской программе, то буду благодарен. _>А так в общем видна разница в 30%.
Яве необходимо "разогрется". Попробуйте перед началом сортировки "прогнать" несколько раз ее в цикле, а затем выполнить замер.
Re[6]: Сравнение производительности Java 1.5 и .Net 2.0
public class Test
{
public static void main(String[] args)
{
double[] arr;
int len = 10000;
for (int j = 0; j < 10; j++){
try {
len = Integer.parseInt(args[0]);
} catch (Exception ex){
}
arr = new double[len];
Random rand = new Random();
for (int i = 0; i < len; i++) {
arr[i] = rand.nextDouble();
}
Sort(arr);
}
arr = new double[len];
Random rand = new Random();
for (int i = 0; i < len; i++) {
arr[i] = rand.nextDouble();
}
Date d1 = new Date();
Sort(arr);
Date d2 = new Date();
SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss.SSSSSSS");
Date diff = new Date(d2.getTime() — d1.getTime());
System.out.println(len + " — " + format.format(diff));
}
static void Sort(double[] arr)
{
int len = arr.length;
boolean notSorted = true;
double tmp;
while (notSorted) {
notSorted = false;
for (int i = 0; i < len — 1; ++i) {
if (arr[i] > arr[i + 1]) {
tmp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = tmp;
notSorted = true;
}
}
}
}
}
Такой тест на моей машине дал следующий результат:
10000 — 03:00:02.0000032
т.е. чуть больше 2-х секунд. Запустите на своей, у мене нет .NET чтобы протестировать...
Re[7]: Сравнение производительности Java 1.5 и .Net 2.0
Здравствуйте, rjikzy, Вы писали:
R>Такой тест на моей машине дал следующий результат: R>10000 — 03:00:02.0000032 R>т.е. чуть больше 2-х секунд. Запустите на своей, у мене нет .NET чтобы протестировать...
Разница стала меньше
Re[8]: Сравнение производительности Java 1.5 и .Net 2.0
Здравствуйте, anton_t, Вы писали: _>Однако... _>Я считал, что у .NET проблемы с тем, что ему нужно "разогреться", а оказывается такие проблемы у Java и в гораздо более острой форме.
Естественно. Java давно применяет хотспоттинг, который еще только сделают в дотнете. Именно хотспоттинг и требует прогрева для получения статистики. Джит тратит время только на самом раннем этапе запуска.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[10]: Сравнение производительности Java 1.5 и .Net 2.0
Здравствуйте, Sinclair, Вы писали:
S>Естественно. Java давно применяет хотспоттинг, который еще только сделают в дотнете. Именно хотспоттинг и требует прогрева для получения статистики. Джит тратит время только на самом раннем этапе запуска.
Что такое хотспоттинг?
Re[8]: Сравнение производительности Java 1.5 и .Net 2.0
Здравствуйте, anton_t, Вы писали:
_>Здравствуйте, rjikzy, Вы писали:
R>>10000 — 03:00:02.0000032
_>Интересно, что с вычитанием дат не так? У меня 7 часов откуда-то появляются, у тебя 3.
R>Такой тест на моей машине дал следующий результат: R>10000 — 03:00:02.0000032 R>т.е. чуть больше 2-х секунд. Запустите на своей, у мене нет .NET чтобы протестировать...
дожили... сортировку пузырьком тестируем.... короче на p2 2.4g сортировка выполняется за 33 миллисекунды. думаю в дотнет тоже самое.
import java.util.*;
public class Test11 {
public static void main(String [] args) {
double [] a = new double[100 * 1000];
Random r = new Random();
for (int i = 0; i < 100; i++) x(a, r);
for (int i = 0; i < a.length; i++) a[i] = r.nextDouble();
long start = System.nanoTime();
Arrays.sort(a);
long elapsed = System.nanoTime() — start;
System.out.println("Elapsed: " + elapsed);
}
private static void x(double [] a, Random r) {
for (int i = 0; i < a.length; i++) a[i] = r.nextDouble();
Arrays.sort(a);
}
}
Re[11]: Сравнение производительности Java 1.5 и .Net 2.0