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

Поиск:

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


Опытный
**


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

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



Кстати, мне кажется, хоть ОО не java-приложение работа с памятью реализована аналогично.. ?! никому так не кажется?


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
Lotrex
Дата 19.8.2008, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



По теме:
JOP - Java Optimized Processor - пусть вас не смущает аббревиатура smile

Идея в том, что можно создать аппаратную java - машину, которая будет непосредственно выполнять байт-код, и сделать это можно на существующей элементной базе - на FPGA.

Возможно, тут получится существенное увеличение производительности.
PM MAIL ICQ   Вверх
Temdegon
Дата 20.1.2009, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 7
Всего: 9



Вопрос по использованию памяти в java. Есть такой линк Сравнение, где можно сравнить производительность и использование памяти межу разными языками. Сколько не тыркался, java всегда проигрывает по использованию памяти, практически любому языку. Причем не только всяким компилиуемым языкам, но и интерпретаторам, например PHP (Хотя по скорости рвет его в тряпки). Почему так получается? Вроди ПХП лет пять уже не могут 6-ю версию зарелизить, все пользуются пятым, и все нормально работает. А java чуть ли не каждый день выходит новая подверсия, а по управлению памятью проигрывает ПХП? Чем это вызвано? В чем особенности java от тех же rubi, python, C#, PHP? 
PM MAIL   Вверх
kamre
Дата 27.1.2009, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Предлагаю к рассмотрению "очередные данные о прожорливости и тормозах Java" в GUI приложениях  smile 

Прожорливость и тормоза будем сравнивать относительно Qt4 на довольно простом примере. Смысл сравнения именно с Qt4 состоит в том, что и Qt4 и Java/Swing полностью сами отрисовывают интерфейс внутри окна без использования каких-либо нативных компонент (нативное только главное окно).

Был написан аналогичный код на Java с использованием Swing (код см. ниже). Получилось вот так:
user posted image
Насчет Look&Feel: сразу можно записать в минус Java неправильный default шрифт в JTextArea и неправильную отрисовку меню в неактивном окне.

Но самое интересное происходит при ресайзе этих окошек: Qt все делает просто моментально и плавно, а в Java все происходит рывками и с заметным шлейфом от перерисовки рамки окна:
user posted image
Очевидно, что Java тормозит и явно не успевает перерисовывать содержимое окна при изменении его размеров. В Qt4 таких проблем не наблюдается, рамка окна сразу следует за мышкой и интерфейс внутри окна всегда успевает отрисовываться.

Также интересно посмотреть на потребление памяти для такого простого окошка:
user posted image
Результаты поразительные: Java прожорливее почти в 10 раз чем Qt4, и для отображения этого окна и изменения его размеров позволила себе отожрать больше 100Мб! Неужели это можно назвать разумным потреблением памяти?

А вот мой код на Java (возможно я что-то делаю не правильно, укажите на это):
Код

import static java.awt.GridBagConstraints.BOTH;
import static java.awt.GridBagConstraints.CENTER;
import static java.awt.GridBagConstraints.HORIZONTAL;
import static java.awt.GridBagConstraints.NONE;

import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;

import javax.swing.AbstractAction;
import javax.swing.Box;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.GroupLayout.ParallelGroup;
import javax.swing.GroupLayout.SequentialGroup;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;

@SuppressWarnings("serial")
public class BasicLayouts extends JFrame {
  public BasicLayouts() {
    super("Basic layouts");
    // create components of window
    createMenuBar();
    Container horizontalLayout = createHorizontalGroupBox();
    Container gridLayout = createGridLayout();
    Container formLayout = createFormLayout();
    Container textArea = createTextArea();
    Container dialogButtons = createDialogButtons();
    // set group layout to content pane
    Container contentPane = getContentPane();
    GroupLayout mainLayout = new GroupLayout(contentPane);
    contentPane.setLayout(mainLayout);
    mainLayout.setAutoCreateContainerGaps(true);
    mainLayout.setAutoCreateGaps(true);
    // add components of window to group layout
    mainLayout.setHorizontalGroup(mainLayout.createParallelGroup()
        .addComponent(horizontalLayout).addComponent(gridLayout).addComponent(
            formLayout).addComponent(textArea).addComponent(dialogButtons));
    mainLayout.setVerticalGroup(mainLayout.createSequentialGroup()
        .addComponent(horizontalLayout).addComponent(gridLayout).addComponent(
            formLayout).addComponent(textArea).addComponent(dialogButtons));
    //
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    pack();
    setMinimumSize(getSize());
    setVisible(true);
  }

