Re[13]: Внимание, Java!
От: Lloyd Россия  
Дата: 14.07.10 11:41
Оценка:
Здравствуйте, legogogo, Вы писали:

L>>А ты расскажи, как подсчет ссылок поможет тебе в случае циклов.


L>А ты в курсе, что вопросом на вопрос отвечают только евреи?


Ну что ж, значит я еврей. С моей-то фамилией.

L>И по правилам хорошего тона сначала нужно ответить на вопрос и только потом задать свой?


Yes, sir.
Re[3]: Внимание, Java!
От: uhh  
Дата: 14.07.10 11:42
Оценка:
Здравствуйте, Eugeny__, Вы писали:

E__>А вот попробовал я сейчас аналог на джаве. Не забыв запустить на моей же машине и сишный вариант.


код не эквивалентен, кстати.

std::list хранит элементы списоком
ArrayList хранит элементы в массиве

Лучше сравнить std::list с LinkedList (хотя, должно получиться еще больше разницы)
Re[4]: Внимание, Java!
От: legogogo  
Дата: 14.07.10 11:45
Оценка:
Здравствуйте, uhh, Вы писали:

uhh>Лучше сравнить std::list с LinkedList (хотя, должно получиться еще больше разницы)


меньше должно получиться разницы. ArrayList выделяет буфер на 16 элементов и потом его увиличивает в два раза при каждом перераспределении, а std::list каждый раз обращается к своему внутреннему аллокатору за памятью.
Компьютер — это конечный автомат. Потоковое программирование нужно тем, кто не умеет программировать конечные автоматы (c) Алан Кокс
Re[5]: Внимание, Java!
От: uhh  
Дата: 14.07.10 11:47
Оценка:
Здравствуйте, legogogo, Вы писали:

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


uhh>>Лучше сравнить std::list с LinkedList (хотя, должно получиться еще больше разницы)


L>меньше должно получиться разницы. ArrayList выделяет буфер на 16 элементов и потом его увиличивает в два раза при каждом перераспределении, а std::list каждый раз обращается к своему внутреннему аллокатору за памятью.


проверил, получилось одинаково.

На моей машине (Q6600, WindowsXP)

C++ (g++ 3.4.5): 219, 80000
Java: 16, 80000
Re[14]: Внимание, Java!
От: dilmah США  
Дата: 14.07.10 11:51
Оценка:
L>Ну что ж, значит я еврей. С моей-то фамилией.

пример Баруха Обамского наглядно показывает, что даже негры могут принадлежать к этому племени.
Re[12]: Внимание, Java!
От: пыщьх http://rsdn_user.livejournal.com
Дата: 14.07.10 11:51
Оценка: -2
Здравствуйте, Lloyd, Вы писали:

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


L>>Расскажи тогда, как сборщик мусора в Java узнаёт какие объекты нужно удалят если подсчёт ссылок на эти объекты он не ведёт?


L>А ты расскажи, как подсчет ссылок поможет тебе в случае циклов.


Отдельный поток, строящий граф зависимостей и детектящий циклы. В дотнете такой же.
Если в языке нет явного оператора delete и необходимосты вызывать его для всего, кроме стековых переменных — то там есть счетчик ссылок. Третьего не дано.
Запретное обсуждение модерирования RSDN:
http://rsdn-user.livejournal.com/652.html
Re[6]: Внимание, Java!
От: legogogo  
Дата: 14.07.10 11:52
Оценка:
Здравствуйте, uhh, Вы писали:

uhh>C++ (g++ 3.4.5): 219, 80000

uhh>Java: 16, 80000

Значит в Java и LinkedList выделяет буфер, выход писать для std::list свой аллокатор который он скорее всего не будет использовать (это зависит от реализации STL) или искать другую реализацию STL. Причём аллокатор должен быть настроен на выделение памяти для небольших объектов, как у Александреску.
Компьютер — это конечный автомат. Потоковое программирование нужно тем, кто не умеет программировать конечные автоматы (c) Алан Кокс
Re[13]: Внимание, Java!
От: Lloyd Россия  
Дата: 14.07.10 11:57
Оценка:
Здравствуйте, пыщьх, Вы писали:

L>>А ты расскажи, как подсчет ссылок поможет тебе в случае циклов.


П>Отдельный поток, строящий граф зависимостей и детектящий циклы. В дотнете такой же.


Это уже не сборщик с подсчетом ссылок и в дотнете он не такой.

П>Если в языке нет явного оператора delete и необходимосты вызывать его для всего, кроме стековых переменных — то там есть счетчик ссылок. Третьего не дано.


Дано. Ссылка приведена, читайте.
Re[4]: Внимание, Java!
От: Eugeny__ Украина  
Дата: 14.07.10 12:03
Оценка:
Здравствуйте, CreatorCray, Вы писали:


E__>>А вот попробовал я сейчас аналог на джаве. Не забыв запустить на моей же машине и сишный вариант.

E__>>Итак, Pentium D 3,2 Ubuntu 10.04
E__>>Кто там сомневался в более успешном поведении управляемых языков в задачах с интенсивным выделением памяти?

CC>Ох. Как же вы, цветы жизни, достали уже.

CC>Хочешь я одним #include порву твои достижения на Java как уже было с С#?

Покажи, один #include это же несложно.

CC>Ну в самом деле, пора уже понимать что ты по факту сравнил щас generic аллокатор рантайма своей операционки и аллокатор Java рантайма.


На самом деле, здесь, имхо, больше убогость std:string.

И вообще, дай спокойно потроллить
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Re[7]: Внимание, Java!
От: Lloyd Россия  
Дата: 14.07.10 12:06
Оценка:
Здравствуйте, legogogo, Вы писали:

L>Значит в Java и LinkedList выделяет буфер, выход писать для std::list свой аллокатор который он скорее всего не будет использовать (это зависит от реализации STL) или искать другую реализацию STL. Причём аллокатор должен быть настроен на выделение памяти для небольших объектов, как у Александреску.


Тебя слово Linked в названии LinkedList на мысли не наводит? Как тут может помочь аллокатор?
Re[8]: Внимание, Java!
От: legogogo  
Дата: 14.07.10 12:14
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Тебя слово Linked в названии LinkedList на мысли не наводит? Как тут может помочь аллокатор?


Гы))
LinkedList предназначен для быстрой вставки и удаления элементов это подразумевает, что все расходы на выделение памяти из кучи нужно свести к нулю. Буфер для распределения заранее выделенной памяти единственное решение. Слово Linked тут ли означает, что не будет оверхеда при удалении элементов или вставки их в середину.
Компьютер — это конечный автомат. Потоковое программирование нужно тем, кто не умеет программировать конечные автоматы (c) Алан Кокс
Re[13]: Внимание, Java!
От: NikeByNike Россия  
Дата: 14.07.10 12:22
Оценка:
Здравствуйте, пыщьх, Вы писали:

L>>>Расскажи тогда, как сборщик мусора в Java узнаёт какие объекты нужно удалят если подсчёт ссылок на эти объекты он не ведёт?


L>>А ты расскажи, как подсчет ссылок поможет тебе в случае циклов.


П>Отдельный поток, строящий граф зависимостей и детектящий циклы. В дотнете такой же.

П>Если в языке нет явного оператора delete и необходимосты вызывать его для всего, кроме стековых переменных — то там есть счетчик ссылок. Третьего не дано.

Открой для себя такое понятие как сборщик мусора.
Пример для С++: http://rsdn.ru/forum/cpp/2992110.flat.aspx
Автор: NikeByNike
Дата: 18.06.08
Нужно разобрать угил.
Re[7]: Внимание, Java!
От: Eugeny__ Украина  
Дата: 14.07.10 12:28
Оценка: :)
Здравствуйте, пыщьх, Вы писали:



E__>>Предложите свой вариант этого кода на С++, который будет делать то же, но быстрее. Потом будем обсуждать.

П>Мой пример: реальная строка — объект со счетчиком ссылок (как в Java). String — просто обертка вокруг указателя, делающая InterlockedIncrement(&pStr->m_RefCount) и InterlockedDecrement(). Полная реализация будет около 10 кб. исходников и приводить ее полностью мне лень. Идея аналогична AddRef()/Release() в COM. За счет инлайновых конструкторов/деструкторов, ваш код скомпилируется в 7 раз по mov [ecx + offset], eax и lock add [ecx + OFFSET], 1 (если Data будет const String &, а не String). Производительность будет намного больше жабьей. Более конкретный пример нужен, или все ясно?

Не, все и так ясно.
Для банальной работы со строками требуется написать 10кб кода, потому что стандартная строка криво реализована. Шикарно.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Re[5]: Внимание, Java!
От: CreatorCray  
Дата: 14.07.10 12:31
Оценка:
Здравствуйте, Eugeny__, Вы писали:

E__>Покажи, один #include это же несложно.

#include "CrayLib/ThreadPoolAlloc.h"


E__>И вообще, дай спокойно потроллить

Ааа.. Ну, тролли, постараюсь не мешать.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[8]: Внимание, Java!
От: CreatorCray  
Дата: 14.07.10 12:31
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>>Значит в Java и LinkedList выделяет буфер, выход писать для std::list свой аллокатор который он скорее всего не будет использовать (это зависит от реализации STL) или искать другую реализацию STL. Причём аллокатор должен быть настроен на выделение памяти для небольших объектов, как у Александреску.


L>Тебя слово Linked в названии LinkedList на мысли не наводит? Как тут может помочь аллокатор?

