Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Очередные данные о "медленности" JAVA 
:(
    Опции темы
Metal_Heart
Дата 30.9.2005, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а почему бы и нет?
**


Профиль
Группа: Участник
Сообщений: 728
Регистрация: 31.3.2005
Где: Москва

Репутация: 4
Всего: 12



порядок, как будто - старший-младший


--------------------
 не стыдно учиться, а стыдно не учиться 
PM ICQ   Вверх
Бонифаций
Дата 30.9.2005, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 1
Всего: 40



это конечно, не мое дело, но все же, почему не просто

fread(pa,sizeof(long),size,stream) ?

и если мы читаем в цикле все по очереди случайные значения, почему

int numwritten=fread( &pa[i], sizeof( long ), size, stream );

а не

int numwritten=fread( &pa[i], sizeof( long ), 1, stream );

?

и еще не лучше ли назвать numread а не numwritten? И еще бы какой-нибудь код чтобы сверять его с size, а то он как-то присваивается и нигде не используется.

а вот еще - почему не просто long pa[size] в стеке, а где-то в куче его выделяем, а потом удаляем? Хотя это конечно неважно


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
Metal_Heart
Дата 30.9.2005, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а почему бы и нет?
**


Профиль
Группа: Участник
Сообщений: 728
Регистрация: 31.3.2005
Где: Москва

Репутация: 4
Всего: 12



то, что каксаемо работы с файлом - совершенно не важно, так как не в этом суть


--------------------
 не стыдно учиться, а стыдно не учиться 
PM ICQ   Вверх
Coocky
Дата 30.9.2005, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: нет
Всего: 62



Цитата
а вот еще - почему не просто long pa[size] в стеке, а где-то в куче его выделяем, а потом удаляем? Хотя это конечно неважно

У меня больше long pa[99999] вылетает прога в дебаг! smile
Добавлено @ 16:59
Цитата
и еще не лучше ли назвать numread а не numwritten? И еще бы какой-нибудь код чтобы сверять его с size, а то он как-то присваивается и нигде не используется.

Это случайная переменная. Она там ненужна. Это когда тестил-для дебагера использовал
Ребята, кто считает где ошибка-подправтеи выложите снова! Я давно в консоли не писал.Извините...Сишники smile
smile


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
LSD
Дата 1.10.2005, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Программу Coocky на Java я перевел:
Код
import java.io.*;
import java.nio.*;
import java.nio.channels.*;

public class Test
{
  public final static int ARRAY_SIZE = 39999996;
  public final static int ARRAY_SIZE_BYTES = ARRAY_SIZE * 4;

  private static int[] data;

  public static void main(String[] args)
  {
    if(args.length < 1)
    {
      System.out.println("usage: java Test <file_name>");
      System.exit(1);
    }
    
    data = new int[ARRAY_SIZE];
    
    long start = System.currentTimeMillis();
    loadData(args[0]);
    long stop = System.currentTimeMillis();
    
    double duration = ( (double) (stop - start)) / 1000.0;
    
    System.out.printf("Load array %.4f seconds\n", duration);

    start = System.currentTimeMillis();
    quickSort(0, ARRAY_SIZE - 1);
    stop = System.currentTimeMillis();
    
    duration = ( (double) (stop - start)) / 1000.0;
    
    System.out.printf("Sort array %.4f seconds\n", duration);
  }

  private static void loadData(String fileName)
  {
    try
    {
      FileInputStream in = new FileInputStream(fileName);
      FileChannel chanel = in.getChannel();
      if(chanel.size() < ARRAY_SIZE_BYTES)
      {
        System.out.println("File to small");
        chanel.close();
        System.exit(2);
      }
      IntBuffer buffer = chanel.map(FileChannel.MapMode.READ_ONLY, 0, ARRAY_SIZE_BYTES).order(ByteOrder.nativeOrder()).asIntBuffer();
      buffer.get(data);
      chanel.close();
      in.close();
      buffer = null;
      chanel = null;
      in = null;
    }
    catch(IOException ex)
    {
      System.out.println("Error reading file: " + ex);
      System.exit(2);
    }
    
    System.gc();
    System.gc();
    System.gc();
  }

  private static void quickSort(int L, int R)
  {
    int i, j;
    int x, t;

    while(L < R)
    {
      x = data[L];
      i = L;
      j = R;
      while(i <= j)
      {
        while(data[i] < x)
          i++;

        while(x < data[j])
          j--;

        if(i <= j)
        {
          t = data[i];
          data[i] = data[j];
          data[j] = t;

          i++;
          j--;
        }
      }

      if( (j - L) > (R - i) )
      {
        quickSort(i, R);
        R = j;
      }
      else
      {
        quickSort(L, j);
        L = i;
      }
    }
  }
}


А вот генератор тестовых данных:
Код
import java.security.SecureRandom;
import java.io.FileOutputStream;
import java.io.*;

public class TestDataGenerator
{
  private final static int BUFFER_SIZE = 8 * 1024;

  public static void main(String[] args)
  {
    if(args.length < 1)
    {
      System.out.println("usage: java Test <file_name>");
      System.exit(1);
    }
    
    SecureRandom rnd = new SecureRandom();
    
    byte[] buffer = new byte[BUFFER_SIZE];
    int leftToWrite = Test.ARRAY_SIZE_BYTES;
    try
    {
      FileOutputStream out = new FileOutputStream(args[0]);
      while(leftToWrite > 0)
      {
        rnd.nextBytes(buffer);
        out.write(buffer, 0, Math.min(leftToWrite, BUFFER_SIZE));
        leftToWrite -= BUFFER_SIZE;
      }
      out.close();
    }
    catch(IOException ex)
    {
      System.out.println("Error writeng file: " + ex);
      System.exit(2);
    }
  }
}


Теперь о тестах. Первый раунд Java выиграла нокаутом на первой секунде матча smile
Coocky ты чего там намудрил с загрузкой из файла? Запускаю программу и она у меня на этапе загрузки данных Please wait! Open your file!!! висит 5 минут, загрузка ядра по диспетчеру задач 100%?

З.Ы. Java загружает данные за 0,9690 секунды smile


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Coocky
Дата 4.10.2005, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: нет
Всего: 62



Цитата(LSD @ 1.10.2005, 22:32)
Java загружает данные за 0,9690 секунды

Интересно, а какой у тебя размер файла, в котором записано 39999996 элементов по 4 байта? smile



--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Бонифаций
Дата 4.10.2005, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 1
Всего: 40



примерно 156 мегабайт


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
LSD
Дата 4.10.2005, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Coocky @ 4.10.2005, 16:56)
Интересно, а какой у тебя размер файла, в котором записано 39999996 элементов по 4 байта?

