Re[13]: хочу невозможного
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 09.11.07 12:07
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>А нельзя ли прочитать внимательно, что я написал, прежде чем второй раз вольные фантазии городить ? Вот здесь, в конце.

PD>http://www.rsdn.ru/forum/message/2723755.1.aspx
Автор: Pavel Dvorkin
Дата: 09.11.07

Очень внимательно прочитал и ждал описания конкретики тестов (см. ниже).

PD>На всякий случай повторяю

[skipped]
Вас там ниже Cyberax спросил, как именно вы запускаете тесты: пачка из N-тестов должна запускать в рамках одной виртуальной машины, а не каждый тест отдельно. Динамическая компиляция итеративный процесс выполняемый JIT-ом, который накапливает и использует для оптимизации информацию о вашей программе. Ждал с нетерпением ответа на тот вопрос, но увы, его не последовало.

Да и вообще, прочитав статьи Гетца, ссылки на которые давал вам выше, про тестирование производительности на управляемых платформах, начинаешь очень иронично относиться к любым таким попыткам... тем более людей, имеющих только опыт программирования на языках статической компиляции.

PD>P.S. Вообще, если тебя раздражают мои вопросы — можно и не отвечать вообще. Я не флейма ради эту дискуссию затеял, мне реальный ответ нужен.

Меня вовсе не раздражает, а несколько забавляет, как вам множество раз говорят одно и тоже, а вы упорно это игнорируете.
Re[10]: хочу невозможного
От: Pavel Dvorkin Россия  
Дата: 09.11.07 12:08
Оценка: :)
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, Andrei N.Sobchuck, Вы писали:


B>Ну, о чем собственно уважаемому Павлу Дворкину и твердят с начала топике. Что оптимизации GC через параметры будет гораздо эффективней всяких выдумок на уровне кода.


Уважаемый Павел Дворкин ничего против этого не имеет, но , насколько я понимаю, эта самая оптимизация коснется не только этой части (которая в конце концов есть только 1% от суммарного времени, если не меньше), но и всей системы в целом. И сейчас я просто не готов ни оценить все это, ни решить, насколько такое допустимо. А за совет спасибо.
With best regards
Pavel Dvorkin
Re[14]: хочу невозможного
От: Pavel Dvorkin Россия  
Дата: 09.11.07 12:20
Оценка:
Здравствуйте, rsn81, Вы писали:

R>Вас там ниже Cyberax спросил, как именно вы запускаете тесты: пачка из N-тестов должна запускать в рамках одной виртуальной машины, а не каждый тест отдельно.



>Динамическая компиляция итеративный процесс выполняемый JIT-ом, который накапливает и использует для оптимизации информацию о вашей программе. Ждал с нетерпением ответа на тот вопрос, но увы, его не последовало.


for (Integer test = 1; test <= 200; test++) {
file_name = "D:\\tester\\XMLData\\" + test.toString() ;
File in = new File(file_name);
test(in);
}

Достаточно на этот раз ясно или нет ?

R>Да и вообще, прочитав статьи Гетца, ссылки на которые давал вам выше, про тестирование производительности на управляемых платформах, начинаешь очень иронично относиться к любым таким попыткам... тем более людей, имеющих только опыт программирования на языках статической компиляции.


Ну если так, то ответь мне на вопрос, который я задал здесь. Предположение Cyberax о HotSpot, я полагаю, отметено, вот и ответь.

http://www.rsdn.ru/forum/message/2723683.1.aspx
Автор: Pavel Dvorkin
Дата: 09.11.07


На всякий случай повторяю