  private void createMenuBar() {
    JMenuBar menuBar = new JMenuBar();
    JMenu fileMenu = new JMenu("File");
    fileMenu.setMnemonic(KeyEvent.VK_F);
    JMenuItem exitItem = new JMenuItem(new AbstractAction() {
      {
        putValue(NAME, "Exit");
        putValue(MNEMONIC_KEY, KeyEvent.VK_X);
      }

      @Override
      public void actionPerformed(ActionEvent e) {
        System.exit(0);
      }
    });
    fileMenu.add(exitItem);
    menuBar.add(fileMenu);
    setJMenuBar(menuBar);
  }

  private Container createHorizontalGroupBox() {
    JPanel panel = new JPanel();
    GroupLayout groupLayout = new GroupLayout(panel);
    groupLayout.setAutoCreateGaps(true);
    final int nButtons = 4;
    SequentialGroup horizontalGroup = groupLayout.createSequentialGroup();
    ParallelGroup verticalGroup = groupLayout.createParallelGroup();
    for (int i = 1; i <= nButtons; i++) {
      JButton button = new JButton("Button " + i);
      horizontalGroup.addComponent(button, GroupLayout.DEFAULT_SIZE,
          GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE);
      verticalGroup.addComponent(button);
    }
    groupLayout.setHorizontalGroup(horizontalGroup);
    groupLayout.setVerticalGroup(verticalGroup);
    panel.setLayout(groupLayout);
    Insets insets = new Insets(2, 2, 2, 2);
    panel.setBorder(new CompoundBorder(new TitledBorder("Horizontal layout"),
        new EmptyBorder(insets)));
    return panel;
  }