Если верить Windows: размер 159 999 984 bytes, на диске 160 002 048 bytes smile

Это время конечно не после первого запуска, данные сидят в кеше (столько данных, за такое время, диск не в состоянии прочитать). Но попробую сделать это после перезагрузки.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Бонифаций
Дата 4.10.2005, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 1
Всего: 40



я пробовал. Вот два запуска. первый после перемонтирования раздела (т.е. без кэша), второй соответсвенно уже с кешем

bash-2.05b$ /opt/java/bin/java -Xmx200m Test DT
We are here:
Load array 4.197 seconds

Sort array 13.562 seconds

bash-2.05b$ /opt/java/bin/java -Xmx200m Test DT
We are here:
Load array 0.646 seconds

Sort array 13.976 seconds

А вот что показала сишная программа (слегка модифицированная чтобы загрузка нормально работала)

./testcc DT
New memory...Please wait..
Please wait! Open your file!!!
Ok! I've eaten it!!!!!11
Sort array 9.43 seconds



--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
LSD
Дата 4.10.2005, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Бонифаций
Попробуй запустить JVM как серверную (-server).


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Бонифаций
Дата 4.10.2005, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 1
Всего: 40



bash-2.05b$ /opt/java/bin/java -Xmx200m -server Test DT
We are here:
Load array 4.559 seconds

Sort array 12.015 seconds

bash-2.05b$ /opt/java/bin/java -Xmx200m -server Test DT
We are here:
Load array 0.657 seconds

Sort array 12.277 seconds




--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
Бонифаций
Дата 5.10.2005, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 1
Всего: 40



Цитата(LSD @ 1.10.2005, 22:32)
Программу Coocky на Java я перевел:
....
З.Ы. Java загружает данные за 0,9690 секунды smile

Я переделал С++ программу так, как мне кажется правильным. (приаттачено) Скажу сразу, я юниксовый житель и писал (и пробовал) под юниксы. Windows ветку я написал " исходя из здравого смысла и общей эрудиции", но не пробовал. У кого есть желание - welcome.



Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  jtest.zip 3,08 Kb


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
Дельф
Дата 24.11.2005, 21:09 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











http://weblogs.java.net/blog/opinali/archi...s_hotspo_1.html

Давайте по этому поводу прогоним тесты по новой. Выложите кто-нибудь .classы на www.ultrashare.net
  Вверх
mndkr
Дата 24.12.2005, 00:29 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Уважаемые защитники Java, вы же понимаете, что претензии к Java-приложениям заключаются не столько в скорости вычислений, сколько в работе графического интерфейса пользователя. Работа Java-приложений с rich GUI на маломощных машинах ощутимо медленнее, чем работа приложений, откомпилированных в native код под конкретную ОС. (Эта пресловутая JIT-compilation тут не сильно, видимо, помогает). Тормозной интерфейс сильно портит впечатление от Java-программ. На ваших Р4 это, может быть, и незаметно, а в будущем эта проблема в связи с ростом производительности процессоров вообще исчезнет, но сейчас далеко не у каждого стоит проц с частотой в 3 ГГц.
  Вверх
Domestic Cat
Дата 24.12.2005, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Цитата(mndkr @ 23.12.2005, 15:29)
На ваших Р4 это, может быть, и незаметно, а в будущем эта проблема в связи с ростом производительности процессоров вообще исчезнет, но сейчас далеко не у каждого стоит проц с частотой в 3 ГГц.

Тогда приводи конкретные данные - на какой машине что и как тормозит. Потому что с P2 Java программы с гуем довольно трудно отличить от нативных.


--------------------

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0976 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.