Хе хе. А ведь на самом деле в некоторых случаях может помочь.
Например расположить данные рядом, что улучшит работу кэша.
Я как то прикручивал кастомный аллокатор к std::list который выделял зону и последовательно отдавал из неё блоки.
Разница в скорости прохода по такому списку была около 2.5 раз по сравнению с WinHeap аллокатором.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[8]: Внимание, Java!
От: пыщьх http://rsdn_user.livejournal.com
Дата: 14.07.10 12:34
Оценка:
Здравствуйте, Eugeny__, Вы писали:

E__>Здравствуйте, пыщьх, Вы писали:




E__>>>Предложите свой вариант этого кода на С++, который будет делать то же, но быстрее. Потом будем обсуждать.

П>>Мой пример: реальная строка — объект со счетчиком ссылок (как в Java). String — просто обертка вокруг указателя, делающая InterlockedIncrement(&pStr->m_RefCount) и InterlockedDecrement(). Полная реализация будет около 10 кб. исходников и приводить ее полностью мне лень. Идея аналогична AddRef()/Release() в COM. За счет инлайновых конструкторов/деструкторов, ваш код скомпилируется в 7 раз по mov [ecx + offset], eax и lock add [ecx + OFFSET], 1 (если Data будет const String &, а не String). Производительность будет намного больше жабьей. Более конкретный пример нужен, или все ясно?

E__>Не, все и так ясно.

E__>Для банальной работы со строками требуется написать 10кб кода, потому что стандартная строка криво реализована. Шикарно.
Стандартная строка реализована во времена, когда Java еще даже в проекте не было. А если хочется писать 10кб, юзайте всякие Boost и т.п. Плюс "работает медленнее, чем Java при копировании" не значет "тормознутая строка". Есть ряд других операций, где C++ будет быстрее.
Запретное обсуждение модерирования RSDN:
http://rsdn-user.livejournal.com/652.html
Re[9]: Внимание, Java!
От: CreatorCray  
Дата: 14.07.10 12:52
Оценка:
Здравствуйте, пыщьх, Вы писали:

E__>>Для банальной работы со строками требуется написать 10кб кода, потому что стандартная строка криво реализована. Шикарно.

П>Стандартная строка реализована во времена, когда Java еще даже в проекте не было.
Я тебе больше скажу: во многих версиях MSVC имплементация строк менялась.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[7]: Внимание, Java!
От: Eugeny__ Украина  
Дата: 14.07.10 13:10
Оценка:
Здравствуйте, Тот кто сидит в пруду, Вы писали:



E__>>Предложите свой вариант этого кода на С++, который будет делать то же, но быстрее. Потом будем обсуждать.


ТКС>Думаю, достаточно собрать ровно тот же код с помощью VC 2008 с комплектным STL. Скорее всего, он окажется заметно быстрее джава варианта.


Испытал на домашней машине. Win7 x64, VS 2008, конфигурация release. Для 80000 оказалось 30-32мс. Жабовский вариант на этой же машине — 23-27мс. Да, уже много лучше, но, все-таки, заметно быстрее чем у джавы не вышло, наоборот, пока не дотягивает.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Re[8]: Внимание, Java!
От: CreatorCray  
Дата: 14.07.10 13:32
Оценка:
Здравствуйте, Eugeny__, Вы писали:

ТКС>>Думаю, достаточно собрать ровно тот же код с помощью VC 2008 с комплектным STL. Скорее всего, он окажется заметно быстрее джава варианта.

E__>Испытал на домашней машине. Win7 x64, VS 2008, конфигурация release. Для 80000 оказалось 30-32мс. Жабовский вариант на этой же машине — 23-27мс. Да, уже много лучше, но, все-таки, заметно быстрее чем у джавы не вышло, наоборот, пока не дотягивает.
И это ещё мы не трогали стандартный аллокатор.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[8]: Внимание, Java!
От: Тот кто сидит в пруду Россия  
Дата: 14.07.10 13:49
Оценка:
Здравствуйте, Eugeny__, Вы писали:

E__>>>Предложите свой вариант этого кода на С++, который будет делать то же, но быстрее. Потом будем обсуждать.


ТКС>>Думаю, достаточно собрать ровно тот же код с помощью VC 2008 с комплектным STL. Скорее всего, он окажется заметно быстрее джава варианта.


E__>Испытал на домашней машине. Win7 x64, VS 2008, конфигурация release. Для 80000 оказалось 30-32мс. Жабовский вариант на этой же машине — 23-27мс. Да, уже много лучше, но, все-таки, заметно быстрее чем у джавы не вышло, наоборот, пока не дотягивает.


Значит надо еще какие читы включить, раз строки недостаточно оказалось. Например, можно поменять list<foo> на list<foo*> — ибо копирование класса foo должно было получиться довольно дорогое, а в джава примере никаких копирований нет.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.