  private Container createGridLayout() {
    JPanel panel = new JPanel();
    panel.setLayout(new GridBagLayout());
    JLabel label1st = new JLabel("Line 1:");
    JLabel label2nd = new JLabel("Line 2:");
    JLabel label3rd = new JLabel("Line 3:");
    JTextField textField1st = new JTextField();
    JTextField textField2nd = new JTextField();
    JTextField textField3rd = new JTextField();
    JTextArea textArea = new JTextArea(
        "This widget takes up about two thirds of the grid layout.");
    textArea.setLineWrap(true);
    textArea.setWrapStyleWord(true);
    JScrollPane scrollPane = new JScrollPane(textArea);
    Insets insets = new Insets(2, 2, 2, 2);
    panel.setBorder(new CompoundBorder(new TitledBorder("Grid layout"),
        new EmptyBorder(insets)));
    Component glue = Box.createGlue();
    panel.add(glue, new GridBagConstraints(0, 0, 2, 1, 0.5, 1.0, CENTER, BOTH,
        insets, 0, 0));
    panel.add(label1st, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, CENTER,
        NONE, insets, 0, 0));
    panel.add(label2nd, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0, CENTER,
        NONE, insets, 0, 0));
    panel.add(label3rd, new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0, CENTER,
        NONE, insets, 0, 0));
    panel.add(textField1st, new GridBagConstraints(1, 1, 1, 1, 0.5, 0.0,
        CENTER, HORIZONTAL, insets, 0, 0));
    panel.add(textField2nd, new GridBagConstraints(1, 2, 1, 1, 0.5, 0.0,
        CENTER, HORIZONTAL, insets, 0, 0));
    panel.add(textField3rd, new GridBagConstraints(1, 3, 1, 1, 0.5, 0.0,
        CENTER, HORIZONTAL, insets, 0, 0));
    panel.add(scrollPane, new GridBagConstraints(2, 0, 1, 4, 1.0, 1.0, CENTER,
        BOTH, insets, 0, 0));
    Dimension zeroSize = new Dimension(0,
        textField1st.getPreferredSize().height);
    textField1st.setPreferredSize(zeroSize);
    textField2nd.setPreferredSize(zeroSize);
    textField3rd.setPreferredSize(zeroSize);
    scrollPane.setPreferredSize(zeroSize);
    return panel;
  }

  private Container createFormLayout() {
    JPanel panel = new JPanel();
    GroupLayout groupLayout = new GroupLayout(panel);
    groupLayout.setAutoCreateGaps(true);
    JLabel label1st = new JLabel("Line 1:");
    JLabel label2nd = new JLabel("Line 2, long text:");
    JLabel label3rd = new JLabel("Line 3:");
    JTextField textField = new JTextField();
    JComboBox comboBox = new JComboBox();
    JSpinner spinner = new JSpinner();
    groupLayout.setHorizontalGroup(groupLayout.createSequentialGroup()
        .addGroup(
            groupLayout.createParallelGroup().addComponent(label1st)
                .addComponent(label2nd).addComponent(label3rd)).addGroup(
            groupLayout.createParallelGroup().addComponent(textField)
                .addComponent(comboBox).addComponent(spinner)));
    groupLayout.setVerticalGroup(groupLayout.createSequentialGroup().addGroup(
        groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
            .addComponent(label1st).addComponent(textField)).addGroup(
        groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
            .addComponent(label2nd).addComponent(comboBox,
                GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE,
                GroupLayout.PREFERRED_SIZE)).addGroup(
        groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
            .addComponent(label3rd).addComponent(spinner)));
    panel.setLayout(groupLayout);
    Insets insets = new Insets(2, 2, 2, 2);
    panel.setBorder(new CompoundBorder(new TitledBorder("Form layout"),
        new EmptyBorder(insets)));
    return panel;
  }

  private Container createTextArea() {
    JTextArea textArea = new JTextArea(
        "This widget takes up all the remaining space "
            + "in the top-level layout.");
    textArea.setLineWrap(true);
    textArea.setRows(4);
    return new JScrollPane(textArea);
  }

  private Container createDialogButtons() {
    JPanel panel = new JPanel();
    JButton ok = new JButton("OK");
    JButton cancel = new JButton("Cancel");
    GroupLayout groupLayout = new GroupLayout(panel);
    groupLayout.setAutoCreateGaps(true);
    groupLayout.setHorizontalGroup(groupLayout.createSequentialGroup().addGap(
        0, 0, Short.MAX_VALUE).addComponent(ok).addComponent(cancel));
    groupLayout.setVerticalGroup(groupLayout.createParallelGroup()
        .addComponent(ok).addComponent(cancel));
    groupLayout.linkSize(ok, cancel);
    panel.setLayout(groupLayout);
    return panel;
  }

  public static void main(String[] args) {
    try {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (Exception e) {
      e.printStackTrace();
    }
    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        new BasicLayouts();
      }
    });
  }
}


PM MAIL   Вверх
Temdegon
Дата 27.1.2009, 02:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 7
Всего: 9



По-моему, цифры на скриншоте говорят о том, сколько потребляет виртуальная машина. А сколько памяти использует само приложение можно посмотреть с помощью входящих в JDK jvisualvm.exe или jconsole.exe. У меня эти утилиты показывают примерно 2.5 метра. Хотя я могу заблуждаться по неопытности...
Не поленился, влючил "отображение содержимого окна при перетаскивании". У меня окно ведет себя абсолютно нормально, как и все остальные окна в системе. Не лагает при перетаскивании и во время разворачивания во весь экран и изменения размеров. Хотя я точно помню, что раньше такие проблемы у меня были и меня это жутко раздражало. Скорее всего у меня не лагает из-за того что в винде использую оформление "Windows Classic". Недавно возился с DB-менеджером SQuirreL, написанном на Java. Там тоже ооочень сильно влияло то, какой L&F выбран.

Это сообщение отредактировал(а) Temdegon - 27.1.2009, 02:55
PM MAIL   Вверх
kamre
Дата 27.1.2009, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Temdegon @ 27.1.2009,  02:42)
По-моему, цифры на скриншоте говорят о том, сколько потребляет виртуальная машина. А сколько памяти использует само приложение можно посмотреть с помощью входящих в JDK jvisualvm.exe или jconsole.exe. У меня эти утилиты показывают примерно 2.5 метра. Хотя я могу заблуждаться по неопытности...