И еще одно я сделал. Нашел некий SAX piccolo (http://piccolo.sourceforge.net/), который, как там утверждается, быстрее Xerces. Попробовал его. В среднем быстрее, но на некоторых образцах раза в 3-4 медленнее, причем нестабильно : пропускаю тесты один раз — медленнее, еще раз — нормально. Из-за чего ? Я могу отнести это только на какие-то проблемы с выделением/освобождением памяти, поскольку все остальное без изменений.
With best regards
Pavel Dvorkin
Re[15]: хочу невозможного
От: Cyberax Марс  
Дата: 09.11.07 12:26
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Ну если так, то ответь мне на вопрос, который я задал здесь. Предположение Cyberax о HotSpot, я полагаю, отметено, вот и ответь.

А как со статистикой от GC?

Ну и наконец: используй профайлер.
Sapienti sat!
Re[12]: хочу невозможного
От: Pavel Dvorkin Россия  
Дата: 09.11.07 12:31
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Если смотреть на это: http://www.xml.com/pub/a/2007/05/09/xml-parser-benchmarks-part-1.html , то http://woodstox.codehaus.org/ самый быстрый.


Попробовал. В варианте собственно разбора (выдать список всех имен по механизму getNext()) работает примерно на 50% быстрее чем Xerces SAX с его callback. Любопытно и даже очень. Если это удастся прикрутить к иерархии классов без серьезных затрат времени, то будет просто замечательно. Большое спасибо.
With best regards
Pavel Dvorkin
Re[16]: хочу невозможного
От: Pavel Dvorkin Россия  
Дата: 09.11.07 12:34
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>Ну если так, то ответь мне на вопрос, который я задал здесь. Предположение Cyberax о HotSpot, я полагаю, отметено, вот и ответь.

C>А как со статистикой от GC?

Пока никак. Незнаком я с этим в Яве. Если можно, ткни куда смотреть.

C>Ну и наконец: используй профайлер.


То же самое. Вот в Visual C++ 6.0 я на нем собаку съел (а в VS 7 они его, паразиты, убрали).
With best regards
Pavel Dvorkin
Re[17]: хочу невозможного
От: Cyberax Марс  
Дата: 09.11.07 12:50
Оценка: 16 (1)
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>>>Ну если так, то ответь мне на вопрос, который я задал здесь. Предположение Cyberax о HotSpot, я полагаю, отметено, вот и ответь.

C>>А как со статистикой от GC?
PD>Пока никак. Незнаком я с этим в Яве. Если можно, ткни куда смотреть.
Самое простое: http://rsdn.ru/Forum/Default.aspx?mid=2724014&amp;flat=0
Автор: Andrei N.Sobchuck
Дата: 09.11.07


C>>Ну и наконец: используй профайлер.

PD>То же самое. Вот в Visual C++ 6.0 я на нем собаку съел (а в VS 7 они его, паразиты, убрали).
Bottleneck'и, в принципе, почти все профиляторы нормально могут. Мне больше всего пока вот этот нравится: http://www.yourkit.com/
Sapienti sat!
Re[11]: хочу невозможного
От: Blazkowicz Россия  
Дата: 09.11.07 12:58
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Уважаемый Павел Дворкин ничего против этого не имеет, но , насколько я понимаю, эта самая оптимизация коснется не только этой части (которая в конце концов есть только 1% от суммарного времени, если не меньше), но и всей системы в целом. И сейчас я просто не готов ни оценить все это, ни решить, насколько такое допустимо. А за совет спасибо.

Это кстати паршиво, выходит конкретно тюнить GC под твое решение смысла нет. Остается только профайлить.
Re[18]: хочу невозможного
От: Pavel Dvorkin Россия  
Дата: 09.11.07 13:00
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>>>Ну если так, то ответь мне на вопрос, который я задал здесь. Предположение Cyberax о HotSpot, я полагаю, отметено, вот и ответь.

C>>>А как со статистикой от GC?
PD>>Пока никак. Незнаком я с этим в Яве. Если можно, ткни куда смотреть.
C>Самое простое: http://rsdn.ru/Forum/Default.aspx?mid=2724014&amp;flat=0
Автор: Andrei N.Sobchuck
Дата: 09.11.07


Я тебе сегодня уже надоел со своими дилетантскими вопросами, но куда эти опции в Eclipse ставить и что с ними дальше делать ? Попробовал в VM settings — ничего не выдается вроде никуда
With best regards
Pavel Dvorkin
Re[19]: хочу невозможного
От: Blazkowicz Россия  
Дата: 09.11.07 13:02
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Я тебе сегодня уже надоел со своими дилетантскими вопросами, но куда эти опции в Eclipse ставить и что с ними дальше делать ? Попробовал в VM settings — ничего не выдается вроде никуда


Зависит от используемой реализации JVM и её версии.
Re[20]: хочу невозможного
От: Pavel Dvorkin Россия  
Дата: 09.11.07 13:10
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>Я тебе сегодня уже надоел со своими дилетантскими вопросами, но куда эти опции в Eclipse ставить и что с ними дальше делать ? Попробовал в VM settings — ничего не выдается вроде никуда


B>Зависит от используемой реализации JVM и её версии.


Вопрос снят. По крайней мере удалось в файл вывести
With best regards
Pavel Dvorkin
Re[9]: хочу невозможного
От: Pavel Dvorkin Россия  
Дата: 09.11.07 13:27
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Здравствуйте, Blazkowicz, Вы писали:


B>> тюнинг в создании объектов не более чем 0.1%


ANS>Зато тюнинг GC может дать на много больше. Для начала советую включить опции "-XX:+PrintGCDetails -XX:+PrintGCTimeStamps". Или можно включить "-XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime". Я не знаю какая норма отношения StoppedTime/ConcurrentTime, но если оно больше 5% то стопудово можно тюнить.


Попробовал "-XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime". Вот несколько строк

Application time: 0.0480905 seconds
0.106: [GC 511K->144K(1984K), 0.0035792 secs]
Total time for which application threads were stopped: 0.0038552 seconds
Application time: 0.0359529 seconds
0.145: [GC 656K->161K(1984K), 0.0019033 secs]
Total time for which application threads were stopped: 0.0021394 seconds

А вообще таких наборов строк штук 100. Почему, если не секрет ?

Соотношение , как видно, больше 5%, хоть и не сильно. Но оно примерно то же что у меня, что в примере от http://woodstox.codehaus.org/ я и его попробовал (со своим файлом).
With best regards
Pavel Dvorkin
Re[10]: хочу невозможного
От: Cyberax Марс  
Дата: 09.11.07 13:34
Оценка: +1
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>А вообще таких наборов строк штук 100. Почему, если не секрет ?

Это вполне нормально — собирается куча для новых объектов ("Эдем"). Она небольшая, поэтому сборка идет часто.

PD>Соотношение , как видно, больше 5%, хоть и не сильно. Но оно примерно то же что у меня, что в примере от http://woodstox.codehaus.org/ я и его попробовал (со своим файлом).

GC надо под конкретную задачу настраивать (на уже готовом приложении), причем микротесты часто ведут себя совсем по-другому, чем настоящее приложение.

Я бы лично пока дальше копал в направлении оптимизации работы с XML.
Sapienti sat!
Re[10]: хочу невозможного
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 09.11.07 13:36
Оценка: 14 (1)
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>А вообще таких наборов строк штук 100. Почему, если не секрет ?


Молодое поколение (new gen) собирается часто.

Попробуй теперь с "-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution" и давай эту инфу сюда. На основании TenuringDistribution можно увеличить/уменьшить молодое поколение. Скажу сразу, правил я не знаю, всё эмпирическим путём

PD>Соотношение , как видно, больше 5%, хоть и не сильно. Но оно примерно то же что у меня, что в примере от http://woodstox.codehaus.org/ я и его попробовал (со своим файлом).


Если машина многоголовая, то можно включить параллельный коллектор "-XX:+UseParallelGC".
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[12]: хочу невозможного
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 09.11.07 13:37
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

PD>>которая в конце концов есть только 1% от суммарного времени, если не меньше

B>Это кстати паршиво, выходит конкретно тюнить GC под твое решение смысла нет. Остается только профайлить.

1% это твоёо
Автор: Blazkowicz
Дата: 09.11.07
предположение По факту всё может быть веселее.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[11]: хочу невозможного
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 09.11.07 13:39
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Я бы лично пока дальше копал в направлении оптимизации работы с XML.


Если выгода от оптимизации работы с XML 30%, а от оптимизации GC от силы 2%, то вывод очевиден. В принципе согласен — на микротестах тюнить GC смысла нет.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[13]: хочу невозможного
От: Blazkowicz Россия  
Дата: 09.11.07 13:49
Оценка: +1
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>1% это твоёо
Автор: Blazkowicz
Дата: 09.11.07
предположение По факту всё может быть веселее.

Если ты перечитаешь весь топик, то поймешь, что Павел разрабатывает решение в рамках большого работающего проекта. Работающего в той же JVM. Так вот тюнить каким-то образом GC под решение Павла смысла вообще нет. Так как в совокупности с остальной системой нужен будет совершенно новый анализ и совсем другие настройки.
Re[11]: хочу невозможного
От: Pavel Dvorkin Россия  
Дата: 09.11.07 13:51
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Попробуй теперь с "-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution" и давай эту инфу сюда. На основании TenuringDistribution можно увеличить/уменьшить молодое поколение. Скажу сразу, правил я не знаю, всё эмпирическим путём


Спасибо. Сделаю, но не сегодня. Поздно уже. Кроме того, меня сейчас гораздо больше заинтересовал эффект с 50% в SATx (http://www.rsdn.ru/forum/message/2724242.1.aspx
Автор: Pavel Dvorkin
Дата: 09.11.07
). В этом направлении и буду копать.
With best regards
Pavel Dvorkin
Re[7]: хочу невозможного
От: Аноним  
Дата: 09.11.07 20:26
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>В общем, суть задачи предельно проста. Есть XML, заведомо валидный, проверка не требуется. Есть XSD, описывающий его схему, тоже валидный. Необходимо из XML создать экземпляр класса Java и обратно. И как можно быстрее.


Тебе ссылку http://javolution.org/api/javolution/xml/package-summary.html#package_description я зачем давал? Ты даже не удосужился попробовать. Вот тесты: http://javolution.org/doc/benchmark.html
Re[8]: хочу невозможного
От: Pavel Dvorkin Россия  
Дата: 12.11.07 06:03
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>В общем, суть задачи предельно проста. Есть XML, заведомо валидный, проверка не требуется. Есть XSD, описывающий его схему, тоже валидный. Необходимо из XML создать экземпляр класса Java и обратно. И как можно быстрее.


А>Тебе ссылку http://javolution.org/api/javolution/xml/package-summary.html#package_description я зачем давал? Ты даже не удосужился попробовать.


А ты сам ее пробовал ? Если да, объясни, что я не так делаю.
По ссылке есть пример. В примере используются классы, которые не описаны, так что я его непосредственно пропустить не мог. Сделал по образцу простенький тест


package test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

import javolution.xml.XMLBinding;
import javolution.xml.XMLFormat;
import javolution.xml.XMLObjectReader;
import javolution.xml.XMLObjectWriter;
import javolution.xml.XMLSerializable;
import javolution.xml.stream.XMLStreamException;

public class Graphic implements XMLSerializable {
    static final long serialVersionUID = 1;
    private String str;
     
    public Graphic() {
        str = "test";
    }
    // Default XML format with name associations (members identified by an unique name).
    // See XMLFormat for examples of positional associations.
    protected static final XMLFormat<Graphic> XML = new XMLFormat<Graphic>(Graphic.class) {
         public void write(Graphic g, OutputElement xml) throws XMLStreamException {
             xml.add(g.str, "str", String.class);
         }
         public void read(InputElement xml, Graphic g) throws XMLStreamException {
             g.str = xml.get("str");
        }
    };
    public static void main(String[] args) {
        XMLBinding binding = new XMLBinding();
        binding.setAlias(Graphic.class, "Graphic");
        binding.setClassAttribute("type"); // Use "type" instead of "class" for class attribute.
      
        // Writes the area to a file.
        try {
        Graphic g = new Graphic();
        XMLObjectWriter writer = XMLObjectWriter.newInstance(new FileOutputStream("C:/area.xml"));
        writer.setBinding(binding); // Optional.
        writer.setIndentation("\t"); // Optional (use tabulation for indentation).
        writer.write(g, "Graphic", Graphic.class);
        writer.close(); 

        // Reads the area back
        XMLObjectReader reader = XMLObjectReader.newInstance(new FileInputStream("C:/area.xml"));
        reader.setBinding(binding);
        Graphic g1 = reader.read("Graphic", Graphic.class);
        System.out.println(g1.str);
        reader.close();
        }
        catch (XMLStreamException e) {
            e.printStackTrace();
        }
        catch (FileNotFoundException e) {}
        
        
    }
        
}


Писать — пишет, при чтении выдает

javolution.xml.stream.XMLStreamException: Cannot retrieve class (class attribute not found)
at javolution.xml.XMLBinding.readClassAttribute(Unknown Source)
at javolution.xml.XMLFormat$InputElement.get(Unknown Source)
at test.Graphic$1.read(Graphic.java:28)
at test.Graphic$1.read(Graphic.java:1)
at javolution.xml.XMLFormat$InputElement.get(Unknown Source)
at javolution.xml.XMLFormat$InputElement.get(Unknown Source)
at javolution.xml.XMLObjectReader.read(Unknown Source)
at test.Graphic.main(Graphic.java:48)
With best regards
Pavel Dvorkin
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.