Конечно, цифры говорят именно о том, сколько у системы было забрано ресурсов. Также как и в случае с Qt4, память учтена с ее довольно толстыми загруженными библиотеками. И какая разница сколько потребляет сама JVM, а сколько именно Java программа? В итоге получается какой-то дикий overhead на JVM. Причем для Metal LAF потребление за пределы 35Мб не выходит (это уже нормально при изначальных 30Мб при старте программы).

Цитата(Temdegon @ 27.1.2009,  02:42)
Не поленился, влючил "отображение содержимого окна при перетаскивании". У меня окно ведет себя абсолютно нормально, как и все остальные окна в системе. Не лагает при перетаскивании и во время разворачивания во весь экран и изменения размеров. Хотя я точно помню, что раньше такие проблемы у меня были и меня это жутко раздражало. Скорее всего у меня не лагает из-за того что в винде использую оформление "Windows Classic". Недавно возился с DB-менеджером SQuirreL, написанном на Java. Там тоже ооочень сильно влияло то, какой L&F выбран.

Конечно, содержимое окна при перетаскивании должно быть включено. И, конечно, с оформлением "Windows Classic" будет работать быстрее, т.к. там рисовать нужно меньше. А вот на стандартных "Windows XP (Blue/Silver/Olive)" темах именно такое поведение как я и описал.

PM MAIL   Вверх
kemiisto
Дата 27.1.2009, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 5
Всего: 160



kamre, для начала ответьте на несколько вопросов.
1. Какая версия Qt: OpenSource или Comercial? Каким компилятором собран пример: VC+ или gcc из MinGW.
2. Какая версия Java? 
3. Почему сравниваете только под Windows? Я вот сейчас на MacOS запускал, оба примера смотряться как надо (в плане шрифты там, нативные виджеты, ...). Qt - 11 МБ, Java - 45 МБ. Думается мне, что и на Linux будет примерно тоже самое (вечерком проверу, если время будет). А то, что Java не ахти как работает под Windows - так я абсолютно уверен, что тут без MS не обошлось. 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
kamre
Дата 27.1.2009, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(kemiisto @ 27.1.2009,  12:45)

1. Какая версия Qt: OpenSource или Comercial? Каким компилятором собран пример: VC+ или gcc из MinGW.

А какая разница, исходники же одни? Использовалась OpenSource Qt 4.4 собранная MSVC 2008 Express.

Цитата(kemiisto @ 27.1.2009,  12:45)

2. Какая версия Java? 

Код

java version "1.6.0_11"
Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode, sharing)


Цитата(kemiisto @ 27.1.2009,  12:45)

3. Почему сравниваете только под Windows? Я вот сейчас на MacOS запускал, оба примера смотряться как надо (в плане шрифты там, нативные виджеты, ...). Qt - 11 МБ, Java - 45 МБ. Думается мне, что и на Linux будет примерно тоже самое (вечерком проверу, если время будет). А то, что Java не ахти как работает под Windows - так я абсолютно уверен, что тут без MS не обошлось.

Потому что Windows XP пока самая распространненая платформа на десктопах и ноутах (да и я буду ее использовать как минимум до тех пор пока новый комп не куплю, чтобы Vista/Win7 нормально ворочались). 
Про MacOS - ничего не скажу, не видал в живую. А там Java от SUN или от Apple (это совсем разные вещи вроде бы)? 
А на Linux c моей NVIDIA 7600GS дела с 2D графикой настолько плохи (тормоза-тормоза-тормоза), что он вообще в полном пролете (просто не юзабельно по сравнению с XP). Да и в нем "родной" GTK LAF тоже весьма косячный в SUN JRE. И кстати OpenJDK даже еще больше тормозит, чем SUN.

PM MAIL   Вверх
kemiisto
Дата 27.1.2009, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 5
Всего: 160



Цитата(kamre @  27.1.2009,  11:40 Найти цитируемый пост)
Потому что Windows XP пока самая распространненая платформа на десктопах и ноутах (да и я буду ее использовать как минимум до тех пор пока новый комп не куплю, чтобы Vista/Win7 нормально ворочались). 

Я к тому, что если писать под Windows - то уж лучше .NET. А если сравнивать Qt и Swing приложения, то уж тогда на всех платформах.

Цитата(kamre @  27.1.2009,  11:40 Найти цитируемый пост)
java version "1.6.0_11"
Java™ SE Runtime Environment (build 1.6.0_11-b03)
Java HotSpot™ Client VM (build 11.0-b16, mixed mode, sharing)

Очень жаль... У меня возможности сейчас посмотреть нету... Но если так дела обстоят, то плохо... smile 

Цитата(kamre @  27.1.2009,  11:40 Найти цитируемый пост)
Про MacOS - ничего не скажу, не видал в живую. А там Java от SUN или от Apple (это совсем разные вещи вроде бы)? 

От Apple.

Цитата(kamre @  27.1.2009,  11:40 Найти цитируемый пост)
Да и в нем "родной" GTK LAF тоже весьма косячный в SUN JRE. И кстати OpenJDK даже еще больше тормозит, чем SUN. 

Да, есть такое... Спору нет.

Это сообщение отредактировал(а) kemiisto - 27.1.2009, 15:47


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Kallikanzarid
Дата 9.2.2009, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Почитал тему маленько. ИМХО, хорошо бы проверять в тестах не только простые вычислительные задачи, но и, например, задачи по буфферизованному вводу-выводу, по коллекциям/контейнерам. Особенно меня интересует последний пункт, так как он по-разному реализован в JDK и STL.

Далее, почему в качестве компилятора C++ часто выступает VS6, в то время, как JVM используется последней версии? Давайте использовать либо ICC11, либо VS9, либо GCC.

Наконец, любопытно было бы сравнить производительность JVM и LLVM - как разные подходы конкурируют в плане потребления ресурсов.
PM MAIL   Вверх
EJack
Дата 10.2.2009, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Неправильно сравнивать платформу (Java) и библиотеку (Qt) непонятно что конкретно мерим. Это как сравнивать теплое с мягким.
И еще если Java взяла память это далеко не значит что вся память используется - скорее всего это оптимизация в плане для более быстрого выделения памяти и ухот от ее фрагментивности в памяти. Кроме того необходима память для работы сборщика мусора (за удобства надо платить).

Добавлено через 1 минуту и 4 секунды
А у меня дома ваш пример вообще не тормозит все летает - и работает все на висте все красиво!

Добавлено через 7 минут и 51 секунду
Да и посмотрите на IDEA достаточно приятная вещь и работает шустро - да там у них вроде свой L&F
PM MAIL   Вверх
LSD
Дата 10.2.2009, 13:19 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(Kallikanzarid @  9.2.2009,  16:36 Найти цитируемый пост)
Далее, почему в качестве компилятора C++ часто выступает VS6, в то время, как JVM используется последней версии? Давайте использовать либо ICC11, либо VS9, либо GCC.

Почему люди только советуют, как надо проводить тесты, но при этом никто их сам не желает создавать? Ну или хотя бы пересобрать уже существующие и прогнать заново?


--------------------
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   Вверх
Kallikanzarid
Дата 10.2.2009, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Как черновой вариант (на С++):

Код

#include <fstream>
#include <complex>
#include <list>
#include <algorithm>
#include <iterator>

using namespace std;
    
inline bool abs_less( const complex<double> &x, const complex<double> &y ) {
    return abs(x) < abs(y);
}

int main() {
    
    ifstream in( "in.txt" );
    ofstream out( "out.txt" );
    
    list< complex< double > > lst;
    copy( istream_iterator< complex< double > >( in ),
          istream_iterator< complex< double > >(),
          back_inserter( lst ) );
    lst.sort( &abs_less );
    copy( lst.begin(), lst.end(), ostream_iterator< complex< double > >( out, " " ) );
}



Пример in.txt:
Код

(1) (3) (2) (0.5, 100)


Если кто сделает что-то подобное на Java, используя стандартную библиотеку (не важно, как именно там выводится Complex), можем проверить производительность.
PM MAIL   Вверх
LSD
Дата 10.2.2009, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Хотелось бы описание алгоритма:
- входные данные ...
- требуется сделать ...
- на выходе должны получить ...



--------------------
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   Вверх
Kallikanzarid
Дата 10.2.2009, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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

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

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


 




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


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

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