На главную страницу AlgoNet В сотрудничестве с ZDNet
АРХИВ СТАТЕЙ 2003-11-17 на главную / новости от 2003-11-17
AlgoNet.ru
поиск

 

Место для Вашей рекламы!

 

Все новости от 17 ноября 2003 г.

Java: лучшие годы впереди

Тринадцать лет назад 13 сотрудников Sun Microsystems взялись за решение амбициозной задачи — определить, какой будет «следующая волна эволюции вычислительной техники».

Конечно, подобный вопрос задавали и раньше — но редко отвечали на него идеей столь же революционной, как та, которую впоследствии предложила эта команда. Спустя пять лет, наполненных мыслями и предложениями, группа явила миру технологию Java — первый в истории коллективно разработанный язык программирования корпоративного уровня.

Появился он как нельзя более кстати; в это же время вставала на ноги другая многообещающая технология — интернет. Мало кто помнит HotJava. То был первый браузер, поддерживающий апплеты — компактные загружаемые в браузер программы. Эти апплеты могли превращать статические HTML-страницы в замечательные приложения типа интерактивных шахмат, многопользовательских чатов или систем биржевой торговли. Со временем язык Java стал золотым стандартом серверного ПО; однако многие свои основные достоинства, в том числе безопасность, переносимость и сетевую поддержку, он унаследовал по клиентской линии.

Эти свойства совпадали с потребностями интернета, и Java быстро превратился в стандарт де-факто языка программирования для интернета и корпоративных вычислений. Он стремительно распространялся, изменяя облик вычислительной техники и нашей интернет-жизни. Покупая книгу в онлайне, продавая акции через интернет-брокера или извлекая наличные из банкомата, вы, скорее всего, пользуетесь Java.

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

Несомненно, на этот счет имеется множество мнений, но ясно одно: чтобы усилить свою центральную роль в вычислительной технике, Java должен стать проще. Главной причиной успеха Java на предприятии было появление редакции Java 2 Enterprise Edition, широко известной как J2EE.

J2EE давал такие возможности, о которых каждый разработчик мог только мечтать. Но с мощностью пришла и сложность. Если все спецификации J2EE составить вместе, ими можно заставить метровую полку. Мне трудно представить, что на моем веку корпоративная технология станет «простой», но она может — и должна — стать проще. Этот язык обязан стать проще, чтобы добиться массового признания при сохранении тех преимуществ, которые делают его столь мощным.

Либо J2EE решит эту проблему и усилит свою центральную роль в вычислительной технике, либо столкнется с перспективой стать латынью языков программирования — страницей истории с малым, а то и нулевым практическим применением. Я не верю в возможность последнего: слишком уж много у J2EE достоинств и слишком много за ним стоит великих умов. Но чтобы выжить, ему придется преодолеть два препятствия.

Во-первых, процесс разработки на J2EE остается настолько сложным, что дается лишь самым квалифицированным и опытным программистам. Учитывая всеобщую потребность в сокращении расходов и текущее положение большинства ИТ-разработчиков, эта сложность может оказаться роковой. Во-вторых, чтобы J2EE отвечал потребностям заказчиков, оставался впереди конкурирующих технологий и сохранял свой статус стандарта, необходимо ускорить темпы коммерциализации J2EE-инноваций.

Точно так же, как простота VisualBasic вызвала к жизни волну разработок приложений для Windows, рутинные задачи программирования на J2EE должны перестать быть прерогативой элиты, их следует сделать более массовыми. Хорошая новость в том, что это уже происходит. Появляются инструменты, которые предлагают визуальную структуру разработчикам традиционных корпоративных приложений, использующим J2EE для автоматизации повторяющихся процедур, тогда как специалистам высшей пробы остается более сложное программирование.

Упрощение разработки на J2EE помогает сделать этот язык доступным для обширного и принципиально нового класса разработчиков — это существенно сокращает общее время разработки, расширяет степень участия программистов разных специальностей и в конечном счете ведет к экономии предприятиями большого количества времени и денег.

Не менее важно преодолеть второе препятствие — низкую скорость, с которой J2EE-инновации становятся достоянием заказчиков. Каким бы простым ни был J2EE, он отстанет от рынка, если предлагаемые им темпы инноваций будут черепашьими. Кто-нибудь наверняка предложит что-то более быстрое. Пусть оно будет не лучше, зато быстрее. А быстрота решает все.

Я уверен, что J2EE может задавать темп, но для этого те, кто контролирует стандарты, должны внести в процесс их внедрения процедурные изменения. В рамках Java Community Process (JCP) конкуренты, снимая с рук боевые перчатки, вырабатывают — во благо заказчиков — стандартизованную технологию, прежде чем вывести ее на рынок.

Для этого чрезвычайно важного процесса требуется время — часто один-два года. Сейчас в JCP мы сначала стандартизуем технологии, а затем уже их внедряем. Между тем требования заказчиков растут, и поставщики вынуждены выпускать то, что считается проприетарной технологией, хотя на самом деле эта технология просто опередила процесс стандартизации. Знаменательным прецедентом служит сам веб. Он приобрел широкую популярность задолго то того, как был стандартизован организацией World Wide Web Consortium (W3C). Точно так же веб-сервисы сначала появились в составе коммерческих предложений, а затем уже были формально стандартизованы.

Этот подход обеспечивает создание стандартов, практически полезных заказчикам, причем гораздо быстрее, чем при существующей модели. Хотя без этих строгих процессов J2EE не стал бы тем, что он есть, теперь их необходимо поменять местами: сначала инновации, внедрение, а затем уже стандартизация.

Восьмилетие J2EE было одним из самых успешных в ИТ-отрасли. Если усилия в направлении уменьшения сложности и ускорения инноваций и стандартизации продолжатся, следующие восемь лет, я уверен, станут еще успешнее.

Биография

Тод Нильсен является исполнительным вице-президентом BEA Systems. До этого он был генеральным директором софтверной компании Crossgain, приобретенной BEA в июле 2001 года. До Crossgain Нильсен 12 лет проработал в Microsoft, где занимал пост вице-президента отделения платформ.

 В продолжение темы:
2003-12-04   Sun давит на Windows системой Java Desktop за 25 долл.
2004-02-06   Sun сделает тигра Java-программирования совсем ручным
Обсуждение и комментарии
V
17 Nov 2003 4:47 PM
> исполнительным вице-президентом BEA Systems
То что он исполнительный вице-президент видно сразу ;) Если они за 8 лет не смогли довести Java до ума, то и следующие 10 будет то-же самое.
 

V
17 Nov 2003 5:22 PM
При чем здесь J2EE ? Java похоронят принципиальные недостатки виртуальной машины.
 

Vitaliy
17 Nov 2003 5:26 PM
2 V:
Можно по подробней о "принципиальных недостатках"?
 

V
17 Nov 2003 5:43 PM
2Vitaly :
Можно конечно, только я уже писал, что Java нет у меня сейчас. Хотя могу поставить 1.3.1 и на примере этой версии можем обсудить :) У вас хотя бы одна 2-х процессорная машина имеется, для одной из проверок ? За одно и проверим мои выводы ;)
 

done
17 Nov 2003 5:56 PM
2V
речь идет о принципиальных недостатках абстрактной виртуальной машины
а не ее реализации в виде JVM
так что просим расскажите нам пожалуйста
 

V
17 Nov 2003 6:26 PM
Хорошо, можно принципиальных. Начнем с наследования. В Java все обьекты имеют предка Object и все обьекты расходуют дополнительный обьем памяти. В случае 1.3.1 "расход" на наследование около 12 байт. Если создаем класс из скажем 10 полей Integer то дополнительные расходы составят 120 байт. при 100000 записей в массиве получчаем 12Мб "бесполезно" удерживаемых наследованием. Та же структура в "C" 10 полей по 4 байта = 40 байт. 2 третих памяти расходуется "впустую". При простом присваивании обьектов, копируется не только полезная информация но и те 12 байт.
 

-
17 Nov 2003 6:56 PM
2V: 4-й байтный int спасет отца русской демократии.
 

V
17 Nov 2003 7:16 PM
Данные бывают только int ? Date, String вы не используете ?
 

-
17 Nov 2003 7:25 PM
2V: я использую даже массивы. Потеря 12 байт на мегабайтный массив меня не потревожит. ;)
 

V
17 Nov 2003 7:37 PM
2- Массивы чего ?
> 2V: 4-й байтный int спасет отца русской демократии.
Да и как вы будете работать с такими данными ? Коллекции, листы, map, Swing, требуют обьекты :) Будете писать все сами для int ?
 

Коляныч
17 Nov 2003 7:38 PM
>Java: лучшие годы впереди <
может все-таки позади? - я замечаю, что окружающие жабщики еще с прошлого года дотнетом заинтересовались, а некоторые уже переехали, особенно которые вебщики
 

CrazyMax
17 Nov 2003 7:48 PM
2V:
Я не совсем понимаю, зачем нам нужен
...
Integer ints[];
...
:)
это какой-то бэйсиковский стиль мысли.
Integer содержит в себе функциональность для работы с int вроде перевода в число, из числа и т.п. Но за элементарным типом int сам Integer не стоит. Это бред.
int ints[]=new int[100000];
вовсе не породит 12 мегабайт лишней памяти. это.. мягко говоря, заблуждение
 

CrazyMax
17 Nov 2003 7:52 PM
2V: по поводу векторов. Если Вы имеете в виду java.util.Vector, то да. Каждый элемент вектора должен быть Object. Но, теперь по поводу того других языков. Вектор - это не массив и там. Там тоже каждый элемент должен содержать минимум один, а лучше 2 указателя. Т.е. тот же прирост размера указателя к каждому элементу массива. Так при чем тут Java? :) Это такая природа векторов :)
 

CrazyMax
17 Nov 2003 7:53 PM
2Коляныч:
окружающие меня 11 специалистов дружно пересели с ASP на J2EE и весьма довольны результатом.
 

V
17 Nov 2003 7:54 PM
2- : Я слышал что есть ограничение для виртуальной машины. Максимальный обьем памяти, который может быть выделен для виртуальной машины равен 4 обьемам оперативной памяти. Вполне возможно, что этот предел был установлен именно из за лишних данных, которые в свопе приводят к очень плохим результатам. Теперь представьте, вы должны будете следить, чтобы виртуальная машина не вышла за пределы. И как только будет превышен обьем, срочно бежать в магазин за памятью ;)
 

V
17 Nov 2003 7:56 PM
2CrazyMax :
> весьма довольны результатом.
Пока у вас комнатная программа, обьем данных небольшой, вы будете довольны.
 

CrazyMax
17 Nov 2003 7:56 PM
По поводу прогресса и лучших лет: я приведу самый самый просто пример. Было дело и баловался я XML-ем. Для чего написал очень очень простой очень компактный и примитивный XML SAX парсер. Тестировал ради интереса его на jre от 1.1.8 до 1.4.2 под win32 и linux. Хотя операционная система тут роли не играет. Скорость работы с теми же строками (String) вырастает от 800кб\секунду до 7 мегабайт в секунду на одной и той же машине.
 

CrazyMax
17 Nov 2003 7:57 PM
2V:
"
Я слышал что есть ограничение для виртуальной машины. Максимальный обьем памяти, который может быть выделен для виртуальной машины равен 4 обьемам
"
слухами полнится мир. это не совсем правда. хотя документально подтвердить могу лишь сделав ссылку на спецификацию конкретной jvm
 

CrazyMax
17 Nov 2003 7:59 PM
2V:
исходный текст "компактной" программы около 6 мегабайт. Программа постоянно оперирует данными обьемом от 1 до 100 мегабайт. Работает как клиентская часть. Пока все довольны.
Про переход с ASP на J2EE - пока сказать не могу - проект только начат.
 

V
17 Nov 2003 8:00 PM
Собственно, это только начало. Думаю окружающим необходимо время чтобы подумать. Еще есть возражения по поводу "наследования" ?
 

CrazyMax
17 Nov 2003 8:02 PM
По поводу .Net и его противостояния с Java... ну кроме смешного лозунга "что .Net работает на любых windows системах" :))) То пока опытные разработчики считают .Net очень сырой технологией. Java более пригодна в этом плане для разработки
 

V
17 Nov 2003 8:02 PM
2CrazyMax : Название вашего предприятия и выполняемую задачу назовите :) JDBC в Postgres занимал 2,5М ( если не ошибаюсь, давно это было)
 

CrazyMax
17 Nov 2003 8:03 PM
2V:
я высказал свои возражения. опасения по поводу лишних 12 байт на каждый int в int[] - опять же мягко говоря надуманы. Скорее всего из-за плохого знакомства с элементарными пастулатами этой технологии :)
 

CrazyMax
17 Nov 2003 8:05 PM
"Название вашего предприятия и выполняемую задачу назовите :)"
Название предприятия вам ничего не скажет. А приложение - Java+Swing+MySQL+Oracle+ еще много много всего от J2EE особенно из Graphics2D, Java3D и прочее.. Тема: ПО для научных исследований.
 

V
17 Nov 2003 8:12 PM
2 CrazyMax :
Считаете возможным - разрабатывайте на Java. 100 мегабайт это не обьем. Сейчас десктоп 512М оперативной.
 

CrazyMax
17 Nov 2003 8:14 PM
2V:
Чтобы не приводить тут то, что уже давно обьяснено и разобрано на составляющие. Поищите статьи Java vs C++ и C++ vs Java. Помниться такие статьи были на javapower.ru - но сейчас там совсем другое. А жаль.
 

CrazyMax
17 Nov 2003 8:15 PM
2V:
:) У вас есть еще аргументы кроме как вспомнить мою национальность? :) Еще интересные шутки вроде наследования int :)
 

V
17 Nov 2003 8:19 PM
2CrazyMax :
> Помниться такие статьи были на javapower.ru - но сейчас там совсем другое.
Статьи поменялись после бума 1999, если вы не заметили.

> Еще интересные шутки вроде наследования int :)
Кому-то смешно кроме вас ? Какие шутки, какое наследование int ?
 

CrazyMax
17 Nov 2003 8:23 PM
2V:
Дальше... Я жду разумного продолжения:
" При чем здесь J2EE ? Java похоронят принципиальные недостатки виртуальной машины. "
 

V
17 Nov 2003 8:45 PM
2 CrazyMax :
> http://lib.juga.ru/article/articleview/142/1/3/
> http://lib.juga.ru/article/articleview/139/1/3/
Не нашел и слова о Object, наследовании, памяти. Статья старая. Могу лишь заметить, Corel на Java где ? ;)

 

CrazyMax
17 Nov 2003 9:10 PM
Corel наверное постарше явы будет :) или как минимум одногодки :) И зачем его писать на яве если он есть на том, на чем он есть :)
 

-
17 Nov 2003 9:40 PM
Это не человек, это бот какой-то.

2V: Своп это всегда плохо. Нет ни одной программы нормально работающей в свопящемся режиме.

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

eXOR
18 Nov 2003 6:41 AM
2 -:
> куча ненужного мусора, который можно и не держать в памяти.
Хм. А можно узнать что это за задачи такие?
 

Crimson King
18 Nov 2003 9:09 AM
2 V:
"...JDBC в Postgres занимал 2,5М ( если не ошибаюсь, давно это было)..."
Наверное, действительно давно. :-)))
pg73jdbc3.jar - 184505 байт.
Кстати, сейчас вот возникла задачка написать небольшую программку с БД, то что обычно делается в Access. Нашел SQL-движок, называется hsqldb (http://hsqldb.sourceforge.net). Пока очень впечатляет: почти полный SQL-92, виды, обеспечение целостности, хранимые процедуры (на Яве конечно), транзакции, работает как сетевой демон, веб-сервер, или полностью в памяти. Все это умещается в 260 кб jar(!!!). Как уверяют разработчики, еще и очень быстро работает.
Может кто сталкивался, есть у кого впечатления? А то уж слишком хорошо. :-)))
 

V
18 Nov 2003 11:24 AM
2Crimson King :
> pg73jdbc3.jar - 184505 байт.
Я говорил о исходном коде. Приходилось в нем разбираться когда-то ( таймаут соединения).

2 CrazyMax :
> И зачем его писать на яве если он есть на том, на чем он есть :)
Так кроссплатформенный будет :) Они ведь и делали его, правда на beta1 все и умерло.

2- :
> где используется куча ненужного мусора, который можно и не держать в памяти.
Понимаете в чем дело, здесь сразу возникает очень много вопросов. Один из них может быть таким : после того как вы установили программу, количество приходящих данных с каждым месяцом увеличивается. Кто будет следить за расходом оперативной памяти ?
 

V
18 Nov 2003 11:26 AM
Думаю мы отклонились от темы. Есть еще возражения по поводу расхода памяти при "наследовании". Если нет - можно перейти с следующему недостатку :)
 

CrazyMax
18 Nov 2003 12:09 PM
Ну и чем все-таки вам не нравится расход памяти при наследовании? :)
 

Bizon
18 Nov 2003 12:13 PM
> 17 ноября, 2003, 20:29 - CrazyMax
>2 интересующимся, особенно V:

>http://lib.juga.ru/article/articleview/142/1/3/
>http://lib.juga.ru/article/articleview/139/1/3/

ты посмотри источник - anekdot.ru
 

V
18 Nov 2003 12:51 PM
2CrazyMax :
> Ну и чем все-таки вам не нравится расход памяти при наследовании? :)
2 трети памяти ( и более) на ветер, даже для средних программ многовато, дополнительный расход процессорного времени :)
 

V
18 Nov 2003 12:56 PM
2CrazyMax :
И избежать этого в Java нельзя, по определению :)
 

V
18 Nov 2003 1:43 PM
Едем дальше ( у меня скоро обед :) ?
 

V
18 Nov 2003 2:04 PM
Следующий недостаток это сборка мусора и оператор "new" на мультипроцессорных системах. Организация этого процесса такова, что все "new" выстраиваются в очередь и выполняются последовательно. Это приводит к тому что на SMP системах производительность приближается к однопроцессорной системе ( особенно для баз данных, и ResultSet, где "new" вызывается не явно :)
 

-
18 Nov 2003 3:07 PM
Господа, может вы книжки уже начнете читать? Есть такие, как Java программы оптимизировать...
 

Interrupt
18 Nov 2003 3:23 PM
V wrote: "> pg73jdbc3.jar - 184505 байт.
Я говорил о исходном коде. Приходилось в нем разбираться когда-то ( таймаут соединения). "

lol :) Кого интересует какого размера исходник? В джава коде как правило и инлайновая документация вставляется, это вы тоже за размер исходника считаете, и как следствие = Java sucks? :))
 

jstm
18 Nov 2003 4:08 PM
2 All

Da kogo nachren interesuet skol'ko lishnih bait trebuet nasledovanie v bol'shih biznes proektah ?! Vy eshio predlozhite
sopostavimye po objemu proekty napisannye na java na assemblere
perepisat' - daby vesti uchet' kazhdogo baitika.. Nu samim ne smeshno ?
 

-
18 Nov 2003 4:10 PM
2jstm: respect.
 

jstm
18 Nov 2003 4:11 PM
PS.

God prorabotal na bol'shom proekte .Net (c# i ASP.NET) v Germanii.
Esli dadut - v blizhajshie god dva bol'she nikakogo .Net. Esli chto-to nachalo gliuchit' - to eto smertel'no.
 

Den
18 Nov 2003 4:22 PM
2 jstm : Парень, как раз в больших проектах вопросы производительности \ использования памяти \ расширяемости не только важны, но и приобретают исключительную важность. Сам работаю в таком проекте, и он у мння уже не первый. Ну а если есть какой-то периферийный модулёк к какому обращаются раз в час - его для забавы можно на Жабе написать
 

V
18 Nov 2003 4:51 PM
2Den :
> Там >тоже каждый элемент должен содержать минимум один, а лучше 2 >указателя.
Я могу в С/C++ от этого избавиться, если мне это будет необходимо ( мало ли кто чего напишет и считает лучше ;). В Java от этого избавиться нельзя. В принципе я могу создать вектор на структуру ( класс). В случае с Java, каждое поле будет классом и соответственно потери памяти неизбежны и велики.

2-:
> Господа, может вы книжки уже начнете читать
Если вы сами их читали, может порекомендуете способ избавиться от нижеописанного ?

2 Interrupt :
> это вы тоже за размер исходника считаете
А вы видели много комментариев в исходниках JDBC для Postgres ?
Собственно размер был упомянут не по теме :) Если вы почитаете внимательно, то увидите, что я сказал это в контексте, что размер исходных текстов не имеет значения.

2 jstm :
> Da kogo nachren interesuet skol'ko lishnih bait trebuet nasledovanie v bol'shih biznes proektah ?!
Тех кого это не интересует, сильно волнует т.н. кризис в отрасли и они никак не могут понять, почему он есть.
Как правило, задачи работают с накоплением данных, т.е. после обработки, часть данных будет учавствовать в обработке потом. Если этом обьем будет умножаться каждый раз на 3 и более, то система даже не будет вписываться в т.н. закон удвоения мощности каждые N лет ;)
Про .Net, XML я ничего не говорил :)

 

-
18 Nov 2003 5:05 PM
2V: Если вы сами их читали, может порекомендуете способ избавиться от нижеописанного ?

Вам сказали, если жалко памяти, пишите на ассемблере. Избавится на java можно, только зачем это нужно?

Ну, хорошо. Держите все данные в большом байтовом массиве. И сами моделируйте в нем структуры, выделение памяти и т.д.

Или пишите на native. Но оно вам надо?

Java - защищенный язык. В этом его основное преимущество. Вследствие чего быстрая отладка, надежность приложений. Кстати, параллелизуется java как раз замечательно, несмотря на ваши выдумки. Поэтому на многопроцессорных серверах она особенно хороша.
 

jstm
18 Nov 2003 5:08 PM
2 Den
Nu ja daleko uzhe ne paren'.
A u menia etot projekt 30 ili 33 ili 29 ? Ne pomniu uzhe. Iz nih tol'ko v Germanii 4 bol'shih. Tak vot let 12 nazad ja tozhe perezhival po powodu lishnih bait i pytalsia dokazyvat' vsem chto
'v bol'shom projekte eto ochen' vazhno'. Vy vidno smotrite na mir cherez rozovye ochki. Glavnoe v mire chistogana i nazhivy :) cena i kogda nakonez eto vse zarabotaet. A chem skoree tem luchshe i chem deshevle tem luchshe. A potom uzhe mozno i pooptimizirovat' - opiat' zhe esli chto-to ne ustraivaet. Dlia etogo java i byla v pervuju ochered' sozdana. I, nado skazat' - ona neploho s etim spravliaetsia.
 

V
18 Nov 2003 5:34 PM
2jstm :
> Vy vidno smotrite na mir cherez rozovye ochki.
А может это вы смотрите на мир в таких очках ? Понимаете, обманывать окружающих можно, но недолго ;) Восстановить вашу репутацию будет невозможно. Какая после этого нажива ?
Сколько фирм и проектов вы уже сменили и до вас так и не дошло это ?
> A potom uzhe mozno i pooptimizirovat
Ну это мы уже обсуждали ( один человек даже Тьюринга вспомнил ;)
 

-
18 Nov 2003 5:51 PM
2V: вы сначала расскажите, как в C или C++ добиться, чтобы один модуль не портил память другому модулю. И это принципиальный вопрос. В рамках C/C++ модели не разрешимый.
 

Den
18 Nov 2003 5:52 PM
2 jstm : Парень пришелся к слову - обидеть не хотел. Проблема оптимизации готового кода зачастую состоит в том, что его НЕВОЗМОЖНО оптимизировать без изменения архитектуры-дизайна-средств имплементации - последнее особенно верно в случае Жабы. С важностью ТТМ не спорю, но если речь не идёт о agile-programming , то при написании проекта необходимо продумывать framework & infrastructure кот. пригодится в будущем - а это требует дополнительных - и немалых трудозатрат. К тому же сейчас заказчики всех больших проектов вносят как часть требований производительность, исп-е ресурсов, время ответа и.т.д.
 

jstm
18 Nov 2003 5:53 PM
2 Den

Опять же пример из жизни. Наша фирма участвовала в конкурсе на написание интранет приложения для одной из top50 немецких фирм. Было посчитано все (концепция, воплощение, оптимизация и т.д.). Конкурс мы проиграли более мелкой фирме которая предложила чуть ли не в два раза меньшую цену. В итоге, через год, эта фирма обратилась к нам вновь с просьбой немного довести до ума приложение (Не знаю занималась ли етим, параллельно, фирма выигравшая конкурс). Проблема была именно в неоправданно большом использовании ресурсов (Дезайн приложения обошел оптимизацию стороной, Например тривиальные вещи типа lazy loading обьектов не наблюдались).После двух дней ковыряния клиенту были предложены два варианта: Докупить/поменять железо или нанять наших консалтеров для оптимизации (мин 5 чел х 8 час. х 25 раб.д х €200 в час = €200000 ). Как вы думаете, что предпочел клиент ? :)
Правильно - купить железо! Типа и так все работает как надо, а железо надо было все равно покупать, притом там рассрочка то да се.А вы говорите 12 байт.:) Смешно.
 

V
18 Nov 2003 5:56 PM
2jstm :
> Восстановить вашу репутацию будет невозможно.
Собственно после этого лозунг обычно меняют на : - не до жиру ... ;)
 

Den
18 Nov 2003 5:59 PM
2 - Ну зачем же стрелки переводить - надеетесь поскорей подобраться к излюбленной теме "Сам дурак" ? Обсуждалась-то Жаба, её плюсы и минусы.
И всё же - проблема существует, хотя у нас после работы со смарт-пойнтерами \ auto_ptr - мы уже 2 года как о ней забыли.
 

V
18 Nov 2003 5:59 PM
2 - :
> вы сначала расскажите, как в C или C++ добиться, чтобы один модуль не портил
Не скажу, сами думайте ;)

> А вы говорите 12 байт.:) Смешно.
Смейтесь дальше ;)
 

V
18 Nov 2003 6:02 PM
2 jstm :
> Как вы думаете, что предпочел клиент ? :)
Им надо было поэтапное внедрение выбрать и соответствующую оплату. Месяц прошел, покажите результаты. Результаты плохие - до свидания ;)
 

Den
18 Nov 2003 6:07 PM
2 jstm : И вот пример с фирмы моих друзей - та же ситуация - нет нормальной работы с Oracle (проблемы performance) - аппаратного решения нет - пришлось срочно закупать DB TimesTen - а это увеличение стоимости проекта на 1000000 $ !!! + неустойка, штраф за неукладку в бюджет = убытки + плохое имя
 

jstm
18 Nov 2003 6:12 PM
2 V

Если вы не поняли - я говорил с сарказмом.
Во вторых - хороший программист почти никогда хороший бизнесмен(во всяком случае пока он пытается ето совмещать)
В третьих - где я говорил об обмане клиентов ?!
Только не надо меня подкалывать.
Успешная коммерческое а не академическое предприятие и заключается в том, чтобы находить приемлемый копромисс между качеством и конечной ценой продукта.(См М$).
Еще раз - Java IMHO очень помогает етот компромисс найти.
 

V
18 Nov 2003 6:24 PM
2jstm :
(См М$) - Смотрим. Сейчас курс акций как в 1998 году, при W95/W98/NT. Или они не там компромис нашли или одно из двух ;)
 

V
18 Nov 2003 6:25 PM
2jstm :
> Во вторых - хороший программист почти никогда хороший бизнесмен
Это вы из своего примера такой вывод делаете ?
 

jstm
18 Nov 2003 6:29 PM
2 Den

Именно поэтому мы и проиграли конкурс. т.к. неправильно нашли компромисс для конкретного клиента.А по поводу вашего примера с Oracle. Вы же не станете теперь утверждать, что Oracle плохая бaза ? :) А по удобству создания приложений и стройной и логичной
идеологии Oracle IMHO для девелопера наилучший выбор. Тоже самое можно сказать и о Java. Большинство девелоперов нахрен не интересует как или насколько оптимально реализованы в Oracle скажем B-Tree index, тем не менее ето не мешает им создавать (коммерчески) успешные продукты.
 

jstm
18 Nov 2003 6:38 PM
2 V

//Это вы из своего примера такой вывод делаете ?

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

V
18 Nov 2003 6:42 PM
2 jstm :
> Нет, просто, ето два абсолютно конфликтующих начала.
Откуда такие выводы ?
 

V
18 Nov 2003 6:49 PM
2 jstm :
> А по удобству создания приложений и стройной и логичной
идеологии Oracle IMHO для девелопера наилучший выбор.
См ниже, по поводу SMP+Java в Оракл ;)
 

00alex
18 Nov 2003 7:18 PM
радует меня манера спора г-на V:
(V) - В Java при наследовании всегда теряеется по 12 байт на объект (скип...)
(ауд.1) - дык, int - не надо наследовать
(ауд.2) - а где не теряется? в C/C++ то же будет теряться если делать вектор, а в .Net вообще не поймешь...
(V) - съели? Вот это плохая Java! Ещё возражения есть?
(V) - В Java плохое выделение памяти на многопроцессорных машинах!
(ауд.1) - хм...
(ауд.2) - нифига, все хорошо, проверяли
(V) - опять Java - отстой!

2V, Вы хоть читаете, что Вам народ пишет? Или, пардон муа, как в анекдоте "чукча не читатель, чукча писатель".

Так можно доспориться, что 32 разрядные машины, для простых задача не подходят, потому что слишком много бит в регистрах зря расходуют!
 

Qrot
18 Nov 2003 7:26 PM
00alex: да бот он, бот.. что вы от него ждете то...
http://zdnet.ru/?ID=309075&Discuss=1
 

V
18 Nov 2003 7:41 PM
2 00alex :
> (ауд.2) - нифига, все хорошо, проверяли
Хорошо проверяли ? Текст тестовой программы в студию :)

> дык, int - не надо наследовать
Уф, ну и программисты. Вам код нужен ?

12 байт на обьект приводят к потерям в 2/3 от обьема исходных данных. Или вы и дроби не знаете ? ;)
 

V
18 Nov 2003 8:28 PM
Собственно я поставил Java :
public class Test {
public static void main( String[] args) {
mem = Runtime.getRuntime().totalMemory()-
Runtime.getRuntime().freeMemory();
Test[] t = new Test[count];
for( int i = 0; i < count; i++) {
t[i] = new Test();
}
printMem("Memory");
}
public static void printMem( String mess) {
System.out.println( mess + " : " +
(Runtime.getRuntime().totalMemory() -
Runtime.getRuntime().freeMemory() - mem)/count
);
}
public Test() {
a = new Integer(1);
b = new Integer(2);
c = new Integer(3);
d = new Integer(4);
e = new Integer(5);
}
static final int count = 10000;
static long mem = 0;
Integer a;
Integer b;
Integer c;
Integer d;
Integer e;
}

У меня получается 109 байт на 5 Integer, при миллионе таких Test, получем 100М в воздухе, в C/C++ было бы 20М, с указателями (С++)40М, хотя указатель может быть один, почувствуйте разницу ;) А ведь member-ов как правило значительно больше, приведен только маленький пример. Про средства проектирования, которые генерят классы пакетами говорить не будем ;) А эти 100М еще инициализировать надо, присваивать, делать ввод вывод, потратить процессорное время ;)
 

V
18 Nov 2003 8:29 PM
Отступы были сьедены, не мной ;)
 

jstm
18 Nov 2003 8:49 PM
2 V
//Хорошо проверяли ? Текст тестовой программы в студию :)

Проверено. WebSphere под AIX.
Будете смотреть код WebSphere ?

//12 байт на обьект приводят к потерям в 2/3 от обьема исходных //данных. Или вы и дроби не знаете ? ;)

А у криворуких C, C++ программистов потери памяти могут составлять 999/1000 от обьёма исходных данных.С, C++ плохие
языки ? А давайте мерседесы из пластмассы делать - какая экономия
бензина!
Вообщем бредить я тоже умею. Java успешная платформа для создания
бизнес приложений которая позволяет зарабатывать большие деньги.
И поэтому ОТДЕЛЬНЫЕ недостатки реализаций КОНКРЕТНЫХ JVM
большинством будут считатся несущественными.А прогнозирование смерти Java из за недостатков JVM, а не по более реальным причинам, как, например, головокружительный успех клона Java - .Net, будет считатся бредом.
 

jstm
18 Nov 2003 9:05 PM
2 V

public class Test {
public static void main( String[] args) {
mem = Runtime.getRuntime().totalMemory()-
Runtime.getRuntime().freeMemory();
Test[] t = new Test[count];
for( int i = 0; i < count; i++) {
t[i] = new Test();
}
printMem("Memory");
}
public static void printMem( String mess) {
System.out.println( mess + " : " +
(Runtime.getRuntime().totalMemory() -
Runtime.getRuntime().freeMemory() - mem)/count
);
}
public Test() {
a = 1;
b = 2;
c = 3;
d = 4;
e = 5;
}
static final int count = 10000;
static long mem = 0;
int a;
int b;
int c;
int d;
int e;
}

В этом случае получаем 35 байт. Ну и что вы хотели доказать ?
Что некий программист непонятно зачем в данном конкретном случае использовал Integer oбьекты вместо int и естественно получил 70% прирост использования памяти ?
 

jstm
18 Nov 2003 9:14 PM
Притом что создание 1000000 обьектов в данном примере на моем домашнем Athlon 2000+ заняло около 1,5 сек. Результат на C++ ?
Хотя бог с ним, C++ я тоже люблю(платонической любовью).
 

jstm
18 Nov 2003 9:17 PM
//70% прирост использования памяти ?

Имелся ввиду, конечно, 300% прирост :)
 

Ron
19 Nov 2003 1:06 AM
Йопрст... Дежа вю :-))
Тут уже как-то для С# писю меряли на подобном тесте.
 

Qrot
19 Nov 2003 10:53 AM
Ron: мы не ту писю меряли :) там речь про скорость шла, здесь за память бьюцца. но все равно не то меряют.. единственное достоинство жабы в склеивании разных платформ в единое решение, а это пузомеркой не измеришь.
 

V
19 Nov 2003 11:21 AM
2Qrot :
> склеивании разных платформ в единое решение, а это пузомеркой не измеришь.
Ну почему не измеряешь ? На одной платформе хорошая библиотека для нитей, на другой особая файловая система, на третьей управление процессами. При использовании Java никакого доступа к особенностям системы нет, т.е. если купить супер компьютер, с очень хорошой операционкой, то Java на нем будет работать как на W95 ;) Собственно заказчик потом и спрашивает : - Я, по вашей рекомендации, купил оборудования на N-ую сумму, а отдачу получаю как от десктопа ?

 

Den
19 Nov 2003 11:26 AM
2 jstm :
> Вы же не станете теперь утверждать, что Oracle плохая бaза ? :)

Стану утверждать, что менеджера проекта и архитектора надо уволить - за то что не приняли во внимание performance / scalability при планировании проекта.
 

CrazyMax
19 Nov 2003 11:29 AM
2jstm:
наконец-то хоть один человек нашел время заткнуть V :)
 

CrazyMax
19 Nov 2003 11:30 AM
А лучшие годы Java все-таки впереди.
 

V
19 Nov 2003 11:53 AM
2jstm :
Вот тебе пример на С. Он 1000000 делает за 1 секунду, быстродействие в 100 раз выше ;) Плюс тоже желаете мерять ?

---
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef struct TEST {
int a;
int b;
int c;
int d;
int e;
}TEST;

int main() {
time_t tm;
int len = 0;
TEST* test = ;
tm = time( NULL);
for( int i = 0; i < 1000000; i++) {
if ( len <= i) {
test = (TEST*)realloc( test, sizeof(TEST) * (len+len/10+10));
len = len+len/10+10;
}
test[i].a = 1;
test[i].b = 2;
test[i].c = 3;
test[i].d = 4;
test[i].e = 5;
}
free( test);
printf("Time : %d\n", time(NULL) - tm);
return 0;
}

 

V
19 Nov 2003 12:06 PM
2jstm :
Забыл добавить конфигурацию : PIII, 600МГц
;)
 

добрый
19 Nov 2003 1:01 PM
спасибо участникам. из Вашего примера понял, что Java лучше оплачивается :)
 

ggv
19 Nov 2003 1:28 PM
jstm - с этой болталкой V бесполезно спорить - во как уже с вопроса с памятью повернул на секунды. На него уже в других тредах забили. И вам того же советую.
 

V
19 Nov 2003 1:31 PM
Я не против Java, просто на ней можно писать клиентскую часть, там где пользователь вводит данные, рисовать чего-нибудь, управлять очередями ( небольшими). Java здесь вне конкуренции. На сервере при средних и больших обьемах данных ей не место.

Я так понял народ больше Java не хочет обсуждать :) Могу добавить пару слов по XML и Net :) Проверить .Net у меня возможности нет, могу судить только по рекламным статьям. Исходя из информации о .Net, они собираются делать обмен данными через XML. Хотел бы заметить, что вариант представления <memoryVolume>256</memoryVolume> использовать при обмене нецелесообразно IMHO. Потому что при 3 байтах полезной информации, передается 29 байт бесполезной информации. Полезная информация составляет менее 10% обьема передаваемой информации. Это конечно можно архивировать/деархивировать ( потратить процессорное время) а потом искать в бесполезной ( 90% и более служебной) информации 3 необходимых байта тоже не подарок ;)
 

V
19 Nov 2003 2:01 PM
И в заключении, можно вернуться к статье. Устранят ли новые средства для разработки EE нижеперечисленные недостатки ?
 

-
19 Nov 2003 2:29 PM
2V:
>Я не против Java, просто на ней можно писать клиентскую часть, там где пользователь вводит данные, рисовать чего-нибудь, управлять очередями ( небольшими). Java здесь вне конкуренции. На сервере при средних и больших обьемах данных ей не место.

Ой, блин. При современных технологиях, как раз на десктопе Java хреново. А на серверах очень шустро все компилируется jit'ом.
 

miroh
19 Nov 2003 2:34 PM
По моему опыту ява жрет памяти раза в полтора больше чем НЕТ . Хотя работает побыстрее. Но все примеры г-на V не более чем жульничество - всякий видит.
Основная проблема Явы - оверижениринг. Посмотреть например только на последий выпуск JSF... Или бесчисленные паттерны для EJB..
Проще надо быть.
 

CrazyMax
19 Nov 2003 3:24 PM
по поводу XML-я.
пришлось руководству доказывать боеспособность этой технологии. Как раз для ЭКОНОМИИ трафика между сервером и клиентом нами и был использован XML. В примере приведенном V действительно жульничество. 1- не 3 байта.. а достаточно 2 так как это word :) А во вторых передача ТАКОЙ информации никому нафик не нужна. Для передачи древовидной структуры, когда классы сериализовались в XML это было самое оно (на самом деле в боевых примерах, когда тестиовались сотни мегабайт трафика коэфициент эффективности протокола составил около 15% и меньше) + огромное количество времени, а значит и денег сэкономленное на специфицировании, имплементировании, тестировании своего протокола и т.п. + потом это здорово вжимается ZIP-ом который работает не так уж и медленно как V кажется.

Еще одно наблюдение, которое V упорно не замечает:
ИТ - есть бизнес. Тут важны
3 фактора: скорость выполнения задачи (так как время ее актуальности не большое, рынок развивается очень быстро), ресурсы на нее потраченные и надежность решения. Вот тут во всех параметрах Java как нельзя лучше работает. Остальное - второстепенное.

Дешевле купить не одну а три железки, не средних а очень даже современных чтобы быстро и комфортно работать с "медленной" явой чем держать год 6-7 программистов которые будут бороться с "проблемой" 12 байт при наследовании ;-) Это правило уже мной не раз подтверждалось в общении с заказчиками, менеджерами и прочими антисоциальными элементами :))
 

CrazyMax
19 Nov 2003 3:26 PM
2miroh: чем и как замерялось обжорство памяти в Java и .Net ?
Какие приложения с какой функциональностью сравнивались?

Я тут посмотрел на работу IDE Delphi и IntelliJ Idea. Да! Согласен! Idea ест в два раза больше памяти. Но функциональность?!?!
 

miroh
19 Nov 2003 3:43 PM
2 CrazyMax
Это была синтетическая задачка - тока ради интереса. Создавался большой хэш обьектов потом по нему велся поиск. При создании ява проиграла в экономии памяти и скорости но по поиску выиграла. Так же проверял сканирование одного массива байт другим - ява опять выиграла.
Еще вопрос - че за 12 байт при наследовании?
 

jstm
19 Nov 2003 4:11 PM
2 Den

//Стану утверждать, что менеджера проекта и архитектора надо //уволить - за то что не приняли во внимание performance / //scalability при планировании проекта.

Полностью согласен! А причем тут Oracle ? (Java) :)

2 V
Я вроде написал 1,5 сек против ваших 1 сек. Где в 100 раз то ?!

Кстати вы знаете что при огранке алмазов до 3/5 веса камня уходит
в мусор - но ето почему-то никого не волнует, т.к. хорошо ограненный камень стоит намного больше неограненного даже большего по весу. Вы, я так понимаю, предпочитаете брать неограненные камни и огранивать собственноручно, чтобы не дай бог
не потерять больше 1/100 потратив в два раза больше времени. Я же предпочитаю брать готовые бриллианты и создавать украшение.

2 CrazyMax
Насчет IDEA - полностью поддерживаю.
 

V
19 Nov 2003 4:28 PM
2 jstm :
> Где в 100 раз то ?!
Так миллион в С а не 10000 в Java ;) Вот в 100 раз, и даже больше, т.к. мое железо послабее вашего будет ;)

> предпочитаете брать неограненные камни и огранивать собственноручно, чтобы не дай бог
Да, к Java это конечно относится. Очень существенное доказательство ;) Главное математики много, классы. Вы еще "сено" с "соломой" вспомните. Как раз для вас ;)
 

V
19 Nov 2003 4:34 PM
2 CrazyMax :
> пришлось руководству доказывать боеспособность этой технологии.
Зачем руководству, вы здесь докажите ;)
 

miroh
19 Nov 2003 4:37 PM
2V
Вам же написали русским по белому
> Притом что создание 1000000 обьектов в данном примере на моем >домашнем Athlon 2000+ заняло около 1,5 сек. Результат на C++ ?
>Хотя бог с ним, C++ я тоже люблю(платонической любовью).
 

V
19 Nov 2003 4:47 PM
2 miroh :
Это сообщение я пропустил. Насчет int и Integer читайте в начале обсуждения. Один такой герой уже был ;)
 

miroh
19 Nov 2003 4:55 PM
2V
Вот так и делаются вселенские открытия об отстойности неугодного предмета.
Про Integer int - это жульничество я тоже видел
Кроме того вы что же думаете - здесь собрались идиоты, которые не понимают чем realloc от malloc отличаются. Вас за карточным столом случаем не били?
 

jstm
19 Nov 2003 5:01 PM
2 Miroh

JVM Reference

..In some of Sun's implementations of the Java virtual machine, a reference to a class instance is a pointer to a handle that is itself a pair of pointers: one to a table containing the methods of the object and a pointer to the Class object that represents the type of the object, and the other to the memory allocated from the heap for the object data.

Итого получаем 12 байт. Притом в C++ похожая картина. Отсутствует только pointer to the Class object.
Где тут наследование приплелось ? По моему у V в голове тараканы.
 

V
19 Nov 2003 5:03 PM
2miroh :
Я проверил на своей машине оба варианта ( использовался Integer, см ниже почему). Время работы Java на миллионе - 15 сек, время C меньше одной. Хорошо, не в 100 раз так в 15 ;) Вот так и доверяй вашим тестам ;)
 

V
19 Nov 2003 5:05 PM
2 jstm :
> По моему у V в голове тараканы.
Тараканы батенька у вас. Возьмите мой пример с интежер и <внимательно> посмотрите.
 

miroh
19 Nov 2003 5:15 PM
2V
А почему в примере на C int а для java -Integer?
А почему в вашем примере для С новая память память не выделяется под массив?
Заврались вы батенька!
 

V
19 Nov 2003 5:15 PM
2 jstm :
Вы это, далеко не отходите, я сейчас с работой все доделаю и мы пройдемся по плюсам ;)
 

V
19 Nov 2003 5:31 PM
2miroh :
> А почему в вашем примере для С новая память память не выделяется под массив?
Тупите батенька ?

> А почему в примере на C int а для java -Integer?
Читайте все с самого начала ;)
 

miroh
19 Nov 2003 5:45 PM
2V
Не я туплю а вы врете
вы передаете в realloc один и тот же указатель test - новая памать не выделяется Учите С уважаемый или учитесь других уважать
С Integer - вы не обьяснили ничего - опять врете
 

V
19 Nov 2003 6:00 PM
2 miroh :
> вы передаете в realloc один и тот же указатель test
Может учить С нужно все таки вам ?
realloc() Changes the size of the block pointed to by ptr to size bytes and returns a pointer to the (possibly moved) block. Existing contents are unchanged up to the lesser of the new and old sizes. If ptr is a pointer, realloc()
behaves like malloc() for the specified size.
If size is zero and ptr is not a NULL pointer,
the object it points to is freed and NULL is
returned.

> С Integer - вы не обьяснили ничего - опять врете
Учите еще и Java тогда ;)
 

V
19 Nov 2003 6:03 PM
А вот и C++ :
2000000 он делает за 1 сек. Т.о. в 30 раз быстрее Java ;)
---
#include <stdio.h>
#include <vector>
#include <time.h>

typedef struct TEST {
int a;
int b;
int c;
int d;
int e;
}TEST;

int main() {
time_t tm;
TEST t;
tm = time( );

std::vector<TEST> v;
for( int i = 0; i < 2000000; i++) {
t.a = 1;
t.b = 2;
t.c = 3;
t.d = 4;
t.e = 5;
v.push_back( t);
}
printf("Time : %d\n", time(NULL) - tm);
return 0;
}

 

V
19 Nov 2003 6:16 PM
Вот так и считают псевдопрограммисты, что пишут на самом лучшем языке Java ;)
 

miroh
19 Nov 2003 6:36 PM
2V
Горбатого могила исправит
realloc returns a void pointer to the reallocated (and possibly moved) memory block. The return value is if the size is zero and the buffer argument is not NULL, or if there is not enough available memory to expand the block to the given size. In the first case, the original block is freed. In the second, the original block is unchanged. The return value points to a storage space that is guaranteed to be suitably aligned for storage of any type of object. To get a pointer to a type other than void, use a type cast on the return value.

Parameters

memblock

Pointer to previously allocated memory block

Для особо неграмотных- реаллок пытается разместить новую память по старому адресу memblock если memblock =NULL то тогда он работает как malloc то есть выделяет новую память то же если не удается разместить новую память по старому адресу.
Про Integer & int я обьяснений конечно же не дождусь - их не может быть в принципе.
Про С++ - опять жульничество
Почему используется не класс а структура. Тут нет обычного new зато используется vector -ская процедупа выделения, которая сильно оптимизирована?. Если вообще в вектор разные экземпляры TEST помещаются а не ссылки на один и тот же изначально инициализированный экземпляр.
Опять жульничество
Держите ВОРА!!!!
 

V
19 Nov 2003 6:43 PM
2 miroh :
Ну что тут можно сказать. Английского не знает, C/C++/Java тоже. Вы бы не позорились так, на весь интернет ;)

 

miroh
19 Nov 2003 6:48 PM
И английский знаю и С++ 10 лет и Java 5 лет практической деятельности.
А позоритесь именно вы - все эти вещи знает любой программер, кроме вас очевидно. Вам уже тут говорили здесь это в разных местах. Да еще жульничество - совсем плохо пахнет.
 

torvic
19 Nov 2003 6:54 PM
А вот и C#:
2000000 он делает за 62 ms.
И что это нам говорит? а ничего ...
---
public class myTest
{
public struct structTest
{
public int a;
public int b;
public int c;
public int d;
public int e;
}

public int CreateArray()
{
System.DateTime tm1, tm2;
structTest[] testArray = new structTest[2000000];

tm1 = System.DateTime.Now;
for (int i=0; i<testArray.Length; i++)
{
testArray[i].a = 1;
testArray[i].b = 2;
testArray[i].c = 3;
testArray[i].d = 4;
testArray[i].e = 5;
}
tm2 = System.DateTime.Now;
return (tm2.Second*1000 + tm2.Millisecond - tm1.Second*1000 - tm1.Millisecond);
}
}
 

miroh
19 Nov 2003 6:58 PM
Да - тут память выделяется всего один раз -
structTest[] testArray = new structTest[2000000];
Дальше только присвоение значений.
На яве такого не сделаешь - нет структур
В тигре будет говорят а щас нет
 

V
19 Nov 2003 7:00 PM
2 torvic :
> 2000000 он делает за 62 ms.
Железо сравнивали с моим ?

> И что это нам говорит? а ничего ...
Это jstm интересовало, за сколько это сделает С++. Обсуждалась другая тема ;)
 

V
19 Nov 2003 7:11 PM
2torvic :
Собственно и без железа, даже miroh заметил, в чем дело ;)
 

CrazyMax
19 Nov 2003 7:21 PM
2V:
Доказывать надо именно руководству. Так как именно оно ОЦЕНИВАЕТ в денежном и моральном эквиваленте результаты
 

jstm
19 Nov 2003 7:21 PM
2 V

Vremia ispolnenija 50ms. Kto iz nas idiot ?!

import java.util.*;

public class Test {

public static void main( String[] args) {
mem = Runtime.getRuntime().totalMemory()-
Runtime.getRuntime().freeMemory();
Test t = new Test();
ArrayList llist = new ArrayList(2000000);
for( int i = 0; i < count; i++) {
t.a = 1;
t.b = 2;
t.c = 3;
t.d = 4;
t.e = 5;
llist.add(t);
}
printMem("Memory");
}

public static void printMem( String mess) {
System.out.println( mess + " : " +
(Runtime.getRuntime().totalMemory() -
Runtime.getRuntime().freeMemory() - mem)/count);
}

static final int count = 2000000;
static long mem = 0;
int a;
int b;
int c;
int d;
int e;
}
 

jstm
19 Nov 2003 7:22 PM
to last post 0.5 sek
 

jstm
19 Nov 2003 7:36 PM
2 V
Bolee realnij primer gde sozdajutsia real'nye objekty - 2 sek. :

import java.util.*;

public class Test {

public static void main( String[] args) {
mem = Runtime.getRuntime().totalMemory()-
Runtime.getRuntime().freeMemory();
Test t;
ArrayList llist = new ArrayList(1000000);
for( int i = 0; i < count; i++) {
t = new Test();
t.a = 1;
t.b = 2;
t.c = 3;
t.d = 4;
t.e = 5;
llist.add(t);
}
printMem("Memory");
}

public static void printMem( String mess) {
System.out.println( mess + " : " +
(Runtime.getRuntime().totalMemory() -
Runtime.getRuntime().freeMemory() - mem)/count);
}

static final int count = 1000000;
static long mem = 0;
int a;
int b;
int c;
int d;
int e;
}
 

jstm
19 Nov 2003 7:38 PM
To last post - bylo 2000000. s 1000000 sootvetstwenno 1 sek.
 

V
19 Nov 2003 7:46 PM
2CrazyMax :
Имелось ввиду, что мне тоже интересны ваши доказательства, здесь, в обсуждении.

2jstm :
? ;) Так я тоже могу память выделить один раз. Вас опять интересует время выполнения на C/C++ ?
А умнее вы ничего не можете придумать ?
 

jstm
19 Nov 2003 9:03 PM
2 V

Bez vydelenija pamiati 1 sek.:

import java.util.*;

public class Test {

public static void main( String[] args) {
mem = Runtime.getRuntime().totalMemory()-
Runtime.getRuntime().freeMemory();
Test t = new Test();
ArrayList llist = new ArrayList();
for( int i = 0; i < count; i++) {
t.a = 1;
t.b = 2;
t.c = 3;
t.d = 4;
t.e = 5;
llist.add(t);
}
printMem("Memory");
}

Bez vydelemija pamiati s REAL'NYMI objectami - 2 sek.:

public static void printMem( String mess) {
System.out.println( mess + " : " +
(Runtime.getRuntime().totalMemory() -
Runtime.getRuntime().freeMemory() - mem)/count);
}

static final int count = 2000000;
static long mem = 0;
int a;
int b;
int c;
int d;
int e;
}

ANALOGICHNYJ primer c# - 1.2 sek :

using System.Collections;

public class myTest
{
public class CLASSTest
{
public int a;
public int b;
public int c;
public int d;
public int e;
}

public int CreateArray()
{
System.DateTime tm1, tm2;
ArrayList alist = new ArrayList();

tm1 = System.DateTime.Now;
CLASSTest t;
for (int i=0; i<2000000; i++)
{
t = new CLASSTest();
t.a = 1;
t.b = 2;
t.c = 3;
t.d = 4;
t.e = 5;
alist.Add(t);
}
tm2 = System.DateTime.Now;
return (tm2.Second*1000 + tm2.Millisecond - tm1.Second*1000 - tm1.Millisecond);
}

public static void Main(){
System.Console.WriteLine((new myTest()).CreateArray());
}

}

Analogichnyj primer na C++ - 0.8 sek :

#include <stdio.h>
#include <vector>
#include <time.h>

typedef struct TEST {
int a;
int b;
int c;
int d;
int e;
} TEST;

int main() {
time_t tm;
TEST* t;
tm = time( );

std::vector<TEST> v;
for( int i = 0; i < 2000000; i++) {
t = new TEST();
t->a = 1;
t->b = 2;
t->c = 3;
t->d = 4;
t->e = 5;
v.push_back(*t);
}
printf("Time : %d\n", time(NULL) - tm);
return 0;
}

Chto my vidim ?
1. C++ 0.8 sek.
3. C# 1.2 sek.
2. Java 2 sek.

Nu i chto etot polnostju idioticheskij primer dolzhen byl dokazat' ?!
 

torvic
19 Nov 2003 9:12 PM
>Да - тут память выделяется всего один раз
:)))
Давайте сделаем через ж...
93ms
оптимизация выключена.
---
for (int i=0; i<testArray.Length; i++)
{
structTest s = new structTest();
s.a = 1;
s.b = 2;
s.c = 3;
s.d = 4;
s.e = 5;
testArray[i] = s;
}
 

jstm
19 Nov 2003 9:27 PM
2 torvic

Na moej mashine c# - 1.1 sek :

using System.Collections;

public class myTest
{
public class CLASSTest
{
public int a;
public int b;
public int c;
public int d;
public int e;
}

public int CreateArray()
{
System.DateTime tm1, tm2;
CLASSTest[] alist = new CLASSTest[2000000];

tm1 = System.DateTime.Now;
CLASSTest t;
for (int i=0; i<2000000; i++)
{
t = new CLASSTest();
t.a = 1;
t.b = 2;
t.c = 3;
t.d = 4;
t.e = 5;
alist[i] = t;
}
tm2 = System.DateTime.Now;
return (tm2.Second*1000 + tm2.Millisecond - tm1.Second*1000 - tm1.Millisecond);
}

public static void Main(){
System.Console.WriteLine((new myTest()).CreateArray());
}

}

java - 0.8 sek :

import java.util.*;

public class Test {

public static void main( String[] args) {
mem = Runtime.getRuntime().totalMemory()-
Runtime.getRuntime().freeMemory();
Test t;
long time, oldtime = System.currentTimeMillis();
Test[] llist = new Test[2000000];
for( int i = 0; i < count; i++) {
t = new Test();
t.a = 1;
t.b = 2;
t.c = 3;
t.d = 4;
t.e = 5;
llist[i] = t;
}
time = System.currentTimeMillis();
System.out.println(time - oldtime);
printMem("Memory");
}

public static void printMem( String mess) {
System.out.println( mess + " : " +
(Runtime.getRuntime().totalMemory() -
Runtime.getRuntime().freeMemory() - mem)/count);
}

static final int count = 2000000;
static long mem = 0;
int a;
int b;
int c;
int d;
int e;
}

Itogo - c# v zhope, chto i trebovalos dokazat'.
PS c# s opimizaciej. java -Xms128M -Xmx256M
 

torvic
19 Nov 2003 9:27 PM
Короче Склифосовский, этот маразм лично мне уже поднадоел, так что завязывая эту тему, у виртуальных машин теоретически есть только один недостаток - performance (т.е. всегда можно написать нативную программу, которая быстрее и жрет меньше памяти).
НО!!! Во-первых у ВМ туева хуча преимуществ, которые задвигают этой недостаток туда где его никто никогда и не увидит;
во-вторых, недостаток это чисто теоретический, т.к. на практике его видели только драйверописатели;
в-третьих, критического кода в большом проекте 10-15% так что ходить по граблям в остальных 85-90% могут как уже говорилось только сами себе Буратины.
 

torvic
19 Nov 2003 9:31 PM
2 jstm
Вы чего пытаетесь доказать-то???
Что Ява быстрее? - мне пофиг.
 

done
19 Nov 2003 10:28 PM
и не подерётесь ;-))
 

jstm
19 Nov 2003 11:31 PM
2 torvic

Самое интересное - мне тоже пофиг :)
Вам как раз я ничего и не пытался доказать.
Просто тут есть некоторые борцы с двенадцатью байтами,
пытаюсь вылечить...
 

ВасяПупкин
19 Nov 2003 11:59 PM
2 jstm
>пытаюсь вылечить...

и оно тебе нада? :) Не все болезни ещё лечатся :))
 

CrazyMax
20 Nov 2003 3:51 AM
2jstm:
Не надо их лечить! Они как динозавры :) - вылечатся.

Проверил примеры.. ради интереса. Правда у меня железо не такое рухлое как у в V PIV/1G RAM так что мне что C++ что Java этот пример выполняется за мало измеряемый промежуток времени.

Нашел зато тему, где применение Java было бы полным маразмом. Мне тут друг 3DMax показал (кто знает что это за штука). Ну так вот, Rendering (правильно написал?) на Java делать было бы самоубийством. о! :)

Зато остальной 3DMax - вопрос :)
 

Allutamhar
20 Nov 2003 8:31 AM
Берем пример:
- коммерческий проект, развитие до версий 3,4,5 (3-4 года);
- ориентация на 100000 пользователей по миру;
- серьезные расчетные механизмы (аналитика);
- ...

Ставим рядом 2 софтверные компании(занимающиеся софтом профессионально), одна пишет на С++, другая на яве. Через полгода обе компании выпускают рабочую бету. Результат второй компании тормозит, требует кучу ресурсов, отвратительный интерфейс. Результат первой - все работает быстро, удобно и мало требует. Через год различие в качестве становится просто чудовищным, пользователи однозначно вибирают софт первой компании. Вторая компания тоже имеет клиентов, только раз в 20 меньше чем первая. Но ее программисты все равно упорствуют...
Да, чуть не забыл. Через полтора года вторая компания вообще закрывает проект или влачит жалкое существование. Ее программисты(обвиняя свое руководство в провале) уходят в другие компании, где опять пропагандируют яву.

Знакома такая ситуация?
Лучшие годы явы давно уже прошли, надо на вещи смотреть трезво.
 

miroh
20 Nov 2003 8:47 AM
2Allutamhar
Для программ типа Word - все верно, а вот для корпоративных систем все как раз наоборот. С++ требует гораздо больших трудозатрат, менее устоичив и защищен.
В резултате явисты быстрее будут исправлять баги и выпускать новые версии.
 

VicTor
20 Nov 2003 9:07 AM
2CrazyMax:
> Rendering (правильно написал?) на Java делать было бы самоубийством.

Отнюдь :) Art of Illusion же существует и развивается.
 

Qrot
20 Nov 2003 10:43 AM
"... Java is clearly an example of a money oriented programming (MOP)." - http://www.stlport.org/resources/StepanovUSA.html
абсолютно верно :)
 

V
20 Nov 2003 11:23 AM
Думаю Java (MOP) будет как доткомы. Много шума, рекламы, менеджерских рассказов, придут ламеры, пробовавшие только демонстрационные примеры, и потом все в ящик, деревянный ;) Хотя у Java есть одно свойство, которого нет ни у одного другого языка, но Sun его не использует, поэтому Java и загибается, хотя могла бы уничтожить C/C++ ;)
 

Denis
20 Nov 2003 11:23 AM
Я РАЗАЧЕРОВАН В ЯВЕ.

Что бы меня понять достаточно постовить себе Maple 9

(ТОРМАЗА!!! И виртуальность здесь не опровдание)
 

miroh
20 Nov 2003 11:27 AM
2V
вы полны иллюзий уважаемый. И Java не загибается(IBM BEA ORACLE вроде твердо на ногах стоят) и яве никогда С++ не убить как и наоборот. Юношеский максимализм?
 

V
20 Nov 2003 11:38 AM
2 miroh :
> И Java не загибается
Тогда почему у них через 13 лет лучшие годы все еще впереди ?
 

V
20 Nov 2003 11:40 AM
2 miroh :
> И Java не загибается
И на курс акций разработчика Java, Sun, страшно смотреть ?
 

V
20 Nov 2003 11:44 AM
2 jstm :
Что то наш алмазный магнат молчит ;)
 

miroh
20 Nov 2003 11:53 AM
то и молчит, что разговаривать с вами бесполезно - то жульничество то демагогия.
 

Allutamhar
20 Nov 2003 12:03 PM
2mihon:
>> Для программ типа Word - все верно, а вот для
>> корпоративных систем все как раз наоборот.

Наверное, Вы хотели сказать не "корпоративных систем", а систем, пишушихся под собственные нужды только для себя(своей компании)? Как только вынесете свою корпоративную задачу на аутсорс нескольким компаниям на выбор, то от решения на яве не оставят и следа.

И потом, что значит "Для программ типа Word - все верно"? Если средство(С++) позволяет так безоговорочно победить в таком проекте как Ворд, то в остальных проектах он также победит.(бизнес я этот отлично знаю, полностью в теме)

На яве делают втихую, без давления конкурентов. Как появляются конкуренты, так ява быстренько уходит со сцены.
 

V
20 Nov 2003 12:04 PM
2 miroh :
> то жульничество то демагогия
Не могли бы вы показать, где по вашему мнению вы это видели ?
 

jstm
20 Nov 2003 12:10 PM
2 Allutamhar

Ставим рядом 2 софтверные компании(занимающиеся софтом профессионально), одна пишет на С++, другая на яве. Через полгода обе компании выпускают рабочую бету. Результат второй компании тормозит, требует кучу ресурсов, отвратительный интерфейс. Результат первой - все работает быстро, удобно и мало требует. Через год различие в качестве становится просто чудовищным, пользователи однозначно вибирают софт первой компании.

A u menia priamo protivopoloznyj primer. BAYER-u firma A sdelala
nekij produkt na C++ . Bylo zhutkoe gliukalowo. Potom my delali tam proekt - poluchilos neploho. Sledujushij proekt budet na Java.

Ochem eto govorit - a ne ochem. Tol&#180;ko o krivizne ruk konkretnyh
programmistov. C++ ne daet NIKAKIH preimushestw v napisanii biznes proektov. Ni po skorosti napisania ni po skorosti raboty ni po perenosimosti ni po stabilnosti.
 

V
20 Nov 2003 12:14 PM
2 jstm :
> Ni po skorosti napisania ni po skorosti raboty ni po perenosimosti ni po stabilnosti.
Видно зря я потратил время на вас, вы так ничего и не поняли ;)
 

jstm
20 Nov 2003 12:14 PM
2 Allutamhar

Tolko ne nado pro to u kogo knopka v GUI krasivee, i bystree pererisowywaetsia. K C++ eto ne imeet nikakogo otnosenija.
K primeru ispolzuja SWT ot IBM - GUI na Java budet native na podderzhivaemyh platformah.
 

jstm
20 Nov 2003 12:26 PM
2 V

Dva predlozhenija :
1) Objasnit' mne chem 0.8 sek na C++ v moem primere otlichaetsia ot 1.1 sek na Java.
2) Rasskazat utkuda berutsia 12 bait pri nasledovanii! v Java.

Esli na na eti dva predlozhenija vy otvetite, mozhem prodolzhit diskusiju - inache ne vizhu smysla.
 

miroh
20 Nov 2003 12:34 PM
2V
еще и короткая память?
а Integer вместо int
realloc вместо malloc
а использование vector вместо обычного new - причем совсем это не нужно было как torvik показал
Демагогия - это про лучшие времена впереди (и так не плохих времен) и Курс акций Сана.
 

V
20 Nov 2003 12:36 PM
2 jstm :
"Шо, опять ?" ;)
Вы приводили много примеров, какие именно вас интересуют, чтобы потом не было претензий, что я не туда смотрел ( код). Хорошо ?
 

eXOR
20 Nov 2003 12:37 PM
2 Allutamhar:
Ситуация чаще всего такая:
1. Компания А сделала продукт на Java через полгода
2. Компания B сделала продукт на C++ через шесть месяцев
функционал схожий,
3. но из-за того что в компании C был лучше поставлен производственный процесс, грамотнее кодеры и архитектор, то продукт лучше сделали именно они.
4. однако появилась компания D с продуктом сделаным на коленке за месяц и не покрывающим и седьмой части функционала, зато с кучей злобных и цепких манагеров, которые умудрились убедить всех что остальной функционал нафиг не нужен, добиться помощи от государства и провести грамотную рекламную акцию - они стали продуктом де-факто и стали диктовать свои условия на сроки. В результате:

* компания из пп 1 начала осваивать другой рынок (за счет других платформ и получила свои 5% рынка).
* компания из пп 2 начала гнаться за компаниез из пп 4 и превратила продукт в кашу, которой пользоваться можно только отплевываясь, но получила свои 3-5% рынка.
* компания из пп 3 получила свои 2% рынка, но цена на их продукт очень высока и не доступна массовому потребителю.

могу перевести на конкретные названия компаний. таких примеров я знаю море. при чем не по наслышке, но я думаю что это просто не нужно...

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

V
20 Nov 2003 12:39 PM
2 eXOR :
> спрос пораждается рекламой.
Вы в этом уверены ?
 

eXOR
20 Nov 2003 12:42 PM
Платформа избавляет от некоторых рисков при разработке, добавляя некоторые другие. Хорошая арихтектура и поставленый производственный процесс способствуют созданию качественного кода, но ни то ни другое не гарантирует успеха на рынке.
 

Прохожий
20 Nov 2003 12:43 PM
2 Allutamhar
"отвратительный интерфейс"

Что вы имели ввиду, когда это написали ? Если дизайн, тогда нельзя сказать, что вторая команда была профессионалами. И тогда ваше сравнение не уместно.
 

eXOR
20 Nov 2003 12:44 PM
2 V:
Очень хочу чтобы меня убедили в обратном. Но весь мой жизненный опыт + знания полученые при наблюдении за работой как аналитиков, так и успешных брэндов (в том числе и софтверных) пока привели меня к такому выводу.
 

eXOR
20 Nov 2003 12:45 PM
Извиняюсь за, блин, ошибки.
 

V
20 Nov 2003 12:49 PM
2 eXOR :
> знания полученые при наблюдении за работой как аналитиков, так и успешных брэндов
Какие знания, какие бренды ? У них ведь кризис ? Или у ваших "манагеров" зубы стерлись ?
 

Allutamhar
20 Nov 2003 12:52 PM
2EXOR:
Вы несколько отвлеклись от темы явы. Хотя, по ситуации похоже
на программы нашей налоговой или бухгалтерии? (могу ошибаться)

Но в любом случае, на нашем рынке выживает С/C++.
Я не видел нигде(в пределах разумного) массово внедренных ява программ. Пусть хоть в виде тонких клиентов, в виде терминалов с упрощенной функциональностью.
Есть конечно, терминалы брокерских компаний, но на это просто без слез смотреть нельзя. Их легко обходят родные нативные терминалы под windows.

> Хорошая арихтектура и поставленый производственный процесс
> способствуют созданию качественного кода, но ни то ни другое
> не гарантирует успеха на рынке.

Верно, но использование явы - это совершенно конкретный гвоздь в гробу проекта.
 

Прохожий
20 Nov 2003 12:54 PM
2 V
----
Так в чем же, всё-таки, недостатки Java ?

Всем
---
По-моему, надо уже не языки сравнивать (ибо они во многом схожи, если говорить C++ и Java), а инфраструктуру (IDE, библиотеки и т.п.).
 

Прохожий
20 Nov 2003 12:56 PM
2 Allutamhar
----
"Верно, но использование явы - это совершенно конкретный гвоздь в гробу проекта."

Потрудитесь объяснить почему.
 

Прохожий
20 Nov 2003 1:03 PM
Всем:
---
По ссылке, приведенной Qrot'ом выдернул следующий абзац
"Try to implement a simple thing in the object oriented way, say, max. I do not know how it can be done. Using generic programming I can write:

template <class StrictWeakOrdered>
inline StrictWeakOrdered& max(StrictWeakOrdered& x,
StrictWeakOrdered& y) {
return x < y ? y : x;
}

and
template <class StrictWeakOrdered>
inline const StrictWeakOrdered& max(const StrictWeakOrdered& x,
const StrictWeakOrdered& y) {
return x < y ? y : x;
}

(you do need both & and const &). And then I define what strict weak ordered means. Try doing it in Java. You can't write a generic max() in Java that takes two arguments of some type and has a return value of that same type. Inheritance and interfaces don't help. And if they cannot implement max or swap or linear search, what chances do they have to implement really complex stuff? These are my litmus tests: if a language allows me to implement max and swap and linear search generically - then it has some potential."

Сторонникам Java есть что возразить ?
 

V
20 Nov 2003 1:08 PM
2 Прохожий :
Ну вы загнули ;) Сторонники Java английского то не знают и С/C++ тоже ;) Да и джава они не знают, если бы знали, то отказались бы от нее ;)
 

torvic
20 Nov 2003 1:14 PM
На лоре в "Гради Буч - о средствах разработки и их будущем" параллельно идет такой же флейм, похоже народ обиделся, что Буч на яву переезжает.
Кстати там была дельная мысль, что STL мы обязаны generic programming, а не С++, который просто по недоразумению оказался в нужное время в нужном месте.
 

V
20 Nov 2003 1:15 PM
2 Прохожий :
А по поводу STL, может вы знаете, как освободить память в vector, после того как часть элементов из него удалены ? ;)
 

Allutamhar
20 Nov 2003 1:15 PM
2Прохожий:
Неконкурентоспособностью. Возьмись за проект с явой и попробуй выйди на рынок(именно рынок, а не "корпоративные решения"). Проигрыш практически обеспечен. Конкуренты с радостью обойдут, попутно давая нелестные отзывы.
 

Прохожий
20 Nov 2003 1:20 PM
2 Allutamhar
---
Извините, но разве это довод? Пожалуйста, что-нибудь поконкретней, нежели факты из личной жизни.
 

miroh
20 Nov 2003 1:23 PM
Ну нету темплейтов - generics ни в яве ни в шарпе пока. Через несколько месяцев появятся - в 1.5. До сих пор это не мешало крупным компаниям - Boeing- у выбирать Java в качестве платформы для собственных корпоративных систем. А в С++ нет вложенных классов например или рефлексии. И чо С++ - дерьмовый язык?
 

V
20 Nov 2003 1:26 PM
2 torvic :
> На лоре в "Гради Буч
Так там так-же говорят, что программировать они не умеют и ни одного стоящего продукта не выпустили а учат других как надо программировать ;)
 

Allutamhar
20 Nov 2003 1:36 PM
2Прохожий:
Это очень серьезный довод. И он подтверждается жизнью. Оглянитесь и покажите пальцем на успешные продукты на яве, у которых есть конкуренты на С++.

Доказывать ресурсоемкость, тормознутость явы уже нет желания. Все пойдет по кругу. Главное, что все таки большинство программистов уже отошло от былого запала после запудривания мозгов явой. Да, есть еще те, кто наступит на грабли. Но они погоду не делают. А делает ее С/С++.
 

miroh
20 Nov 2003 1:42 PM
2Allutamhar
Успешные продукты?
Пожалуйста
Различные сервера приложений типа Oracle Bea WebSphere Orion resin которые вытеснили подобные сервера на С++
 

torvic
20 Nov 2003 1:47 PM
2 Прохожий, V
> Сторонникам Java есть что возразить ?
Для тех кто в танке, смотреть надо сюда:
let max = function x,y -> if x < y then y else x ;;
все ноги отсюда.
И .Нет очень кстати.
 

V
20 Nov 2003 1:47 PM
2 miroh :
> Успешные продукты? Пожалуйста
Вы еще Java WebServer "забыли" упомянуть, от Sun ;)
 

miroh
20 Nov 2003 1:59 PM
2V
Опять демагогия? Человек же просил привести успешные продукты - я их перечислил.
 

V
20 Nov 2003 2:07 PM
2 miroh :
Ну почему демагогия ? Вспомнилось просто, после упоминания про Resin. Опять же Corel на Java очень хорошо получился, с конкурентом ;)
 

Black Bat
20 Nov 2003 2:11 PM
а .NET + MSSQL всё равно лучше!
 

Allutamhar
20 Nov 2003 2:18 PM
2mihon:
Оглянитесь еще раз, пожалуйста.
Посмотрите на десктопы пользователей обычных. Тех, кто не является девелопером под яву. Что там у них есть? Ява в броузере и апплетики?
 

Прохожий
20 Nov 2003 2:19 PM
2 Allutamhar

А еще доводы есть ?
 

miroh
20 Nov 2003 2:27 PM
2Allutamhar
На десктопе ява - ноль. А с современными глюками в апплетах - и апплеты под вопросом. Вот мобильники и смарткарты - здесь есть прогресс большой
 

jstm
20 Nov 2003 2:47 PM
2 Allutamhar

Esio raz dlia teh kto v tanke :
Java sozdavalas NE dlia desktopov. Ona byla zadumana kak platforma
dlia raspredelionnyh byznes sistem, i zdes' ej do poslednego vremeni konkurencii nebylo. Pisateli riusechek na C++ i C prosba
siuda ne postit. Ogliadywajas' vokrug - prakticheski vse nashi krupnye klienty (v Germanii) vse! novye proekty planirujut zakazywat' na java. Za poslednij god odin byl na .Net - s peremennym uspehom. C/C++ ja videl u Deutsche Telekoma - billingovaja sistema - pisana 7 let nazad. Seichas obkatywajut
billing na Java. Deutsche Telekoma predstavliat' ne nado.
Esio raz - Rossija ne pokazatel'. Krome krupnyh bankow i gos monopolij zakazkikow bol'shogo korporativnogo softa tam net!
Absoliutno nerepresentativnyj rynok.
 

00alex
20 Nov 2003 3:05 PM
2jstm:
сейчас жди когда V опять вылезет с вопросом: "нет, вы мне объясните зачем при выделении память под Integer расходуются лишние 12 байт" ;-))

2V: прям удовольствие Вас читать :) (никогда не наблюдали маленького ребенка, как он исследует мир?)
 

V
20 Nov 2003 4:17 PM
2 00alex :
> никогда не наблюдали маленького ребенка, как он исследует мир?
Ну если вы себя считаете маленьким ребенком. Хотя тут уже одни невежество для себя выбрали, после того как игнорирование не подошло ;)
 

V
20 Nov 2003 4:24 PM
2 00alex :
> "нет, вы мне объясните зачем при выделении память под Integer расходуются лишние 12 байт"
Вы не ошиблись адресом случайно ? Обьяснений требовал jstm ( по идее Sun должен был их ему дать), я констатировал факт и говорил что при сложных проектах с большим количеством данных это приводит к плохим последствиям :)
 

V
20 Nov 2003 4:29 PM
2 jstm :
> billing na Java. Deutsche Telekoma predstavliat' ne nado.
Странные вы вещи говорите. Могу предположить, что у Дойче телекома оборудование от Дойче Siemens. А Дойче сименс использует мою текущую фирму для биллинга на C/C++ :) Возможно у них биллинговая система для чего то очень простого, телеком здесь ни при чем ;)
 

V
20 Nov 2003 4:39 PM
2 jstm :
> Pisateli riusechek na C++ i C prosba siuda ne postit.
Вы не разрешаете, да ?
 

Allutamhar
20 Nov 2003 4:41 PM
2jstm:
Вот на больших системах(клиент серверные с тысячами одновременных соединений) С++ делает яву на ура. Как раз в этих случаях экономия и скорость, помноженные на масштаб задачи, дают большой выигрыш. Напишите сервер на яве и на С++. Будет интересно сравнить производительность.
 

Ron
20 Nov 2003 5:00 PM
>> А по поводу STL, может вы знаете, как освободить память в vector, после того как часть элементов из него удалены ? ;)

std::vector<int> __my_vector;
// blah-blah-blah
// добавляем - удаляем
...
...
// и вдруг захотели почистить
std::vector<int>(__my_vector).swap(__my_vector);
// всё заняло одну строчку
 

jstm
20 Nov 2003 5:23 PM
2 Allutamhar

U moego znakomogo na robote seichas ispityvaetsia nekaja sistema - ne dlia sebia a na prodazhu. Server s biznes logikoj gibrid J2EE serverov + transportnye servera napisannye na c/c++ kotorye ne zanimaetsia nichem krome ochen' aktivnoj i umnoj dispetcherizacii, vsia biznes logika v Jave. Odin Java server derzhit do 15000-18000 connectov. Vsio rabotaet. Proizwoditel'nost' chego budem sravnivat' ?
My zhe uzhe vyjasnili chto sovremennye JVM pri gramotnom disaine prilozhenija prakticheski ne ustupajut
po skorosti C++ a po udobstvu i BEZOPASTNOSTI namnogo prevoshodiat. Trebuet bol'she pamiati - da., + 12 bait na klass. na C++ +4-8 bait. Pri gramotnom proektirovanii biznes objecty obychno namnogo prevyshajut etot razmer, sootwetstwenno raznica nesusestwenna.
 

Allutamhar
20 Nov 2003 5:27 PM
2jstm:
Если есть цифры, то надо бы и конфигурацию указать.
Что за система? Wintel или?
 

00alex
20 Nov 2003 5:37 PM
2V: Попробую ответить обстоятельно, надеясь, что у Вас хватит терпения прочитать _внимательно_ этот текст (может два или более раз), чтобы вдуматься в смысл, который я туды пытаюсь вложить (утверждение, что там вообще есть смысл спорное ;-)

Краткий анализ треда Ваших сообщений:
Посылка: "Java похоронят принципиальные недостатки виртуальной машины"
ауд: ... о принципиальных недостатках абстрактной виртуальной машины а не ее реализации в виде JVM

Среди таких недостатков Вы привели 3:
1) "кривое наследование от Object"
2) "единственная нить, которая может выделять память"
3) "Максимальный обьем памяти для виртуальной машины равен 4 ОЗУ"

ОТВЕТЫ:
1) если честно я не встречал задач, где требуется массив из миллиона Interger. Это извращение какое-то. Условно можно разделить такие задачи на научные (вычислительные) и накопительные (БД).
а) В научных задачах как правило все данные примитивные, алгоритмы их преобразования давно написаны на Фортране, и как правило этот язык и используется. В Java можно без напрягов использовать примитивные типы без накладных рассходов, но беда в отсутствии библиотек со всякими преобразованиями фурье и т.п.
б) В накопительных задачах используйте БД - они под это заточены, причем тут Java? Есть нормальное понятие курсора, для того чтобы "бегать" по записям и Вам не потребуется грузить всю базу в массив Interger а потом сгружать обратно на диск.
в) вероятно Вы имели ввиду какой-то третий род задач? Опишите свою задачу где Вам надо 1000000 Integer, а мы подумаем совместно, действительно ли это необходимо?

2) абстракнтая виртуальная машина тут не причем, вопрос в реализации. Т.е. это не убогость языка Java, а дело времени, когда напишут хорошую JVM (хотя из аудитории были реплики, что это вообще гон - с распределением памяти все хорошо, может и не везде)

3) Тут тоже сказали, что нет ни одной программы которая чувствует себя хорошо в режиме свопования. Честно говоря, я никогда не видел чтобы своп превышал размер ОЗУ в 2 раза. Если это происходит моя машина тихо умирает и я её перегружаю.

Если подытожить, то принципиальных недостатков у JVM нет. Есть недостатки реализаций.

Вместо формулировки вопросов "а есть ли задачи, которые на Джава удобно решать?", Вы цепляетесь к несущественным недостаткам.
К тому же Вы не внимательно читаете (даже сами где-то признались, что пропустили ответ на свой вопрос).

Почему я сравнил Вас с ребенком? Потому что маленькие дети очень наблюдательные, ярко реагируют на новые события (факты), и часто переключают внимание с одной вещи на другую, забывая про старую.
Вот такой как раз мне и показалась Ваша манера спора.

Ничего личного, временами читать было даже весело :)
 

V
20 Nov 2003 6:04 PM
2 00alex :
> Ничего личного, временами читать было даже весело :)
Ну так и мне не скучно ;)

Недостатков было приведено значительно больше ( наверное вы невнимательно читаете :)

> 1) если честно я не встречал задач, где требуется массив из
миллиона Interger.
> Опишите свою задачу где Вам надо 1000000 Integer, а мы подумаем совместно, действительно ли это необходимо?
Вот биллинг упоминали. Бывают услуги, на которые приходится по нескольку записей. Эти записи приходят в разное время, но считают по последней, с учетом предыдущих. Такие записи накапливаются ( их может быть и больше миллиона, в текущих задачах обьем больше нескольких гигабайт). Как вам такая задача, не встречалась ? Хотел бы я посмотреть, как вы будете со своим курсором бегать по базам данных ;)

> не убогость языка Java, а дело времени, когда напишут хорошую JVM
Так 13 лет ждем ;) Состариться не боитесь ?

> К тому же Вы не внимательно читаете (даже сами где-то признались, что пропустили ответ на свой вопрос).
Если вы заметили, информация на zdnet по страницам. Чтобы не искать я делал ( уже нет) закладки. Вот поэтому и пропустил.

> Если подытожить, то принципиальных недостатков у JVM нет.
Да, ну как знаете ;)

> часто переключают внимание с одной вещи на другую, забывая про старую.
Например ?

> Вот такой как раз мне и показалась Ваша манера спора.
Знаете, к вам это подходит в значительно большей степени + бездоказательные рассуждения на околонаучные темы ;)

 

V
20 Nov 2003 6:25 PM
2 00alex :
Хотя конечно я могу вас понять. Вы прочитали книгу, бывшего сантехника, о преимуществах программирования на Java, в которой для сравнения был приведен кривой код ( по неспособности автора) на C/C++. И тут вы видите немного другой код, работающий лучше. Конечно это обидно и доказательств привести нельзя ( только можно на личности перейти), но что поделаешь, жизнь - жестокая вещь ;)
 

miroh
20 Nov 2003 6:28 PM
2V
Это вы какой код имеете ввиду?
 

V
20 Nov 2003 6:41 PM
2 miroh :
> Это вы какой код имеете ввиду?
Тот который приводил jstm, когда хотел видеть "new" ;)

2 00alex :
> были реплики, что это вообще гон - с распределением памяти все хорошо, может и не везде
Так "гон" сразу прекратился, когда я попросил показать код тестового примера.
И так у вас было всегда, когда необходимы доказательства был только ваш "гон" ;)

Желаете проверить выделение памяти в нитях ?

 

me - userinternet.com
20 Nov 2003 6:41 PM
Товарищ V, чего ты мозги компостируешь на тему плюсов, если не знаешь, как из stl-вектора убрать неиспользуемый хвост? Оптимизатор хренов.

miroh, ничего личного, но 10 лет на С++ должны были рассказать любому умному человеку, что class и struct ничем не отличаются (private и public не в счёт)... Но это так, к слову пришлось :)).
 

miroh
20 Nov 2003 6:46 PM
2me
а где надо было хвост убирать?
И зачем рассказывать о class & struct?
парень например не знает как realloc работает (ну или вид делает) чего дальше обсуждать
 

me - userinternet.com
20 Nov 2003 6:52 PM
miroh, про хвост - это господину спорщику :)).

>> Про С++ - опять жульничество
Почему используется не класс а структура.

Вот зачем. Там правда пофиг.

ЗЫ: ну а про реаллок и всё остальное я вообще молчу :)). V совсем не понимает разницу между реализацией JVM и JVM :)). Ну и хрен с ним - вот моё мнение.
 

V
20 Nov 2003 7:03 PM
2 me :
> Товарищ V, чего ты мозги компостируешь на тему плюсов, если не знаешь, как из stl-вектора убрать неиспользуемый хвост?

it performs a number of element assignments and constructor calls proportional to the number of elements in the two controlled sequences.

Ну что "Оптимизатор хренов", по твоему по новой все элементы инициализировать хорошо ? ;)))
 

V
20 Nov 2003 7:05 PM
2 me :
> V совсем не понимает разницу между реализацией JVM и JVM :)).
И в чем разница ?
 

jstm
20 Nov 2003 7:05 PM
2 V
I opiat' sovral - pervaja realizacija JVM pojavilas' ne 13 a 8 let nazad !
13 let nazad nachali sozdavat' proobraz, prototipy, specifikaciju i t.d, kotoraja v principe lishena nedostatkov.
Ochen' molodaja technologija ja by skazal.
Nu chto ty budesh delat'... :(
 

V
20 Nov 2003 7:15 PM
2 jstm :
> I opiat' sovral
Ну что вам постоянно мерещится, что вас обманывают ?
13 лет разрабатывали ;) Ну желаете, 8 лет, какая разница, результат все равно плохой :)

 

V
20 Nov 2003 7:16 PM
2 jstm :
> Ochen' molodaja technologija ja by skazal.
Ну и когда созреет ?
 

V
20 Nov 2003 7:17 PM
Да, темен народ, и не активен ;)
 

V
20 Nov 2003 7:20 PM
А вообще странно, я думал про класс и структуру в C++ всем было и так ясно.
 

jstm
20 Nov 2003 7:29 PM
2 V
Jasen perec, chto jasno. Ja prosto pokazal tem primerom s new, chto pri odinakovom disaine koda,
vyigrysh C++ ochen' nebol'shoj.Drugoe delo chto na C++ mozhno vybrosit' OO zamorochki sovsem radi
vyigrysha v proizvoditel'nosti a na Java net. No eto budet vyholashivanie idei OO jazyka. Togda uzh luchshe
srazu na C ili ASMe pisat', zachem muchit' kompiliator. Tol'ko ja posmotrel by na togo kto sovremmennye bol'shie proekty na C/ASM delaet. Voobshem chitat' Bucha...
 

00alex
20 Nov 2003 7:32 PM
2V

>> 1) если честно я не встречал задач,
>> где требуется массив из миллиона Interger.
>> Опишите свою задачу где Вам надо 1000000 Integer,
>> а мы подумаем совместно, действительно ли это необходимо?

> Вот биллинг упоминали. Бывают услуги, на которые
> приходится по нескольку записей. Эти записи приходят
> в разное время, но считают по последней, с учетом
> предыдущих. Такие записи накапливаются ( их может быть
> и больше миллиона, в текущих задачах обьем больше
> нескольких гигабайт). Как вам такая задача, не встречалась?
> Хотел бы я посмотреть, как вы будете со своим курсором
> бегать по базам данных ;)

Что это за задача такая "Биллинг, где на запись приходится по нескольку записей"? формулируйте четче! ;-)

Предлагаю вариант задачи:
Необходимо написать биллинг просчитывающуюю 100 тыс. абонентов
в среднем каждый абонент "потребляет" по 1 услуге в день. Историю потребления надо хранить за 3 года.
Задача состоит в формировании отчетов по разным периодам и группам сервисов и, допустим для пущей сложности, детализацией вплоть до дней!

Так нормально?

Так вот я утверждаю, что эта задача решается с помощью СУБД, где, все давным давно оптимизировано, а узкие места (не связанные со скорость считываниям с винчестера данных) переписаны на ассемблере.
А Java как отображалка этого, может оперировать вполне количеством объектов ~1000 (больше человеку просмотреть глазами невозможно... они, панимаешь, разбигаться начинаются, а потом в кучку сваливаются!) :)

пробовали мегабайтный лог читать? после пары десятков страниц, ищешь инструмент, как бы найти искомое побыстрее...

Сформулируй задачу по-конкретнее, ты не убедил меня, что такие задачи существуют! :)

А то тоже придумаю абстрактную задачу, типа на 10^10 struct () даже С/С++ не справляется (в память не влезают), поэтому язык - отстой.
 

V
20 Nov 2003 7:34 PM
2 jstm :

> Ja prosto pokazal tem primerom s new
А я хотел сказать что new вызывался неявно ( с выделением памяти, конструктором), аллокатором, и второй new там был ни к чему.

> Voobshem chitat' Bucha...
Ну читайте ;)
 

Allutamhar
20 Nov 2003 7:35 PM
2jstm:
так какая была конфигурация у вашего "знакомого", к которого
"Odin Java server derzhit do 15000-18000 connectov"?
Держит коннекты - это только принятые соединения без какой-либо обработки(так, для теста)? Я же имею в виду работу клиент-серверной системы в режиме рилтайм сжатия+шифрации каждого коннекта.
 

V
20 Nov 2003 7:40 PM
2 00alex :
> Необходимо написать биллинг просчитывающуюю 100 тыс. абонентов
в среднем каждый абонент "потребляет" по 1 услуге в день. Историю потребления надо хранить за 3 года.
Задача состоит в формировании отчетов по разным периодам и группам сервисов и, допустим для пущей сложности, детализацией вплоть до дней!

"Унылая пора ..."

Я так помню e-plus - оператор мобильной связи 1000000 абонентов. GPRS, обычные, международные, зоновые звонки, тарифные планы, льготы, MMS, SMS, коммутатор, доп. услуги. Утверждаю - заморится Java ;) Хотя если абонентов заставить посылать только по одному пакету GPRS в день ( они откажутся ;) может и будет обрабатывать данные одного месяца в течении двух. ;)
 

V
20 Nov 2003 7:41 PM
Так чего, память выделять в Java при нитях будем уже завтра ? Или не будем ?
 

V
20 Nov 2003 7:49 PM
2 miroh :
Надо наверное и про realloc обьяснить ;)
> realloc adjusts the size of the allocated block to size, copying the contents to a new location if necessary.
Как бы обьяснить, попроще ( чтобы не сказали что обманываю), эта функция меняет размер массива ( старую информацию не затирает) или создает новый + копирует значения предидущего массива :) Так понятно ? Т.о. в моей программе все элементы на месте и "жульничать" я и не думал ( в отличии от некоторых ;)
 

CrazyMax
20 Nov 2003 7:51 PM
2V:

---Цитирую:

Унылая пора ..."

Я так помню e-plus - оператор мобильной связи 1000000 абонентов. GPRS, обычные, международные, зоновые звонки, тарифные планы, льготы, MMS, SMS, коммутатор, доп. услуги. Утверждаю - заморится Java ;) Хотя если абонентов заставить посылать только по одному пакету GPRS в день ( они откажутся ;) может и будет обрабатывать данные одного месяца в течении двух. ;)

---Конец цитаты

Это полный бред. Как раз на Java такую вещь и стоило бы делать.
 

CrazyMax
20 Nov 2003 7:52 PM
2V:

вдогонку

А на C++ и будете как раз до своего 70-го дня рождения memory leak и прочие баги вылавливать.
 

jstm
20 Nov 2003 8:12 PM
2 V
--А я хотел сказать что new вызывался неявно ( с выделением памяти, конструктором), аллокатором, и --второй new там был ни к чему.

Nu blin ja prosto sintaksicheski odinakovye primery pokazal - u nekotoryh voznikli somnenija t.k. durackij mestami sintaksis C++ zastavliajet polzat' po header failam v poiskah opisanija parametrov i shodu ne vidno peredaetsia object po ssyslke ili po znacheniju. Ochen' chitabel'no zaete li.

 

torvic
20 Nov 2003 8:12 PM
> Ну нету темплейтов - generics ни в яве ни в шарпе пока. Через несколько месяцев появятся - в 1.5.
Апологетам явы вопрос: а кто-нибудь уже потрошил эту тигру? Правда что поддержка шаблонов для типов-значений невозможна в принципе и будет генериться спец.класс, который затем будет использоваться для любого подставляемого типа?
Так что похоже нормальная реализация только в сишарпе и будет :)
 

V
20 Nov 2003 8:14 PM
2 CrazyMax :
> Это полный бред. Как раз на Java такую вещь и стоило бы делать.
Бездоказательные рассуждения и вдогонку тоже ;)
 

V
20 Nov 2003 8:18 PM
2 jstm :
> Nu blin ja prosto sintaksicheski odinakovye primery pokazal
а я физически одинаковы примеры привел, потому как JVM просит у ОС память побольше а потом внутри ее перераспределяет и при этом утверждает что делает полноценное выделение памяти и очень быстро ;)
 

00alex
20 Nov 2003 8:21 PM
2V, я правильно тебя понял, что все эти данные должны одновременно содержаться в памяти одной программы? :)
 

V
20 Nov 2003 8:35 PM
2 00alex :
> я правильно тебя понял, что все эти данные должны одновременно содержаться в памяти одной программы? :)
Одной или больше, в памяти или нет, в C/C++ я могу делать все что хочу ;) Какя вам разница ? Опять копаете ?
 

00alex
21 Nov 2003 12:36 AM
2V, конечно копаю, я копаю под Вас, потому что Вы копаете под Java ;-)
Нет универсальных языков программирования, есть задачи, для которых можно найти оптимальный язык. И есть языки, которые для каких-то задач бывают оптимальными.

Если вы хотите сформулировать свой тезис, что не существует задачи для которой бы Java была оптимальным языком, ИМХО, Вы заблуждаетесь. Спорить тут бесполезно, слишком много относительных факторов, в частности, если Вы не знаете или плохо знаете Java - то для Вас он не будет оптимальным никогда. Равно, как и для меня.

"я могу делать все что хочу" - одна из целей Java, как раз была побороть эту фичу. Является ли это достоинством или недостатком - опять же зависит от задачи.

Расскажу пример из собственного опыта. Мне нужно было написать многопотоковую программу работающую с Oracle. В то время ещё не было JDBC драйвера под Oracle, но был OCI (oracle call interface) для C. И вот мне пришлось написать немного нэйтив кода и я приделал Java к Oracle. Проект занял где-то месяц. На C++ я бы ковырялся бог знает скока (опыта написания под Unix мультитредовых приложений у меня не было, а в Java разобрался достаточно быстро), да и ловить баги всякие или мемори-лики.
И вот была там одна хитрость, прога на Java в странный непонятный момент переставала работать. И о чудо! Пришла в голову мысль, что из-за того, что Java сама управляется с памятью, а Oracle НУЖНО чтобы данные лежали строго в одном месте, мне пришлось переписать на нэйтив чуть больше кода, и выделять под Оракловые структуры память на C++.
Вроде бы к чему я все это говорю? Из этого следует Java-отстой?

Ан нет. Вывод-то другой, я безболезненно вставил С-код в Java программу (убив нахрен переносимость, но она мне и не нужна была), но написал _стабильно_работающую_ программу в сжатые сроки!

Конечно, найдется гуру C++, который бы за 2 недели то же самое наваял, но где ж этих Гуру взять? Они все вон заняты делом, а у нас план...
 

miroh
21 Nov 2003 8:38 AM
2V
про realloc - еще раз посмотрел код. Я был не прав извините.Почему то не заметил, что размер блока увеличивается.
Только нафига вообще тогда этот цикл с блоками по 10-ть test-в устраивать, если можно сразу все выделить одним махом как torvic. Тем более, что если между реаллоками в кучу еще что нибудь попадет и не окажется свободного места для увеличения - вся ваша оптимизация улетит в трубу.
Еще раз за обвинения в жульничестве извините.
 

iZEN - izenmail.ru
21 Nov 2003 11:35 AM
Классик даёт интервью:
http://www.fcenter.ru/forprint.shtml?interview/7963
 

V
21 Nov 2003 11:36 AM
2 miroh :
> Только нафига вообще тогда этот цикл с блоками по 10-ть test-в устраивать
Физически имитировать аналогичную операцию, как в Java. В этот массив вы можете добавлять любое количество элементов, не только 100000.

> Тем более, что если между реаллоками в кучу еще что нибудь попадет и не окажется свободного места для увеличения - вся ваша оптимизация улетит в трубу.
Наверное вы еще не все понимаете :)

2 00alex :
> конечно копаю, я копаю под Вас, потому что Вы копаете под Java ;-)
Я уже писал, что не против Java, просто на сервере ей не место ;) Кто то писал, что ждет новой реализации JVM. Хотя в статье, исп. дир. о новой JVM не говорит. Они собираются EE двигать. Так что "а воз и ныне там".

> В то время ещё не было JDBC драйвера под Oracle, но был OCI (oracle call interface) для C.
Вы случайно версию Oracle и Java для того времени не вспомните ? ;)

 

me - userinternet.com
21 Nov 2003 11:46 AM
void swap(_Myt& _Right)
{ // exchange contents with _Right
if (this->_Alval == _Right._Alval)
{ // same allocator, swap control information
std::swap(_Myfirst, _Right._Myfirst);
std::swap(_Mylast, _Right._Mylast);
std::swap(_Myend, _Right._Myend);
}
else
{ // different allocator, do multiple assigns
_Myt _Ts = *this; *this = _Right, _Right = _Ts;
}
}

Это фрагмент реализации вектора из достаточно популярной stl-библиотеки. V, не мог бы ты мне подсказать, где там копирование хотя бы одного элемента? То, что в ветке else - не подходит, так как мы в состоянии обеспечить одинаковость аллокатора при вызове swap.

Про жавовские шаблоны: это не будут шаблоны вообще. Инстанцировать их никто никогда не будет, специализации писать тоже бесполезно (и нельзя, само собой). Вместо этого всего компилятор будет подставлять приведение типов, где необходимо. Примитивные типы хранить, естественно нельзя, но для решения этой проблемы в 1.5 вводят autoboxing, так что int будет неявно преобразовываться в java.lang.Integer.

ЗЫ: На всякий случай скажу, что язык Java мне очень не нравится за свою убогость. А вот жава-машина вполне даже ничего. Кто бы её только по-нормальному заимплементил... (мечтательно)
 

V
21 Nov 2003 11:49 AM
2 iZEN :
У меня отношение к таким людям не очень хорошее ;)
 

miroh
21 Nov 2003 11:52 AM
2V
Все я понимаю - ralloc пытается увеличить блок по старому адресу. Если не удается (в куче уже появился блок вслед за этим) - переносит его.
Если блок уже большой - как то некрасиво будет.
А имитировать ситуацию все равно не удалось - разные совсем алгоритмы
 

iZEN - izenmail.ru
21 Nov 2003 1:31 PM
Байт-код в видео... ;)))
"Пиксельные шейдеры DirectX 9 не исполняются непосредственно графическим процессором. Сначала DirectX переводит шейдер в универсальный промежуточный код, и лишь потом драйвер видеокарты, получая этот код, компилирует его в команды пиксельного процессора.
Как раз на этапе компиляции промежуточного кода и задействуется новая технология от NVIDIA - NVIDIA Unified Compiler Technology, входящая в состав драйвера, получившего название ForceWare. Цель оптимизирующего компилятора - принимая во внимание особенности архитектуры GeForce FX, составить на выходе такую последовательность команд, которая будет исполняться графическим процессором с максимальной скоростью.
Для этого компилятор "разбирает", анализирует и заново "собирает" шейдер, и может, например, если это возможно, переставить команды, сгруппировав попарно текстурные и математические операции, уменьшить количество используемых временных регистров, снизить число команд, применив команды, чья аппаратная поддержка есть только у GeForce FX, и т.д..
Критерий оптимизации - максимальная скорость исполнения выходного кода, неукоснительное требование - полное соответствие выходных параметров оптимизированного и исходного шейдера. То есть, при использовании оптимизирующего компилятора потери в качестве, по заявлениям NVIDIA, полностью исключены."
http://www.fcenter.ru/forprint.shtml?videos/7708
 

iZEN - izenmail.ru
21 Nov 2003 1:37 PM
2V,2me
Давайте бороться против Java на серверах! А то как-то несерьёзно получилось: с десктопов вытеснили и оставили ковыряться лишь в песочнице (апплеты), а до серверов как-то руки не доходили года четыре. eBay что-ли завалить сначала?
Неудобно, мешается под ногами у C++, понимаешь, проходу не даёт...
 

V
21 Nov 2003 2:57 PM
2 miroh :
> А имитировать ситуацию все равно не удалось - разные совсем алгоритмы
Виртуальную машину писать я не собирался :)

2 iZEN :
> по заявлениям NVIDIA,
А они очковтирательством уже перестали заниматься ? ;)

> как-то руки не доходили года четыре
Еще как доходили :)

2 me :
Чья библиотека ? Для анализа маловато данных, я вам таких кусочков могу привести много ;) Поскольку строки всего 3, то скорее всего в "вашей библиотеке" происходит следующее : 1 - инициализируются begin, 2 - инициализируется end, 3 обмен данными аллокаторов ( элементы ;). В данном случае имена странные, но я думаю все как и у остальных ;)
А в чем собственно дело то ? Решили мои знания STL проверить ?
Так друг вашего Страутрупа, говорил, что можете вызубрить C++, но при решении реальных задач вам это не поможет ;)
Могу предложить проверку вам, ну и STL заодно. Попробуйте реализуйте на своих std::string вариант программы на Java приведенный ниже, чтобы работал быстрее Java ;) Программа формирует строку добавлением ASCI представления счетчика ;)

class Test {
public static void main( String[] args) {
StringBuffer str = new StringBuffer();
for( int i = 0; i < 100000; i++) {
str.append( Integer.toString(i));
}
}
}

Митинг у меня был, прошу прощения за задержку. А теперь обед ;)
 

torvic
21 Nov 2003 4:26 PM
2 me
> Про жавовские шаблоны: это не будут шаблоны вообще. ... Вместо этого всего компилятор будет подставлять приведение типов, где необходимо.
Ха-ха-ха я так и думал. Только после этого вывод "А вот жава-машина вполне даже ничего" очень странен.
 

me - userinternet.com
21 Nov 2003 4:42 PM
torvic, жава-машина достаточно проста - это и есть главное её достоинство. Плюс там есть вполне приличный простор для оптимизации.

V, ты явно не понимаешь что такое vector::swap и почему его обычно используют.
Строки:
int main() {
std::stringstream ss;
for (int i = 0; i < 100000; ++i) {
ss << i;
}
}
производительность меряй сам.
 

V
21 Nov 2003 5:54 PM
2 me :
> V, ты явно не понимаешь что такое vector::swap и почему его обычно используют.
Уважаемый еще и экстрасенс, по совместительству. Потому как не получив ответа от меня вы уже знаете чего я не понимаю ;)
Вы наверное думаете, что я не понимаю, потому как просил освободить память у одного вектора, в то время как вы предложили сделать swap с пустым вектором. Конечно это не совсем то что я просил ( и абсолютно неприемлемо в реальных ситуациях ;). Но я вижу у вас просто считается нормальным делать то, чего вас никто не просил. Стринги один из напримеров. Требовалось std::string а вы лепите stringstream.
Впрочем результат по быстродействию ( Java в 53 раза быстрее) получился как гововорят "отстойный" . Чего собственно я от вас и ожидал ;)))

 

torvic
21 Nov 2003 6:07 PM
Ну да, так проста, что даже шаблоны нормально не реализуешь. Этак я хоть щас и в С# могу наваять:

----
using System;

public class myTemplate
{
public object templateMax(object x, object y)
{
if ((((IComparable) x).CompareTo(y)) < 0)
return y;
else
return x;
}
}

public class Tester
{
static void Main()
{
myTemplate t = new myTemplate();
Console.WriteLine ("{0} {1}", (int) t.templateMax(1,2), (float) t.templateMax(0.5f,1.5f));
}
}
 

V
21 Nov 2003 6:07 PM
Для тех кто хочет сравнить :
#include <iostream>
#include <sstream>
#include <time.h>

int main() {
long t = time( );
std::stringstream ss;
for( int i = 0; i < 100000; i++) {
ss << i;
}
std::cout << "Time : " << time( NULL)-t << std::endl;
}

 

V
21 Nov 2003 6:09 PM
У меня на машине было :
Java - 0.150 сек
me + STL - 8 сек

 

00alex
21 Nov 2003 6:10 PM
2V:
Oracle 7.x
Java 1.0x -> 1.1 (в это время как раз переползала)
 

CrazyMax
21 Nov 2003 6:19 PM
2V:
именно ваше бездоказательное бредовое рассуждение. Спецом для Вас процитирую еще раз:
---Цитирую:
Унылая пора ..."

Я так помню e-plus - оператор мобильной связи 1000000 абонентов. GPRS, обычные, международные, зоновые звонки, тарифные планы, льготы, MMS, SMS, коммутатор, доп. услуги. Утверждаю - заморится Java ;) Хотя если абонентов заставить посылать только по одному пакету GPRS в день ( они откажутся ;) может и будет обрабатывать данные одного месяца в течении двух. ;)
---Конец цитаты

И еще раз спецом для Вас уважаемый V повторю свое мнение о вашем высказывании - это горячечный бред. Бездоказательные обвинения и роспить ваша в вашем же не совсем глубоком( а я бы не назвал и поверхностным), знанием обсуждаемого предмета.

 

V
21 Nov 2003 6:27 PM
2 CrazyMax :
> И еще раз спецом для Вас уважаемый V повторю свое мнение
Вы знаете что повторяйте "Халва, халва, халва ..." Вдруг вам слаще станет ;)
 

V
21 Nov 2003 6:33 PM
2 00alex :
Странные вещи вы говорите. Точных дат я не помню ( давно было), но постараюсь не забыть диски, тех времен. Потому как для Оракла 7.х JDBC драйвера уже были на фирменном диске, вместе с ораклом и ODBC. Помню ODBC с диска, после установки, просто выдавали Access violation. Мы спрашивали тогда у представителей оракла. Они сказали качать драйвера по интернет, там все исправлено ;)
 

torvic
21 Nov 2003 6:33 PM
>>> Кто бы её только по-нормальному заимплементил... (мечтательно)
Дык некому, у МС уже своя есть :)))
 

V
21 Nov 2003 6:36 PM
Че то "me" молчит. Наверное Страуструпа, 3е издание штудирует, аллокаторы пишет ;)
 

V
21 Nov 2003 7:09 PM
2 torvic, CrazyMax :
Мда, с этими STL про выделение памяти в нитях для Java забыл обсудить ;)
 

me - userinternet.com
21 Nov 2003 7:58 PM
Итак, vector::swap на выполнение требует постоянного времени (для тех, кто в танке: не зависит от количества элементов в векторе). Лично мне неизвестны такие "реальные задачи", где бы константная сложность мешала.

Про идиотский тестик со строками. У компилятора (МС) есть такой ключик - /O2. Его надо обязательно включать :)). И аллокаторы можно не писать.
 

V
21 Nov 2003 8:24 PM
2 me :
А я думал вы что нибудь из программ напишете ;)

2 torvic, CrazyMax :
А вот и небольшая программка c выделением памяти ;)
Запускать : java Test 4 100000
В данном случае значит сделать 4 нити и каждая нить должна выполнить цикл 25000 раз. При 2 нитях по 50000. На 2х процессорных машин, время для 1 нити должно быть почти в 2 раза больше. Как проверите, закомментируйте арифметику в run и поставьте new. Сравните время ;) ( только я не очень проверял код, сейчас времени нет)

//---
public class Test implements Runnable {
public static void main( String[] args) throws Exception {
if ( args.length < 2) {
System.out.println("Usage : java Test N COUNT");
System.exit( 0);
}
n = Integer.parseInt( args[0]);
count = Integer.parseInt( args[1])/n;
System.out.println("Testing "+n+" threads for "+count);
long t = System.currentTimeMillis();
for( int i = 0; i < n; i++) {
Thread th = new Thread( new Test());
th.start();
th.join();
}
System.out.println("Time : "+
(System.currentTimeMillis()-t));
}
public void run() {
int a;
for( int i = 0; i < count; i++) {
// new Integer( i);
a = i/100;
}
}
static int n, count;
}

 

torvic
21 Nov 2003 8:30 PM
У меня ява только на работе
 

V
21 Nov 2003 8:43 PM
2 me :
> И аллокаторы можно не писать.
Я за вас рад. И что, это помогло вам написать простенький тестик ? ;)
 

me - userinternet.com
21 Nov 2003 8:54 PM
>> У меня на машине было :
Java - 0.150 сек
me + STL - 8 сек

А у меня - 60мс - жава, и 0мс - С++... Странно, правда?
 

V
21 Nov 2003 9:13 PM
2 me :
> А у меня - 60мс - жава, и 0мс - С++... Странно, правда?
Странно, это ваш M$ такое вам сказал, что 0 ? ;)
 

V
21 Nov 2003 9:19 PM
2 me :
Ну что же, если еще у кого нибудь 0, тогда мы будем вас проверять ;)
 

V
21 Nov 2003 9:21 PM
2 me :
А вообще это круто, по STL-ки ;) А вы отрицательные числа не получали ;)
 

jstm
21 Nov 2003 10:36 PM
2 V

На моей машине,
без new Integer(i) :

Testing 1 threads for 1000000
Time : 31

Testing 2 threads for 500000
Time : 31

Testing 4 threads for 250000
Time : 32

Testing 10 threads for 100000
Time : 31

c new Integer(i) :

Testing 1 threads for 1000000
Time : 47

Testing 2 threads for 500000
Time : 47

Testing 4 threads for 250000
Time : 46

Testing 10 threads for 100000
Time : 47

Везде константа. Ну и ?
 

jstm
21 Nov 2003 10:45 PM
2 V

//..все "new" выстраиваются в очередь и выполняются //последовательно. Это приводит к тому что на SMP системах //производительность приближается к однопроцессорной системе ..

//На 2х процессорных машин, время для 1 нити должно быть почти
//в 2 раза больше

Я так понял этот код нужно на многоголовой машине проверять ?
В понедельник проверю..
 

Chkaloff
22 Nov 2003 2:28 PM
2 torvic:
Шаблоны для того и нужны, чтобы можно было сделать какую-то общую реализацию для разных типов, но при этом их не запаковывать в object и обратно. Т.е. соответственно не терять на этом производительность.

Кстати в проекте спецификации по поводу C# 2.0, которую MS не так давно представила, как раз об этом и говорится. Т.е. в C# в момент компиляции компилятор тоже будет решать, для какого типа делать реализацию данного шаблона.
 

torvic
22 Nov 2003 7:10 PM
Дык а я про что? Про тоже самое! Могу еще раз поиздеваться: нормальная реализация шаблонов будет только в С#.
В С++ - не шаблоны вовсе, а так препроцессор на уровне текста.
В Яве - неэффективно для типов-значений.
Обидно, но факт :)
 

rGlory
22 Nov 2003 8:21 PM
2 torvic
> нормальная реализация шаблонов будет только в С#.
Ну вот когда будет, тогда и поговорим. А пока в С++ оно уже давно есть, только вот пользоваться не все умеют (и далеко не все). И многие из тех, кто не умел ринулись в джаву и C#. Смогут они там писать хорошие программы? Ну очень сомнительно. Это только менеджеры верять в "серебряную пулю". Мол не дадим возможность непрофессиональным программистам создавать утечки памяти итд итп и они сразу станут профессиональными. Как дети, ей богу. Еще раз, для тех кто в танке - сказки про утечки памяти придумали для маркетинга новых языков со сборкой мусора. Я не скажу ничего плохого ни про джава, ни про C# как языки, только думаю, что пролетят и с джавой и с C#, в смысле не оправдают надежд. И не потому, что плохие языки, а потому что надежды возлагаются нереальные. А надежды эти, что плохие программисты с использованием новых "чудо" языков будут писать хорошие программы. Только плохой программист, он и на джаве плохую программу напишет, стиль хорошего виден и в программе на бейсике (хотя про бейсик это я перегнул :o).
 

rGlory
22 Nov 2003 8:24 PM
2 V
Я не пишу на джаве, но имхо в том коде join нужно делать в отдельном цикле, предварительно запомнив нити в массиве. А иначе получается эмуляция однонитиевой программы
 

Ron
23 Nov 2003 1:37 AM
>> Итак, vector::swap на выполнение требует постоянного времени

И, добавлю свои пять копеек для V - ни при каких условиях не генерирует ексцепшен, что иногда делает её использование просто необходимым.
 

V
24 Nov 2003 11:21 AM
2 rGlory :
> Я не пишу на джаве, но имхо в том коде join нужно делать в отдельном цикле
Вот, видите, теперь же есть о чем говорить ;) Хотя я всю субботу и воскресенье думал, откопают грабли или наступят ? ;) Конечно программу нужно слегка изменить. Хотя конечно я оставил слишком много явных подсказок ;)

 

V
24 Nov 2003 11:23 AM
2 me :
Ну что, привести к одному порядку величины для C++ и Java удалось ? Пора и выводы делать ;)
 

V
24 Nov 2003 11:27 AM
2 Ron :
>>> Итак, vector::swap на выполнение требует постоянного времени
Ну надо еще чуть чуть добавлять, что не всегда ;) Хотя мне интересно, что за "реальная задача" у "me" с применением swap да еще и с одним и тем же аллокатором ?
 

me - userinternet.com
24 Nov 2003 11:44 AM
>> В С++ - не шаблоны вовсе, а так препроцессор на уровне текста
А лопаткой по ...? :)))

>> что за "реальная задача" с применением swap да еще и с одним и тем же аллокатором ?
Ты бы читал, что пишешь, что ли... Сам же спросил, как обрезать хвост у stl-вектора. Ron тебе показал как. Скажи спасибо теперь, а не лай.

Почитал про шаблоны на шарпе :)). Молодцы МС, однако, хотя гибкости-то чуток поубавилось. Зато скока фенек! :))

ЗЫ: Про строки для V: жава - 60мс (это я округлил. на самом деле от 62 до 78 мс), C++ (STL) - 0мс. Иногда 1мс, но редко. П4, 512Мб. Ну давай делать выводы. Кстати, V, ты вроде против жавы тут выступал поначалу...
 

V
24 Nov 2003 11:47 AM
public class Test implements Runnable {
public static void main( String[] args) throws Exception {
if ( args.length < 2) {
System.out.println("Usage : java Test N COUNT");
System.exit( 0);
}
n = Integer.parseInt( args[0]);
count = Integer.parseInt( args[1])/n;
System.out.println("Testing "+n+" threads for "+count);
Thread[] th = new Thread[n];
long t = System.currentTimeMillis();
for( int i = 0; i < n; i++) {
th[i] = new Thread( new Test());
th[i].start();
}
for( int i = 0; i < n; i++) {
th[i].join();
}
System.out.println("Time : "+
(System.currentTimeMillis()-t));
}
public void run() {
int a;
for( int i = 0; i < count; i++) {
// new Integer( i);
a = i/100;
}
}
static int n, count;
}

 

V
24 Nov 2003 11:56 AM
2 me :
Ладно, пробуем проверить ? ;)
Вы не могли бы привести код ( еще раз), для программы, у которой вы получили время 0-1 мс ?
 

me - userinternet.com
24 Nov 2003 12:05 PM
21 ноября, 2003, 18:07 - V
Для тех кто хочет сравнить :
#include <iostream>
#include <sstream>
#include <time.h>

int main() {
long t = time( );
std::stringstream ss;
for( int i = 0; i < 100000; i++) {
ss << i;
}
std::cout << "Time : " << time( NULL)-t << std::endl;
}

я сделал copy & paste, скомпилил и запустил. Даже без /O2.

ЗЫ: Я-то знаю в чём дело, дорогой друг :))
 

torvic
24 Nov 2003 12:05 PM
> гибкости-то чуток поубавилось
Пример плиз
 

V
24 Nov 2003 12:13 PM
2 me :
> ЗЫ: Я-то знаю в чём дело, дорогой друг :))
И в чем ? ;)
 

V
24 Nov 2003 12:17 PM
2 me :
> time gives the current time, in seconds
Вобщем надоело, в секундах время в плюсе. Теперь вы знаете. А теперь сделайте 1000000 циклов и назовите время ;)
 

me - userinternet.com
24 Nov 2003 12:20 PM
Цитата из доки: Return the time in elapsed seconds.

В миллисекундах будет 78 штук. Почти так же, как и в жаве (медленнее за счёт того, что жава-машина память выделяет при запуске, а С++ программа на ходу). И что, кстати, это значит? :))

torvic, в шарпе не будет (как написано) таких же прозрачных специализаций, как в плюсах (только через наследование), и нельзя задавать константы в качестве параметров шаблонов. В остальном всё классно.
 

V
24 Nov 2003 12:28 PM
2 me :
> В миллисекундах будет 78 штук.
Вот ;) Из этого следует ( вывод), что будете пользоваться STL - будете получать результат от почти "отстойного" до "отстойного" абсолютно ( все зависит от производителя ПО).
Хотя если вы написали, что много проектов у вас было, то должны были по идее знать, в чем измеряется время в time ;)
Пока все, сейчас нет времени.
 

me - userinternet.com
24 Nov 2003 12:42 PM
Так напиши, как надо. Не используя STL. "По-нормальному". strcpy() :))
 

Qrot
24 Nov 2003 1:00 PM
me: ну этот бот понятно ни жабы ни плюсов не знает, но вы то.. отец, можно сказать, русского программизма, а повелись как дите малое :)
две вещи - 1. приведенный жабский код не использует локаль при конвертации, в то время как плюсовый использует. 2. жаба выделяет память заранее, как и шарп - мы это здесь уже как то изучали, помните? :) и ради бога, юзайте ostrstream, оно быстрее, а если ему и буфер дать заранее выделенный, то вообще летает. а вот жабу уже не соптимизируешь..

V: это вы так языкам обучаетесь, да? чушь порете на каждом шагу и ждете что бы аргументированно опровергли.. сходите на rsdn, вам там быстрее ответят и более полно.
 

torvic
24 Nov 2003 1:02 PM
2 me
> в шарпе не будет
Это да, в этом плане они попроще
 

me - userinternet.com
24 Nov 2003 1:28 PM
Qrot, этот товарищ наехал на святое - STL. Низзя прощать :)).
А stringstream я намеренно написал. Чтоб были честные строки.

>> но вы то.. отец, можно сказать, русского программизма, а повелись как дите малое :)
Читаю я, понимаешь, любимый форум, а тут - оп-па - х..ми меряются. Ну а я чё? Я достал :))). Посмеялся заодно.
 

V
24 Nov 2003 2:19 PM
2 me :
> Так напиши, как надо. Не используя STL. "По-нормальному". strcpy() :))
Вы наверное хотели написать strncpy ?
> Посмеялся заодно.
Над собственной глупостью ? ;)

Теперь насчет того, чего я просил ;) Я просил освободить память, после удаления части элементов. Код приводить надо ? А вы в какой-то swap полезли, начали утверждать что я это просил и что это от чего-то помогает ;)

2 Qrot :
> и ради бога, юзайте ostrstream
Конечно юзайте, правда в документации написано что This is a deprecated feature and might not be available in future versions.
Но вам ведь это ни о чем не говорит ;)

> 1. приведенный жабский код не использует локаль при конвертации
Если вы случайно забыли, у Java юникод в строках ( причем везде ;)

Итого. Вам надо работать "вожаками". Только вместо буквы "в" в слове "вожак" вам надо писать "л". Потому что вы, постоянно, несете такую "лажу" ;)))
 

V
24 Nov 2003 2:20 PM
2 jstm :
Как там результаты по Java ?
 

Qrot
24 Nov 2003 2:37 PM
V: LOL. а юникод здесь причем?
 

me - userinternet.com
24 Nov 2003 2:52 PM
>> Код приводить надо ?
Обязательно.

>> а юникод здесь причем?
Думаю, наш пионер имел в виду то, что юникодовские буковки занимают по два байта, из чего следует вывод, что жавовская строка в два раза больше места занимает (типа, больше памяти за меньшее время). Какая ему разница, в конце концов, использует жава UTF8 или UTF16? :))
 

Qrot
24 Nov 2003 2:55 PM
V: strstream часть текущего стандарта C++, как и stringstream. так что претензии свои возьмите обратно.
 

jstm
24 Nov 2003 2:59 PM
2 V
Na servake kuda u menia dostup staraja java stoit.
Postavliu novuju - soobshiu resultaty.

 

Qrot
24 Nov 2003 3:01 PM
me: да нет, он просто не знает, что такое локаль и как она используется при конвертации чисел в строки.
 

V
24 Nov 2003 4:24 PM
2 Qrot, me :
> да нет, он просто не знает, что такое локаль и как она используется при конвертации чисел в строки.
То что вы ничего не знаете, вы уже показали много раз ;)
Вы так уверены что оператор вывода в поток для int будет еще и пытаться локаль использовать ? ;)
 

V
24 Nov 2003 4:25 PM
2 jstm :
> Postavliu novuju - soobshiu resultaty
Хорошо, вечером посмотрим.
 

Qrot
24 Nov 2003 4:33 PM
V: а вы что, утверждаете обратное? да вы просто LOLка :)
 

V
24 Nov 2003 4:42 PM
2 me :
2 me :
>> Код приводить надо ?
> Обязательно.
А сам написать не можешь ;)

Запускаешь Task Manager ( или ps с ключами) и смотришь память после каждого "Type any string" ;)
//---
#include <iostream>
#include <vector>

class Test {
public :
int a;
};

const int count = 100000;

int main( int argc, char* argv[]) {
char buf[1024];
{
std::vector<Test> v;
std::vector<Test> c;
Test a;
for( int i = 0; i < count; i++) {
a.a = i;
v.push_back( a);
}
int j = 0;
for( std::vector<Test>::iterator i = v.begin();
i != v.end(); i++) {
v.erase( i);
if ( j++ > count/2) break;
}
std::cout << "Type any string 1 : ";
std::cin >> buf;
c.swap( v);
std::cout << "Type any string 2 : ";
std::cin >> buf;
}
std::cout << "Type any string 3 : ";
std::cin >> buf;
return 0;
}

 

V
24 Nov 2003 5:08 PM
2 Qrot :
> а вы что, утверждаете обратное? да вы просто LOLка :)
Если это правда ( я это посмотрю позже, сейчас нет времени), то это очередной идиотизм STL. Какое может быть преобразование локали для чисел ?
 

Qrot
24 Nov 2003 5:38 PM
V: ну я же сказал, вы не знаете элементарных вещей, а еще лезете с поучениями... как вы думаете, для чего служит категория LC_NUMERIC?
 

ggv
24 Nov 2003 6:57 PM
Qrot - я думал вы уже завязали около-IT-шные темы с болталкой обсуждать.
Qrot - мои regards по поводу красиво посчитанного обоснования priority inversion - боюсь вы их там в треде не посчитали.
Вы смогли математикой изложить то, что я седалищем чувствовал :)
 

V
24 Nov 2003 8:04 PM
2 Qrot :
> как вы думаете, для чего служит категория LC_NUMERIC
Выбирает формат чисел, группировку, разделитель групп, десятичную точку.
То есть вы утверждаете что в вашем примере на C++ stringstream работает LC_NUMERIC и когда делаете << 1234567890 то на экран получаете 1'234'567'890, и поэтому "отстойный результат" ?

> ну я же сказал, вы не знаете
Я не утверждал, что знаю все. В принципе, для того чтобы собрать кубик "рубика" ( решить задачу) нет необходимости знать все возможные его состояния. Достаточно знать алгоритм, по которому его можно собрать.

2 ggv :
> Qrot - я думал вы уже завязали около-IT-шные темы с болталкой обсуждать.
Что тут обсуждать, он ушел в swap, ищет способ память освободить ;) Ignoring выберет ( вы ignorance уже выбрали ;), потому как ответить нечего ;)

 

me - userinternet.com
24 Nov 2003 8:04 PM
>> Запускаешь Task Manager ( или ps с ключами) и смотришь память после каждого "Type any string"

Посмотрел. И?
 

V
24 Nov 2003 8:05 PM
2 jstm :
Ну как, Java созрела ?
 

V
24 Nov 2003 8:07 PM
2 me :
> Посмотрел. И?
Освобождается память от удаленных элементов после swap ?
 

torvic
24 Nov 2003 8:24 PM
2 jstm, V
Ну вы и быстрые ребята, уже до потоков доскакали :)
2 jstm
А я никак с растиражированным вами тестом по созданию объектов не могу разобраться, пришлось даже явовские спецификации читать. В связи с этим родился вопрос из которого родились еще два теста:
1. вызов метода
2. создание объекта + вызов метода
Просьба кто может прогнать, а то у меня С# и ява на разных машинах.
1)
using System;

public class Test
{
public virtual void methodTest() {}
}

public class Tester
{
static void Main()
{
Test myTest = new Test();

DateTime startTime = DateTime.Now;
for (int i=0; i<1000000000; i++)
{
myTest.methodTest();
}
TimeSpan elapsedTime = DateTime.Now - startTime;

Console.WriteLine("{0}ms", elapsedTime.TotalMilliseconds);
}
}
2)
using System;

public class Test
{
public virtual void methodTest() {}
}

public class Tester
{
static void Main()
{
DateTime startTime = DateTime.Now;
for (int i=0; i<1000000000; i++)
{
Test myTest = new Test();
myTest.methodTest();
}
TimeSpan elapsedTime = DateTime.Now - startTime;

Console.WriteLine("{0}ms", elapsedTime.TotalMilliseconds);
}
}

PS только на яве просьба не извращаться и не впихивать модификатор final :)
 

V
24 Nov 2003 8:28 PM
2 torvic :
> Просьба кто может прогнать, а то у меня С# и ява на разных машинах.
Я С# не знаю и не использую. Ничем не могу помочь ;)
 

V
24 Nov 2003 8:40 PM
Вобщем новых доказательств я приводить не буду ( думаю достаточно показанных). M$, Sun и Co могут догадаться чего не хватает и что не так, а это в мои планы не входит ;)

Пока ждем данные по Java могу вернуться к обсуждению Канта и его доказательству ;)

 

jstm
24 Nov 2003 8:44 PM
2 V
Net - zavtra budet.
 

V
24 Nov 2003 8:53 PM
2 jstm :
Будьте осторожны с новой версией Java ;) Ваши старые задачи могут не работать ( особенно JNI ;)

Тогда до завтра ( если все будет в порядке ;). Понедельник день тяжелый ;)
 

torvic
24 Nov 2003 9:07 PM
> могу вернуться к обсуждению Канта и его доказательству ;)
"Что убеждает меня в существовании Бога? Звездное небо над головой и нравственный закон внути меня" Кант
Советую больше доверять Булгакову, а не его комментаторам :)
http://brokgauz.academic.ru/misc/brokgauz.nsf/ByID/NT000011 A6
 

jstm
24 Nov 2003 9:14 PM
2 torvic
Ну что (вообщем сильно я не удивился) :
1) С# - 4640.625ms
2) C# - 28875ms (Тут я обьявление Test вынес из тела цикла,
чтобы зря стек не дергать:))
1) Java - 2391ms
Код :

class Test{
public void methodTest() {}
}

public class Tester{

public static void main(String argv[]){
Test myTest = new Test();
long startTime = System.currentTimeMillis();
for (int i=0; i<1000000000; i++){
myTest.methodTest();
}
long elapsedTime = System.currentTimeMillis() - startTime;
System.out.println(elapsedTime + "ms");
}
}

2) Java - 19297ms
Код :

class Test{
public void methodTest() {}
}

public class Tester1{

public static void main(String argv[]){
Test myTest;
long startTime = System.currentTimeMillis();
for (int i=0; i<1000000000; i++){
myTest = new Test();
myTest.methodTest();
}
long elapsedTime = System.currentTimeMillis() - startTime;
System.out.println(elapsedTime + "ms");
}
}

Java 1.4.2_01
.Net 1.1
 

torvic
25 Nov 2003 10:10 AM
Даа, вообще-то я хотел динамическое связывание проверить, а ява похоже подстановками увлеклась.
Ничего, щас я ее на это дело раскручу :)
 

torvic
25 Nov 2003 10:27 AM
Вуаля
С# : 1) 4,6с 2) 13,6с
ява: 1) 6,4с 2) 15,7с
Что и требовалось док-ть :)))
---
C#
using System;

class Test
{
public virtual void methodTest(int i) {}
}

class Test1 : Test
{
public override void methodTest(int i) {}
}

public class Tester
{
static void Main()
{
Test1 myTest1 = new Test1();
Test myTest = new Test(); //myTest1;

DateTime startTime = DateTime.Now;
for (int i=0; i<1000000000; i++)
{
// Test1 myTest1 = new Test1();
// Test myTest = myTest1;
myTest.methodTest(i);
}
TimeSpan elapsedTime = DateTime.Now - startTime;

Console.WriteLine("{0}ms", elapsedTime.TotalMilliseconds);
}

}
---
Java

class Test
{
public void methodTest(int i) {}
}

class Test1 extends Test
{
public void methodTest(int i) {}
}

public class tester
{
public static void main(String argv[])
{
Test1 myTest1 = new Test1();
Test myTest = myTest1;

long startTime = System.currentTimeMillis();
for(int i = 0; i < 1000000000; i++)
{
// Test1 myTest1 = new Test1();
// Test myTest = myTest1;
myTest.methodTest(i);
}
long elapsedTime = System.currentTimeMillis() - startTime;

System.out.println(elapsedTime + "ms");
}

}
 

Qrot
25 Nov 2003 10:27 AM
ggv: спасибо, я прочитал еще в том треде. математики там правда на грош :) банально не хватило образования, что бы проанализировать зависимость проблемы от величины приоритетов до конца - чувствую, что можно доказать, что проблема есть в общем случае, но не могу :(

насчет болталки - я не столько обсуждаю, сколько стараюсь показать читающим, что корме горлопанства у него за душой ничего нет.. забота о неокрепших децких умах вобщем :)
 

Qrot
25 Nov 2003 11:01 AM
V: при выводе в поток в плюсах используется выбранная локаль
сравните
cout << 100000 << endl; // with "C" locale - default behaivor
cout.imbue(locale(""));
cout << 100000 << endl; // with your default locale

собственно, кому нужен некорректный вывод чисел, то бищь без учета локали?

в жабе для этих целей есть NumberFormat - либо использовать его, либо в плюсах использовать itoa.

еще одно ваше жульничество - трюк с выделением памяти. известно, что в жабе выделение памяти сделано бытсрее - поскольку некоторое количество резервируется сразу. (оно и понятно, постоянно new использовать, нужно как то выкручиваться) задайте для потока в плюсах достаточно большой буфер и будете поражены результатом - здесь уже не важно будет, strstream или stringstream использовать. затем можете результат с сишной реализацией сравнить - разницы быть не должно, если все правильно написано.
 

me - userinternet.com
25 Nov 2003 11:03 AM
>> Освобождается память от удаленных элементов после swap ?
Конечно. Как она может не освобождаться, интересно? :))
 

ggv
25 Nov 2003 11:25 AM
Qrot - еще есть интересная фича с выделением памяти на соляре. Там память выделенная програме один раз никогда не возвращаеться ею системе - для повторного возможного использования, и поэтому для достижения максимальной производительности. По этому поводу часто стоит ор от линуксоидов, что это сакс, и так нельзя делать. Но тут опять вопрос спорный - всё зависит от задач, если надо на 4 MB RAM i386 чего то там под линукс держать, то это одно, а HPC на SPARC с гигами ОЗУ - это другое.
Я к тому собственно, что кроме реализации языка еще вмешиваеться реализация ОС.
 

V
25 Nov 2003 11:41 AM
2 Qrot :
> собственно, кому нужен некорректный вывод чисел, то бищь без учета локали?
Так вам же и нужен. В вашем "отстойном примере" еще и некорректный вывод чисел был вами же применен ;) Мы сравнивали Java и C++. Код был написан вами ;)

2 me :
> Конечно. Как она может не освобождаться, интересно? :))
Вам никто такое не говорил "Ему хоть кол на голове ..." ;)

 

Qrot
25 Nov 2003 11:45 AM
ggv: разные размеры, разные задачи. интересно как на hp-ux с этим.. но боюсь, человеку, работающему с девайсом с суммарным объемом памяти 1М такой расточительности не понять :) но в данных "тестах" вроде бы не от ОС ничего не зависит - освобождения нет, только наращивание.
 

me - userinternet.com
25 Nov 2003 11:45 AM
>> выделенная програме один раз никогда не возвращается ею системе
Ужас какой. Я-то думал, откуда Сан узнала словосочетание memory leak. У них это, оказывается, с рождения :)).
 

Qrot
25 Nov 2003 11:49 AM
V: ROTFL. вы эта.. подите проспитесь. я кода, акромя примера с локалью, не приводил вообще.
 

me - userinternet.com
25 Nov 2003 11:56 AM
>> HPC на SPARC с гигами ОЗУ - это другое.
Это не имеет значения. У большинства пользователей многогигабайтные жёсткие диски и, тем не менее, места обычно не хватает.

>> Вам никто такое не говорил "Ему хоть кол на голове ..."
Только про других.

ЗЫ: Память в векторе действительно освобождается, что бы ни говорили всякие сверхобразованные и начитанные профессионалы.
 

V
25 Nov 2003 11:58 AM
2 torvic :
> "Что убеждает меня в существовании Бога? Звездное небо над головой и нравственный закон внути меня" Кант
А я попробую утверждать, что "нравственный закон" есть попытка формализации инстинктов, выработанных естественным отбором. Например "не убий" значит живи стадом, будет легче выжить. "Не укради" - стадо может обидеться ;) И т.д. и т.п. ;)
Вероятно даже мозг человека, запоминает все ошибки и всю жизнь наказывает за это ( результат эволюции). Делаешь неправильный выбор, выбираешь не лучшее, идешь на компромис - платишь всю оставшуюся жизнь ;) Как я уже говорил, окружающих можно обманывать, но не долго, себя обмануть - невозможно ;)
 

V
25 Nov 2003 12:18 PM
2 torvic :
Забыл добавить. Если информация об ошибках хранится и это вызывает "неприятные ощущения", то как с этим можно жить в раю ;)
 

V
25 Nov 2003 12:41 PM
2 Qrot :
> V: ROTFL. вы эта.. подите проспитесь. я кода, акромя примера с локалью, не приводил вообще.
Ну так вы же молчали по поводу ошибки ;) Да еще и утверждали, что STL в данном случае использует LC_NUMERIC и поэтому медленно работает ;) Я ваши высказывания понял именно так ;)
 

Qrot
25 Nov 2003 1:03 PM
V: что ж вы так, то одна ложь, то другая.. вы уж держитесь чего нибудь одного - либо я код приводил, либо я молчал. вы что нибудь вообще умеете кроме как ботом работать?
 

V
25 Nov 2003 1:17 PM
2 Qrot :
> : что ж вы так, то одна ложь, то другая.. вы уж держитесь чего нибудь одного - либо я код приводил, либо я молчал.
Могу еще предположить, что вы молчали из "заботы о других", что бы так сказать не травмировать ;) Хотя скорее всего о LC_NUMERIC вы стали читать только сейчас и делать вид что знали ;)
 

Qrot
25 Nov 2003 1:53 PM
V: о как все просто! если V на плюсах писать не умеет, то и весь остальной мир нихрена не знает. я с вас радуюсь просто, давно такого не видел. скжажите, в чем вы видите смысл жизни?
 

V
25 Nov 2003 2:02 PM
2 Qrot :
> о как все просто! если V на плюсах писать не умеет, то и весь остальной мир нихрена не знает. я с вас радуюсь просто, давно такого не видел.
Ну если вы умеете писать на C++ докажите. Напишите программу для std::string, чтобы работала быстрее Java (то что так и не смог сделать "me"), и все ;)
 

me - userinternet.com
25 Nov 2003 2:11 PM
Ага, то есть со стрингстримом разобрались: STL круче жавы. (в полтора раза примерно, если с заранее выделенным буфером)
Продолжим: чтобы получить пузомерку с std::string, убери-ка, V, StringBuffer из жавы.
 

V
25 Nov 2003 2:28 PM
2 me :
> Продолжим: чтобы получить пузомерку с std::string, убери-ка, V, StringBuffer из жавы.
Я же вас не просил убрать stringstream ;) Почему я должен убрать StringBuffer ?
 

V
25 Nov 2003 2:30 PM
2 me :
> если с заранее выделенным буфером
И память в StringBuffer я тоже могу сразу выделить ;)
 

V
25 Nov 2003 2:32 PM
Я так понял после обеда на результаты Java будем смотреть ? ;)
 

Black Bat
25 Nov 2003 2:37 PM
товарищи, я запутался, здесь кто за что и против чего?
 

me - userinternet.com
25 Nov 2003 3:04 PM
>> Почему я должен убрать StringBuffer?
Ты не должен. Ты можешь. StringBuffer - это почти контейнер. С тем же успехом можно было бы в ArrayList строки рисовать. И, кстати, причём тут строки? В твоей программе строк тоже нет, как и в моей...
str.append(Integer.toString(i)) - где здесь строки? (кстати, str.append(i) быстрее). Нет их. Так что не бузи.
 

me - userinternet.com
25 Nov 2003 3:04 PM
>> товарищи, я запутался, здесь кто за что и против чего?
Ой, это всё так сложно... :))
 

Qrot
25 Nov 2003 3:17 PM
V: что вам доказывать? вы же любое доказательство своей неправоты неприемлите, потому что постичь не в состоянии. все, кто хотел разобраться с вашим "тестом", уже давно поняли что происходит, почему и что нужно сделать, один вы требуете, что бы вам что то показывали и доказывали. читайте форум, там все есть.
 

Qrot
25 Nov 2003 3:18 PM
Black Bat: бота тестируем. присоединйся.
 

xacid - xacidzmail.ru
25 Nov 2003 4:13 PM
to V:
у тебя на плюсах изза фрагментации памяти больше между блоками зависнет чем ява на наследование потратит

а насчет Канта - вы с Кантом оба правы и не правы одновременно, каждый по своему
 

jstm
25 Nov 2003 4:57 PM
2 V
Итак результаты на 3 головом Sun Entreprise 3500.
Test без new Integer() :
java Test 1 1000000
130
java Test 2 1000000
74
java Test 3 1000000
54
java Test 4 1000000
65
java Test 10 1000000
62

Больше 3 тредов происводительность не увиличивается.

Test1 с new Integer() :
java Test1 1 1000000
253
java Test1 2 1000000
364 !!
java Test1 3 1000000
380
java Test1 4 1000000
382
java Test1 10 1000000
471

T.e. с увеличением кол тредов они все дейситвительно становятся в очередь к одному процу и, мало того, производительность даже падает. Так что констатирую здесь V был прав. Другой вопрос - а как с етим у C++ ? Киньте пожожий тест на C++ - потестирую.
 

V
25 Nov 2003 4:57 PM
2 Black Cat :
Лично мне скучно, вот я и решил развлечь себя ;)

2 Qrot :
> почему и что нужно сделать
Вы сейчас похожи на Ипполита из 12 стульев. "Месье, же ..." и потом на немецком "Ну это я знаю" ;) Вы программу написали ? ;)

2 me :
> str.append(Integer.toString(i)) - где здесь строки?
Ну посмотрите в доку. Integer.toString(i) возвращает обьект String, а append добавляет этот стринг к StringBuffer ;)
> Так что не бузи.
Вы бы почитали что нибудь по Java ;)

Ну хорошо. Если вы так просите, я могу убрать StringBuffer ( если вы думаете что вам станет лучше ;) Исключительо по своей доброте иду на уступки ;)))
//---
import java.io.*;

public class StreamTest {
public static void main( String[] args) throws Exception {
long t = System.currentTimeMillis();
DataOutputStream os =
new DataOutputStream(new ByteArrayOutputStream());
for( int i = 0; i < 100000; i++) {
os.writeBytes( Integer.toString(i));
}
System.out.println("Time : "+
(System.currentTimeMillis() - t));
}
}

 

V
25 Nov 2003 5:04 PM
2 jstm :
> Другой вопрос - а как с етим у C++ ? Киньте пожожий тест на C++ - потестирую.
Что касается STL - то разработчики этого "продукта" говорят ( не дословно) - "синхронизируйте сами как хотите, мы этого не делали не делаем и не будем делать " ;) Поэтому каждый пишет что то мьютексное и в конечном итоге результат зависит от программиста ;)
 

Qrot
25 Nov 2003 5:27 PM
V: ути-пуси. вы уже прочитали про локаль и потоки? идите на rsdn, там вам все напишут и разжуют, если вы до сих пор чего то не поняли.
 

3APA3A
25 Nov 2003 5:28 PM
Хех, жаба душит ? :) Вот как выйдет релиз VS.NET для Longhorn то все жабаписятели озвереют от зависти. Эт хорошо что мелкомягкие generics УЖЕ тестируют, а так же, ^ оператор для указателей,OpenMP и run-time проверки. Java is obsolete.
 

V
25 Nov 2003 5:32 PM
2 Qrot :
> ути-пуси. вы уже прочитали про локаль и потоки?
А зачем ? Вы "великие программисты", все знаете про локаль и потоки ( правда "ложаки" еще, да это ничего, правда ? ;))). И программу с std::string вы уже давно написали, причем работающую быстрее Java ;)
 

me - userinternet.com
25 Nov 2003 5:36 PM
>> Integer.toString(i) возвращает обьект String, а append добавляет этот стринг к StringBuffer
Не может такого быть!

Убрать StringBuffer не значит, что нужно заменить его на стрим какой-нить. Нужно оставить ТОЛЬКО строки. str += Integer.toString(i);
примерно так.
 

V
25 Nov 2003 5:38 PM
2 jstm :
По поводу Java ( то что я доказывал) в Sun, М$ и т.д. это давно знают ( я так думаю :), но скрывают ;)
 

V
25 Nov 2003 5:58 PM
2 jstm :
> но скрывают ;)
Читайте "не акцентируют" ;)))
 

V
25 Nov 2003 5:58 PM
2 jstm :
> но скрывают ;)
Читайте "не акцентируют" ;)))
 

Black Bat
25 Nov 2003 6:01 PM
народ, надо расширить круг обсуждаемых технологий!

Итак, PL/SQL на Oracle 9i
---
DECLARE
TYPE trecNum IS RECORD
(
a NUMBER(1),
b NUMBER(1),
c NUMBER(1),
d NUMBER(1),
e NUMBER(1)
);
TYPE tarrNum IS TABLE OF trecNum INDEX BY BINARY_INTEGER;

arrNum tarrNum;

dStartTime DATE;
dEndTime DATE;
nDiff NUMBER;
i NUMBER;
BEGIN
dStartTime := SYSDATE;
FOR i IN 1..1000000
LOOP
arrNum(i).a := 1;
arrNum(i).b := 2;
arrNum(i).c := 3;
arrNum(i).d := 4;
arrNum(i).e := 5;
END LOOP;
dEndTime := SYSDATE;
nDiff := (dEndTime - dStartTime) * 24 * 60 * 60;

DBMS_OUTPUT.PUT_LINE('Work time: ' || nDiff || ' sec');
END;
---

машина - скромненький продакшен сервер (правда загружен сейчас он)
время работы - 6 сек.

 

torvic
25 Nov 2003 6:06 PM
>> nDiff := (dEndTime - dStartTime) * 24 * 60 * 60;
Во! Сразу виден и маштаб и приоритеты :)
 

Black Bat
25 Nov 2003 6:10 PM
ну да, 1 - это день :)
 

Black Bat
25 Nov 2003 6:12 PM
бывают такие нужные запросы, которые по несколько часов работают...
 

Qrot
25 Nov 2003 6:15 PM
V: ну как же зачем.. что бы ликвидировать пробел в знаниях, зачем же еще. вот прочтете про локаль, про потоки, перепишете тестик на основе новых знаний - приходите, обсудим другие ваши ошибки. а пока идите читайте.
 

V
25 Nov 2003 6:48 PM
2 Black Cat :
А вы пробовали ?
arrNum(i).a := i;
Попробуйте и поделитесь временем ;) Хотя я в PL не специалист ;)
 

V
25 Nov 2003 6:50 PM
2 Black Cat :
Надеюсь результат может удивить ;)
 

Black Bat
25 Nov 2003 7:01 PM
DECLARE
TYPE trecNum IS RECORD
(
a NUMBER(9),
b NUMBER(9),
c NUMBER(9),
d NUMBER(9),
e NUMBER(9)
);
TYPE tarrNum IS TABLE OF trecNum INDEX BY BINARY_INTEGER;

arrNum tarrNum;

dStartTime DATE;
dEndTime DATE;
nDiff NUMBER;
i NUMBER;
BEGIN
dStartTime := SYSDATE;
FOR i IN 1..1000000
LOOP
arrNum(i).a := i;
arrNum(i).b := i;
arrNum(i).c := i;
arrNum(i).d := i;
arrNum(i).e := i;
END LOOP;
dEndTime := SYSDATE;
nDiff := (dEndTime - dStartTime) * 24 * 60 * 60;

DBMS_OUTPUT.PUT_LINE('Work time: ' || nDiff || ' sec');
END;

---
9 сек
 

V
25 Nov 2003 7:06 PM
2 Black Bat :
Время вроде как можно из SQLPlus проверять.
database> set timing on
 

Black Bat
25 Nov 2003 7:10 PM
to V:

я знаю, это просто для наглядности
кстати, я использую SQL Navigator - там тоже время выполнения показывается
 

Black Bat
25 Nov 2003 7:11 PM
кстати, это время не постоянно а может колебаться в весьма значительных пределах - всё зависит от текущей нагрузки на базы (и явно от фазы луны тоже :))
 

V
25 Nov 2003 7:15 PM
2 Black Cat :
Собственно на С, с выделением памяти, программа работает 1.6 секунды на моем P3 600MГц. Если мы опять меряем быстродействие ;)
 

V
25 Nov 2003 7:22 PM
2 Black Bat :
> и явно от фазы луны тоже
Предполагается, что вы работаете в вашем сегменте данных. Кроме вас есть еще пользователи. Также Oracle тратит время на журналы, контрольные точки и т.д. Использовался платформонезависимый формат данных. Это не те 4 байта int в Java и C++. Соответственно время выполнения зависит от длинны поля, где хранится число. Что они делают сейчас я не знаю. Можете попробовать какие нибудь операции, типа деления и умножения. Раньше быстродействие было плохим.
 

me - userinternet.com
25 Nov 2003 8:03 PM
>> с увеличением кол тредов они все дейситвительно становятся в очередь к одному процу и, мало того, производительность даже падает.

По-моему, каждый программист должен понимать, что самый быстрый способ выполнения задач на однопроцессорной машине - это выполнять их последовательно. Более того, если процессоров три, а потоков больше, то вряд ли все они выполняются параллельно.
Поэтому я не понимаю, как производительность может не упасть, если потоков больше, чем процессоров? :))
Кроме того, все потоки в тестовой программе занимаются интенсивным выделением памяти, которая очень даже одна на компьютере, сколько бы процессоров ни стояло.
 

V
25 Nov 2003 8:11 PM
2 me :
> Кроме того, все потоки в тестовой программе занимаются интенсивным выделением памяти, которая очень даже одна на компьютере, сколько бы процессоров ни стояло.
Память конечно одна, процессоры обращаются по очереди, но быстродействия кэш+память хватает чтобы все процессоры не простаивали и программа на 4х процессорах работает почти в 4 раза быстрее. Я это уже не раз проверял ;) Хотя с нитями ( различными реализациями) это не всегда так, но это кривые руки создателей железа и софта.
 

V
25 Nov 2003 8:12 PM
> работает почти в 4 раза быстрее.
Конечно если нет блокировок ;)
 

V
25 Nov 2003 8:14 PM
2 jstm :
Могу привести код без нитей (создаются процессы через fork) для вашей Sun ( без нитей чтобы не возиться с либами ;).
 

V
25 Nov 2003 8:24 PM
2 jstm :
Вы сможете увидеть что программа с выделением памяти работает в 4 раза быстрее на 4х процессорной машине, как и в Java без new ;)
 

V
25 Nov 2003 8:40 PM
Собственно сейчас вроде уже должны быть сервера с многоканальной памятью ;)
 

jstm
25 Nov 2003 10:07 PM
2 V
Eee neet... nam raznye processy ne nuzhny. Nam podavaj niti. Tak kak pod SUN java niti mappiatsia
1-1 na OS niti.
Tol'ko chto proveril test na C s malloc/free v nitevom cikle - rabotaet konechno bystree, NO kartina
ta zhe. Tak chtaaaa...
 

me - userinternet.com
26 Nov 2003 10:55 AM
>> программа на 4х процессорах работает почти в 4 раза быстрее.
Это всё понятно. Но жава-то тут причём? Не конкретная реализация жавы, а концепция вообще?
 

V
26 Nov 2003 11:23 AM
2 jstm :
> NO kartina ta zhe.
Что значит картина та же ? ;) Картина как раз другая ;) Я могу написать с нитями без блокировок на C/C++ а в Java вы ничего не сможете сделать. Блокировка будет в любом случае ;)))
 

V
26 Nov 2003 11:32 AM
2 jstm :
А теперь представьте как работает Resin, EJB в многопроцессорных системах ;)
 

V
26 Nov 2003 11:33 AM
2 jstm :
Вероятно именно поэтому, Java WebServer тихо прикрыли ;)
 

V
26 Nov 2003 11:44 AM
2 me :
> Не конкретная реализация жавы, а концепция вообще?
Отсутствие delete+автоматический сбор мусора - концепция Java.
 

me - userinternet.com
26 Nov 2003 12:14 PM
>> Отсутствие delete
Это действительно не очень хорошо. Впрочем... см. п. 2

>> автоматический сбор мусора
В спецификации об этой фишке сказано не garbage collection, а automatic memory management. Разница-таки есть, по-моему: реализация жава-машины может не использовать сборку мусора, а менеджить объекты, оборачивая в какой-нибудь интеллектуальный указатель. Так что концептуально в этом плане всё чисто. Даже delete можно придумать как сделать.
 

V
26 Nov 2003 12:30 PM
2 me :
> оборачивая в какой-нибудь интеллектуальный указатель.
Тогда :
- чем это будет отличаться от C++ ?
- после этого new будет работать медленно ;)
 

me - userinternet.com
26 Nov 2003 1:00 PM
>> после этого new будет работать медленно
С чего бы это?
 

V
26 Nov 2003 1:01 PM
2 me :
> С чего бы это?
Дополнительный расход памяти и процессорного времени ;)
 

miroh
26 Nov 2003 1:02 PM
Кстати масштабируется ява (с увеличением числа процов) не хуже нета - есть тесты . И явовских серверов - тьма тьмущая. Вот даже этот сервер zdnet.ru работает (до недавнего времени работал) на jigsaw - полностью явовский сервак.
 

V
26 Nov 2003 1:26 PM
2 miroh :
> есть тесты
Код в студию ;)

> И явовских серверов - тьма тьмущая.
Многопроцессорных ?

> Вот даже этот сервер zdnet.ru работает (до недавнего времени работал) на jigsaw - полностью явовский сервак.
Ну так и спросите у редакции почему ?
 

miroh
26 Nov 2003 1:33 PM
2V
Эти тесты были на www.theserverside.com сравнивались петшопы для разных платформ. там и коды есть.

Естественно все многопроцессорное. На www.oracle.com можно было раньше тоже наблюдать тесты с масштабированием.
Только конкретные ссылки я не помню - искать надо
 

V
26 Nov 2003 1:41 PM
2 miroh :
Спасибо, я посмотрю. Но мой тест красивее ;)
 

V
26 Nov 2003 1:48 PM
2 miroh :
Что то там всего много, и еще и регистрироваться надо ;)
 

miroh
26 Nov 2003 2:00 PM
Там черт ногу сломит, но был на серверсайде тест нескольких явовских серверов против нетовского. В том числе и масштабируемость оценивалась. Щас все глубоко в архивах - рыться надо. Или хвастовства Оракла читать - все их тесты для многопроцессорных супердомов.
 

V
26 Nov 2003 2:03 PM
> Или хвастовства Оракла читать - все их тесты для многопроцессорных супердомов.
Про Оракле вряд ли стоит говорить. Они же Java в свой сервер встроили ;)
 

miroh
26 Nov 2003 2:06 PM
2V
Нет - они просто расширили Орион. А так сервер полностью явовский - ничего найтивного.
 

torvic
26 Nov 2003 2:48 PM
> оборачивая в какой-нибудь интеллектуальный указатель
> Дополнительный расход памяти и процессорного времени ;)
Заранее извиняюсь, прощелкал тему я тему с потоками. Не понял в чем принципиальная проблема: в отсутствии средств явно освободить ресурс, т.е. в отсутствии delete и наличии отсутсвия сборщика мусора? Нужен спец.указатель и это приводит к доп.затратам? Так вроде в случае с потоками в дотнете все так и есть, существует спец.указатель SyncBlockIndex и затраты в new не такие уж критичные.
 

Chkaloff
26 Nov 2003 3:58 PM
2 miroh:
Это не этот-ли http://www.theserverside.com/resources/articles/benchmark/j2 eedotnetbench.pdf

После которого такой шум поднялся? Так там вроде не в лучшем свете выглядит Java. Тем более app сервера, которые там использовались.
 

V
26 Nov 2003 4:23 PM
2 torvic :
> Нет - они просто расширили Орион.
Насколько мне известно, в серверах Oracle 8,9 ( даже в Personal Oracle 7, я уже не помню точно) есть возможность использовать Java в хранимых процедурах, при создании отчетов и т.д. Из за нижеперечисленных проблем Java, сами понимаете к каким проблемам это может привести на сервере баз данных.

> Не понял в чем принципиальная проблема
Принципиальная проблема в том, что при наличии общей кучи для нитей и автоматическом сборе мусора, происходит блокировка всех new. Они выстраиваются в очередь и параллельная работа разных нитей превращается в последовательную при выделении памяти. Избавиться в java от этого нельзя в принципе ;) New в Java потому и быстрый, что практически ничего не делает, а сборка мусора (delete) происходит только тогда, когда нет свободного места или есть "лишнее" процессорное время ;)

 

V
26 Nov 2003 4:25 PM
2 torvic :
> SyncBlockIndex
Странное название ;) Блокировку напоминает ;) Возможно C# с нитями ведет себя также, как Java ;)
 

torvic
26 Nov 2003 4:44 PM
> Странное название ;) Блокировку напоминает ;)
Ничего странного - блокировка и есть. Все-равно не догоняю, ведь когда нужно всегда можно передать ресурс другому потоку.
Сорри, просто времени нет, вечером перечитаю.
 

miroh
26 Nov 2003 4:46 PM
2V
Вы путаете Базу данных Оракл и аппсервер. Вот этот то аппсервер -целиком на яве
2Chkaloff
Именно этот отчет. Там наскока я понял ява в два-три раза медленнее получилась чем НЕТ. Что и неудивительно,т к использовались дополнительные костыли вроде EJB. Без этих костылей приложение в разы быстрее.
 

V
26 Nov 2003 4:52 PM
2 miroh :
> Вы путаете Базу данных Оракл и аппсервер.
Это вы путали. Я говорил только о RDBMS Oracle 7,8,9 ;) AppServer я вообще обсуждать не собирался по нижеизложенным причинам ;)
 

V
26 Nov 2003 4:58 PM
2 miroh :
> As part of the server executable, Oracle 8i includes a JVM that executes within the address space and shares the memory heap with the RDBMS kernel. Oracle's JVM is a JDK 1.1.6-compliant environment. All database clients (such as query tools, report-writers and fat-client applications) can call Java-stored procedures just as they call any other stored procedure.
 

V
26 Nov 2003 5:01 PM
2 miroh :
Правда хорошо, что использование Java можно отключить ;)
 

miroh
26 Nov 2003 5:04 PM
2V
Я понял о чем вы говорили. Я то об веб сервере\сервере приложений оракл. Изначально то про это (веб сервера на яве)вопрос шел.
 

V
26 Nov 2003 5:34 PM
2 miroh :
> Я то об веб сервере\сервере приложений оракл. Изначально то про это (веб сервера на яве)вопрос шел.
Ни Oracle web-server ни AppServer я никогда не использовал, поэтому могу ошибаться. Но если в них интегрирована Java, то вероятнее всего на мультипроцессорных системах они будут работать с таким же результатом как и Test ;)
 

miroh
26 Nov 2003 6:43 PM
2V
В них ничего не интегрировано они просто написаны на яве. И масштабирование у них на уровне - на двух процессорах производительность в 1.5 1ю4 раза больше чем на одном.(или я забыл и вру). В общем считается что на уровне
 

V
26 Nov 2003 6:57 PM
2 miroh :
Помнится первый web-сервер у 7.3 был не на Java ( может и ошибаюсь, этих web-серверов уже столько перепробовал ;)

А на 4х у вас есть данные или они стесняются тестировать и получить опять 1.5 ? ;) Хотя и 1.5 это плохо. Можно взять просто Apache, написать модуль на C и будет почти в 2 раза ;)
 

torvic
26 Nov 2003 11:23 PM
2 V
Да, с new это интересный пример. В С# тоже конечно delete нет и деструктор явно не вызовешь, но зато есть dispose, т.е. если я работаю с неуправляемым ресурсом я его могу освободить явно. Тут конечно без доп.кода не обойтись и сборщик мусора приходится отключать, но можно.
 

miroh
27 Nov 2003 7:55 AM
2V
Все надо искать. Было по моему и до 8ми процов. 1.5 - это я из памяти могу врать. Помню только что масштабируемость признавалась неплохой. Слово неплохая я запомнил а цифру нет....
 

V
27 Nov 2003 11:31 AM
2 torvic :
> Тут конечно без доп.кода не обойтись и сборщик мусора приходится отключать, но можно.
В Java тоже есть подобное, отключать сборщик мусора не надо (System.runFinalization()). Только это не помогает, блокировки остаются ;)

2 miroh :
> неплохая я запомнил а цифру нет....
Оракл можно понять. Они потратили деньги на разработку, теперь деньги нужно вернуть ;) Вот и делают такую рекламу ;) А когда выясняется что есть проблемы, то рекламу меняют. Говорят что сервера для малых предприятий и т.д. ;)

2 jstm :
Вы тоже можете получить 1.5 или больше на Test, если одновременно оставите new и int ;) Но в больших задачах, никто не будет следить чтобы интервалы между вызовами new были как можно больше а вызовов new как можно меньше ;)

 

V
27 Nov 2003 12:31 PM
2 jstm :
Вы также можете попробовать использовать JDBC в цикле. Connect вне цикла, а выполнение Statememt и ResultSet в цикле. Возможно, что если использовать batching то Оракле будет использовать повторно буфер и соответственно, выделения памяти не будет ;) Хотя исходные тексты драйвера для Oracle закрыты и точно сказать невозможно ;)
 

V
27 Nov 2003 12:56 PM
2 jstm :
PreparedStatement ;)
 

jstm
27 Nov 2003 1:25 PM
V

Esstestvenno nado ispol'zovat' prepared statement dlia cikla !
A chto, kto-to delaet inache ? :) Nu togda vrema na preparirovanie
statementa na Oracle budet naaamnogo bol'she vydelenija pamiati
na kliente. A tak problem net - connection iz poola. statement v
SQL buffere u Oracla - vsio letaet. Tak chto mimo kassy. Da i voobshe primer s vydeleniem 1000000 objektov bez pauz odnovremenno - eto znaete li... Kstati sborshik musora nachinaja s 1.4.1 rabotaet v raznyh treadah na taznyh procah. Ja dumaju i new zabacajut. Eto ne kak ne ogovoreno v JVM specifikacii, tak chto - budem posmotret'.
 

V
27 Nov 2003 1:35 PM
2 jstm :
> A tak problem net - connection iz poola.
Вот тут как раз проблема есть, правда уже другая ;)

> statement v SQL buffere u Oracla - vsio letaet.
Все таки лучше проверить при 1,2, 4 ... нитях и сравнить ;)

> Kstati sborshik musora nachinaja s 1.4.1 rabotaet v raznyh treadah na taznyh procah.
Память все равно общая, таков принцип нитей. Без синхронизации никак ;)
 

V
27 Nov 2003 1:39 PM
2 jstm :
> u Oracla - vsio letaet.
Мы сравнивали Java и C/C++. По сравнению с C/C++ Java ползет ;)
 

V
27 Nov 2003 2:01 PM
2 jstm :
> Вот тут как раз проблема есть,
Читайте "Вот тут как раз проблемЫ есть"
 

Black Bat
27 Nov 2003 2:04 PM
VBS - the best!

---
Dim arrNum(1000000)
Dim i
Dim dStartTime
Dim dEndTime
Dim nDiff

dStartTime = Timer

For i = 1 to 1000000 Step 1
arrNum(i) = i
Next
dEndTime = Timer
nDiff = dEndTime - dStartTime
WScript.Echo CStr(nDiff) & " sec"
---

результат - 0.4 с

 

miroh
27 Nov 2003 2:08 PM
2V
Oracle позиционирует свой аппсервер как сервер для больших предприятий Boeing егшо счас использует и оракулы воют от восторга. А насчет оптимизации работы с памятью - в яве повсеместно используют пулы обьектов так что new вообще стараются использовать по минимуму.
 

V
27 Nov 2003 4:26 PM
2 miroh :
> и оракулы воют от восторга
А Boeing ? ;)))

2 Black Bat :
На Васике я вообще никогда ни одной строчки не написал ;) Только надо вроде 5 раз присваивание делать ;)

 

Black Bat
27 Nov 2003 6:47 PM
to V:

_На Васике я вообще никогда ни одной строчки не написал _

а что, скрипты не пишете?
 

V
27 Nov 2003 7:16 PM
2 Black Bat :
> а что, скрипты не пишете?
Скрипты приходится писать только для HPUX, Solaris, Reliant, Linux. Сами понимаете, что никаких VBS там нет. Хотя один раз пришлось скопировать VBS из Help, чтобы выполнять на MS JVM программки на Java из под MS IIS4,5
 

Black Bat
2 Dec 2003 9:29 PM
_скопировать VBS из Help, чтобы выполнять на MS JVM программки на Java из под MS IIS4,5_ - не понял?
 

V
3 Dec 2003 4:30 PM
2 Black Bat :
> com.ms.wfc.html
Не забивайте себе голову ерундой. Я помню что из IIS4 если этим пользоваться, то при изменении программы, start/stop сервиса IIS не приводил к изменениям. Приходилось перегружать сервер 8)

Я вот в инете попробовал поискать application server. Нашел только на Java от IBM,Sun ... А для C/C++ не могу найти ссылок. Может развлечение стоит сменить и написать свой app serv для C/C++ ;)

 

V
4 Dec 2003 11:41 AM
2 jstm :
> http://www.borland.com/besvisibroker/
борланд, для серьезных вещей сразу отпадает, проще TAO или MICO + бесплатно ;) Это не совсем сервер приложений ;) Это ближе к RPC, просто протокол Corba ;) Win за RPC сервером приложений не называют ;)

 

miroh
4 Dec 2003 3:12 PM
www.orionserver.com
www.jboss.org
www.pramati.com
http://www.macromedia.com/software/jrun/?promoid=home_prod_ jr_100803
Этих серверов до туча. Все кому не лень пишут
 

miroh
4 Dec 2003 3:26 PM
Сорри - это явовские. А из сишных знал корба се5рвер от Борланда -визиброкер. ИБМ тоже вроде имели но забросили, или вру..
 

jstm
4 Dec 2003 4:04 PM
2 V
Kstati eto horoshij pokazatel' togo - a nuzhen li t.n. application server dlia C, C++ na serverah ? :)
Ved' C i C++ rabotajut namnogo shustree :), pochemu zhe togda oni tak obdeleny vnimaniem. ?
Mozhet vsio-taki ne v shustrosti delo ? :) (Tol'ko ne nado pro modu. Ona uzhe davno proshla).
T.e. ja tak ponimaju - esli ja zahochu ispol'zovat' C,C++ dlia napisanija chego-to pohozhego na krupnoe biznes prilozhenie sostojashee iz raspredelennyh komponentow - ja dolzhen vsio sam sozdavat' - nachinaja s PersistanceLaer - konchaja Security ?! I tol' ko radi togo chtoby (tipa) shustree rabotalo ? Nafig, nafig - ja luchshe na Jave (nu ili na .Net - esli dovedut do uma kogda-nibud')
 

V
4 Dec 2003 4:44 PM
2 jstm :
> pochemu zhe togda oni tak obdeleny vnimaniem. ?
Вполне может быть что индусы и китайцы не смогут сделать app serv на + ( у них и на Java не очень получается ;) В любом случае, все современные OS написаны на C/C++ а не на Java, VBS и .Net ;) Сервер приложений может быть довольно сложным. Поддержка сигналов ( от ОС тоже), журналирование, распределение нагрузки, использование существующих библиотек ( в Java с этим проблема), разграничение доступа на уровне пользователей системы ( в Java нет) ... Вобщем очень много чего необходимо ;)

 

jstm
5 Dec 2003 1:20 PM
2 V
использование существующих библиотек ( в Java с этим проблема), разграничение доступа на уровне пользователей системы ( в Java нет)

=8() ???
Tihon'ko tak - a popodrobnee mozhno ? osobenno pro biblioteki !
 

V
5 Dec 2003 1:48 PM
2 jstm :
> Tihon'ko tak - a popodrobnee mozhno ? osobenno pro biblioteki !
Конечно можно, имелось в виду, что при обращении к библиотекам в некоторых ( практически всех необходимых ;) финкциях используются структуры данных. Т.о. вам придется на C писать wrapper к каждой библиотеке, содержащий структуру а потом все поля каким-то способом преобразовывать в типы данных Java а типы данных часто не совпадают ;)
 

V
5 Dec 2003 1:52 PM
2 jstm :
Припоминаю что там были проблемы с памятью. Для совместимости они вроде с 1.2 требовали для каждого вызова выделять память через malloc, потом память регистрировать в VM, вроде как для Thread нужно было ;)
 

V
5 Dec 2003 1:56 PM
2 jstm :
> разграничение доступа на уровне пользователей системы ( в Java нет)
Например пользователи на сервере пытаются открыть файл. На файл доступ только по чтению одному, другому на запись и чтение. Вы сможете, с помощью только Java, разделить права пользователей ? ;)
 

Ron
5 Dec 2003 2:36 PM
2V: Эээ... Ты что это хочешь сказать, что написав программу на Java я смогу открывать любые файлы независимо от моих прав доступа к ним ???
 

miroh
5 Dec 2003 4:44 PM
2V
Существует так называемый секьюрити менеджер. Он управляет правами доступа к разным ресурсам
 

V
5 Dec 2003 4:54 PM
2 Ron :
> на Java я смогу открывать любые файлы независимо от моих прав доступа к ним
Я хочу сказать, что вы, когда пускаете пользователей с разными именами, должны будете в Java что то выдумывать, чтобы обеспечить то что уже есть во всех ОС, пользователи, группы и т.д.

2 miroh :
> Существует так называемый секьюрити менеджер.
Он понимает rwxr-xr-x или знает что такое группы пользователей в Win ?
 

Ron
5 Dec 2003 8:36 PM
Что значит "пускать пользователей под разными именами"? Вы не могли бы выражаться пояснее?
 

Ron
5 Dec 2003 8:41 PM
И хоть убейте, не могу я понять зачем в жабе "выдумывать то что уже есть в других ОС"? Я может от жизни отстал, но когда последний раз видел жабу, то сама она под ОС работала. Если сейчас как-то по-другому, то можете меня поправить.
 

iZEN - izenmail.ru
7 Dec 2003 11:07 AM
2 jstm :
> разграничение доступа на уровне пользователей системы ( в Java нет)

Так ведь файловая система - привилеги ОС, а не среды исполнения (Java, .Net).
В Java существует распределённый Security API, который поддерживает службу безопасности самой среды, а также приложений, запущенных в контексте этой среды. В частности авторизация, доступ к объектам в службе имён и каталогов (J2EE/JNDI), да и "песочница" апплетов разруливается во многом благодаря Java Security.
 

jstm
7 Dec 2003 2:53 PM
2 iZEN

Tak eto ne mne - eto V nado objasniat' :)
 

V
8 Dec 2003 4:35 PM
2 iZEN, Ron, jstm :
Ок, пример приложения, которое создает файл rwxr-xr-x для заданного пользователя, в студию ( даже можете пользоваться JNDI ;) ?
Докажите что вы есть real программеры ;)
 

Ron
9 Dec 2003 1:24 PM
2 V: Уважаемый, а вы разве не в курсе, что непривелигированный пользователь не может назначать владельца файла/папки?
 

V
9 Dec 2003 5:13 PM
2 Ron :
Конечно пользуйтесь привелигированным пользователем, только код на Java в студию ;)
 

Krovosos
16 Dec 2003 5:23 PM
1. Платформа Java живет и развивается и никаких "болезней, несовместимых с жизнью" практика не выявила. Это, ес-но, не идеал, там не хватает assert(), шаблонов и некоторых других вещей. Но! a) Это не критично. b) Ничто не мешает это туда встроить и я думаю Sun это и сделает со временем.
Я думаю статья как раз об этом. Технология прошла обкатку жизнью. Ява - в сервере Oracle, в мобильниках и т.д. И это все не принадлежит одной организации, как тут усиленно пытаются нас обмануть.
Сторонние компании создают свои продукты и выбор - очень большой. Как Ява-машин, так и Application Servers.
И автор полагает, я думаю справедливо, что дальше будет только лучше в том плане,
что одно дело - "хорошая идея + сырая реализация + отсутствие серьезной практики."
И совсем другое "хорошая идея + отлаженная реализация + реальные проекты и выгода".

2. Копнем .NET поглубже и увидим там - что? Правильно все те идеи, которые есть в Java. Только на одной платформе :-) Ой! То есть на разных - Windows ME, Windows XP и Windows 2000.
3. Манера V мне очень напомнила менеджера из Microsoft на семинаре по C#. Когда он начал объяснять чем Java плоха, то на свет опять появились какие-то байты, потраченные на указатели и т.д. И - что характерно - там тоже появился магический массив целых чисел, которые почему-то хранились как объекты ;-).
4. По поводу выделения памяти в C# - new вообще не занимает время! Он просто отрезает от большой области кусок (то есть сводится к inc eax). Когда памяти не хватает C# останавливает прогу и форматирует память, делая доступным опять один большой свободный кусок.
Достоинства и недостатки такой технологии оцените сами.
5. У меня есть одно наблюдение. Все современные автомобильные журналы грешат одним и тем же. Оценивая ту или иную машину, рано или поздно всплывает одно и то же... "Да, это хороший семейный автомобиль, в котором переедет 8 человек; пройдет по бездорожью; неприхотлив к топливу; дешевые запчасти... Но... Блин! Не стреляет он со светофора!!! Ну да довезет он вас куда нужно. Но - не стреляет!"
Вот почему-то обсуждение Java очень часто напоминает мне этот феномен. Есть технология с рядом преимуществ, ради которых она и создавалась. Многоплатформенность, устойчивость к ошибкам, защищенность и пр.
И тут же находится V, которому обязательно надо "пулять со светофора" на семейном автомобиле. И начинается мозго@бство с привлечением синтетических тестов, практическая польза которых равна нулю.
А на все возражения типа "стоимость поддержки и сопровождения, помехоустойчивость" и т.д. ответ один - "ну да, но не пуляет!".
У меня вообще глубокое подозрение, что казачок-то засланный. Уж больно он демагогичен.
6. И, наконец, я совершенно согласен с предыдущим оратором - который сказал, что в России нет рынка заказов крупного софта.
Поэтому Явы у нас и не видно. А тот - кто знает - потихоньку ее использует и очень доволен (это я о себе).
Потому как стабильный результат для меня гораздо важнее 10%-ного отставания в каком-то там синтетическом тесте.

 

V
16 Dec 2003 5:58 PM
2 Krovosos :
> Манера V мне очень напомнила менеджера из Microsoft на семинаре по C#.
А семинар был когда, до того как здесь был представлен код или после ( просто интересно) ? ;)

 

torvic
16 Dec 2003 11:29 PM
п4. Это у вас так механизм работы generational garbage collector отложился? Тогда не надо больше про C#, давайте лучше про яву.
 

jstm
17 Dec 2003 11:51 AM
2 torvic

Chitat' .NET Runtime Reference 5 raz !!
Vy okazyvaetsia esio i .NET ne znaete - a uzhe tuda zhe..

Allocating Memory

When you initialize a new process, the runtime reserves a contiguous region of address space for the process. This reserved address space is called the managed heap. The managed heap maintains a pointer to the address where the next object in the heap will be allocated. Initially, this pointer is set to the managed heap's base address. All reference types are allocated on the managed heap. When an application creates the first reference type, memory is allocated for the type at the base address of the managed heap. When the application creates the next object, the garbage collector allocates memory for it in the address space immediately following the first object. As long as address space is available, the garbage collector continues to allocate space for new objects in this manner.

Allocating memory from the managed heap is faster than unmanaged memory allocation. Because the runtime allocates memory for an object by adding a value to a pointer, it is almost as fast as allocating memory from the stack. In addition, because new objects that are allocated consecutively are stored contiguously in the managed heap, an application can access the objects very quickly.
 

V
17 Dec 2003 12:43 PM
2 jstm :
А что вы хотели сказать этим Allocating Memory ?
garbage collector это немного другое, чем Allocating ;)
Кстати, а вы не могли бы представить фрагмент описания работы Allocating Memory в JVM ? ;)

 

V
17 Dec 2003 1:00 PM
2 Krovosos :
п4 - Хотя конечно интересная единица измерения времени "почти" ;)
 

jstm
17 Dec 2003 1:53 PM
2 V

Nu uzh pro Java chto hotite :

http://java.sun.com/docs/books/vmspec/2nd-edition/html/Inst ructions2.doc10.html

Sm. operator new i dal'she po ssylkam.
 

jstm
17 Dec 2003 1:54 PM
2 V

I ,kstati, prichem tu GC ?
 

torvic
17 Dec 2003 3:20 PM
> Chitat' .NET Runtime Reference 5 raz !!
Хватит меня смешить рассказами про С#, механизм выделения памяти в отличии от неуправляемой кучи C/C++ обсасывали уже сто раз, это тривиально, я вам еще и не то могу рассказать про newobj IL.
Напоминаю вам суть дела: когда речь шла про тест new вы заявили, что выделение памяти у явы происходит быстрее чем у C#, г-н Krovosos тоже почему-то все свел к памяти, только почему-то сравнивал управляемую и неуправляемую кучу (см. вопрос 3). Поэтому внимание! вопрос 1: чем в Яве занимается new. Я не спец и не броузер, расскажите мне своими словами. Я нашел только одно отличие в С# помимо всего прочего происходит инициализация служебных полей объекта MethodTablePtr и SyncBlockIndex. Поэтому вопрос 2: как в яве происходит вызов методов и почему new+call method медленее?
По поводу п.4 особо догадливым поясняю мой спич относился к "Когда памяти не хватает C# останавливает прогу и форматирует память", а не к "Он просто отрезает от большой области кусок (то есть сводится к inc eax)", почему я и упомянул GC. Нет проблем даже с самой фразой, если заменить "памяти" на "памяти поколения 0" и "форматирует" на "дефрагментирует".
В связи с этим вопросы 3,4,5: явовская куча фрагментирована или нет? если нет, то как это достигается? когда начинается сбор мусора? Я по простоте душевной думал, что в современных версиях также как в CLR на основе generational garbage collector.
 

Krovosos
17 Dec 2003 4:08 PM
To torvic:
>В связи с этим вопросы 3,4,5: явовская куча фрагментирована или нет? если нет, то как это достигается? когда начинается сбор мусора? Я по простоте душевной думал, что в современных версиях также как в CLR на основе generational garbage collector.

В принципе, этот вопрос относится к реализации. У разных машин по разному. Сборка мусора - это всегда работающий процесс с низким приоритетом. Который можно дернуть явно: System.gc();
Я как-то провел такой эксперимент - выделял память и сразу терял указатель на нее. На старой ява-машине от Sun я ловил через некоторое время OutOfMemory. Налицо была неудачная реализация: когда памяти не хватало (ее занимал мусор) ява-машина просто бросала исключение. Этот же код на Ява-машине от IBM работал корректно - то есть когда памяти не хватало - приостанавливал new и принудительно чистил мусор.
 

Krovosos
17 Dec 2003 4:10 PM
Да, забыл добавить - если на ява-машине от Sun я принудительно чистил мусор (System.gc()), то исключения не возникало.
 

torvic
17 Dec 2003 4:43 PM
Пилять, я вас русским языком спрашиваю, где разница то?
В System.GC.Collect() букв больше?
Или в том что в CLR нет таких траблов как в старой Sun Java?
Sorry.
2 jstm вопрос 2 отпадает. Мне тут рассказали про symbolic references & constant pool. Все с вами ясно.
 

jstm
17 Dec 2003 4:43 PM
2 torvic

Судя по обьяснениям в JVM Reference механизмы выделения
памяти похожи.
Про GC долго писать. Кратко - форматирования не происходит. Если нужно подробнее прочитайте ето:

http://java.sun.com/products/hotspot/docs/whitepaper/Java_H otspot_v1.4.1/Java_HSpot_WP_v1.4.1_1002_1.html
 

V
17 Dec 2003 4:51 PM
2 jstm :
http://java.sun.com/docs/books/vmspec/2nd-edition/html/Inst ructions2.doc10.html
Page not found ? ;)

Причем здесь garbage collector выясняйте с torvic ;)

2 Krovosos :
> выделял память и сразу терял указатель на нее.
Это как ? :)

> На старой ява-машине от Sun я ловил через некоторое время OutOfMemory.
Версия вашей старой ява-машины, никогда такого не видел ?

Да и в отпуске я с 19 Дек по 12 Янв ( надеюсь ;). Все вопросы после отпуска, и не в первый день. Всех с наступающим *<|;)
 

torvic
17 Dec 2003 5:08 PM
2 V
пробел убери

2 jstm
> Кратко - форматирования не происходит.
Не знаю я такого термина "форматирование памяти".
"All objects can be relocated, allowing object memory compaction, which eliminates object memory fragmentation and increases memory locality." - это то что в CLR называется дефрагментацией.
 

V
17 Dec 2003 5:17 PM
2 jstm :
> http://java.sun.com/docs/books/vmspec/2nd-edition/html/Inst ructions2.doc10.html
По поводу организации пула памяти ничего нет ;)

> http://java.sun.com/products/hotspot/docs/whitepaper/Java_H otspot_v1.4.1/Java_HSpot_WP_v1.4.1_1002_1.html
По поводу организации пула памяти ничего нет ;)
Только рассказы про flexibility ;)
 

V
17 Dec 2003 5:20 PM
2 jstm :
О механизме выделения памяти, он похож не только в Java и C# ;)
 

jstm
17 Dec 2003 5:31 PM
2 torvic

Мы наверное друг друга не поняли.
У вас возникли возражения (?) по поводу алгоритма выделения
памяти описанному Krovosos, я привел цитату из .NET Reference
где cлова Krovosos подтверждаятся. Никаких умозаключений.
По поводу терминов я согласен. У java те же яйца только в профиль. Засим предлагаю начинать праздновать. :)
 

torvic
17 Dec 2003 5:38 PM
2 V
А что вы там пытаетесь найти про пул памяти, вам же сказали, тот же самый стек почти :)

2 jstm
Да нет же е-мое, у меня нет возражений по поводу "алгоритма выделения памяти".
Show Me The Differencesssss, Jerry
Ну ладно, new в яве быстрее за счет первого вызова виртуального метода, но что это дает не понимаю :(
 

torvic
17 Dec 2003 5:42 PM
PS А что вы все празднуете то? католики штоли :)
 

V
17 Dec 2003 6:10 PM
2 torvic :
> А что вы там пытаетесь найти про пул памяти, вам же сказали, тот же самый стек почти
Про "кусок памяти, который дефрагментируется" интересно было бы узнать, только точно, без flexibility и прочей ерунды, четко и ясно ;)

> тот же самый стек почти :)
А тот же, это какой ?

> PS А что вы все празднуете то? католики штоли :)
Просто поздравить не смогу вовремя ;)

 

jstm
17 Dec 2003 6:13 PM
2 torvic

Да вроде православные - да вокруг одни католики :)
Тем не менее шеф сказал - если надо бери 7 отгул, попраздновать.
Политкорректность...:)
 

jstm
17 Dec 2003 6:17 PM
2 V

Про "кусок памяти, который дефрагментируется" интересно было бы узнать, только точно, без flexibility и прочей ерунды, четко и ясно ;)

A зачем ? :)

> тот же самый стек почти :)
А тот же, это какой ?

Такой. тот что в ESP :).
 

V
17 Dec 2003 6:48 PM
2 jstm :
> A зачем ? :)
А как вы собираетесь выбирать платформу Java или C# не зная как они работают ?

> Такой. тот что в ESP :)
И какой в ESP ?

> Тем не менее шеф сказал - если надо бери 7 отгул, попраздновать.
А чего 7 праздновать ? У них (Бавария) 25 и 26 дек праздник.

 

jstm
17 Dec 2003 8:56 PM
2 V

А как вы собираетесь выбирать платформу Java или C# не зная как они работают ?

Выбирать не приходиться. :)
Я (надеюсь) знаю достаточно про ети две платформы. Притом работаю с обеими. А вам зачем ? Ведь же C/C++ rules forever. :)

А чего 7 праздновать ? У них (Бавария) 25 и 26 дек праздник.

Так у меня 7 :)
 

V
18 Dec 2003 2:11 PM
2 jstm :
> А вам зачем ?
Чтобы делать правильный выбор, не тратить время на глупости, быть уверенным в том что рекомендуешь.
 

Krovosos
18 Dec 2003 2:54 PM
To V:
>> выделял память и сразу терял указатель на нее.
>Это как ? :)
V, не рано ли выбирать между C# и Java? Может для начала программировать поучиться???

void f()
{
SomeBigObject A = new SomeBigObject();
}

 

Krovosos
18 Dec 2003 2:58 PM
Вот ссылка на мою статью по поводу исключения OutOfMemory
http://javapower.ru/docs/general/memory.html
К сожалению, версию Ява-машины не помню, но судя по номеру Sun JDK 1.2.2 это было достаточно давно.
PS Современная (1.4) Sun ява-машина "плохого" поведения не демонстрирует.
 

torvic
18 Dec 2003 3:22 PM
> Успеет ли сборщик мусора "вычистить мусор"?
Этот вопрос меня просто убил. И эти страдальцы еще предлагают мне обсудить "Достоинства и недостатки такой технологии" в CLR :)
 

V
18 Dec 2003 4:55 PM
2 Krovosos :
> Может для начала программировать поучиться???
Вы имеете себя в виду ? Да будет вам известно, память в Java потерять невозможно ;)
 

Krovosos
18 Dec 2003 5:23 PM
V, не врите - нехорошо это. Где я сказал "потерять память"?
Я написал "выделить память и потерять на нее указатель" и привел по Вашей просьбе (цитирую "Это как?") элементарнейший пример этого процесса, который очевидно Вам недоступен для понимания.

torvic.
Я, вроде бы, еще не высказывал своего отношения ни к CLR ни к .NET. За исключением фразы о том, что "все идеи .Net взяты из Java". Так что, если кто-то из нас страдает от невнимания и проблем с памятью, то это не я. :-)
 

torvic
18 Dec 2003 5:49 PM
> За исключением фразы о том, что "все идеи .Net взяты из Java".
Аааа, мы наверно тоже не поняли друг друга, я думал ваш пункт 4 это в сравнении с явой.

PS. А зачем вы finalize в вашем коде перекрывали? Я не знаток явы, но в C# для данного примера это выглядит дико. Ради вывода сообщения? а чистоту эксперимента это не нарушает? или в яве это пофиг есть finalize или нет?
 

V
18 Dec 2003 6:10 PM
2 Krovosos :
> не врите - нехорошо это. Где я сказал "потерять память"?
По вашему "потерять указатель" звучит лучше ? ;)
Версию JVM не помните, рассказываете сказки давно прошедших лет, зачем ? ;) Когда я приводил примеры, то версия была не причем. Так что еще неизвестно кому учится программировать надо ;)
 

Krovosos
18 Dec 2003 6:12 PM
torvic.

>PS. А зачем вы finalize в вашем коде перекрывали? Я не знаток явы, но в C# для данного примера это выглядит дико. Ради вывода сообщения? а чистоту эксперимента это не нарушает? или в яве это пофиг есть finalize или нет?

Ну так finalize как раз и вызывается когда происходит подчистка мусора, я просто визуализировал этот процесс.

PS Кстати менеджер из MS сказал "destructors are evil, do not use them". )) Потому что они не очень хорошо ложаться на концепцию C#. Если интересно - почему, завтра напишу.
 

torvic
18 Dec 2003 7:05 PM
Ну с С# то все понятно, только надо добавить "... for managed resources". Мне интересны различия: в яве реализация finalize не приводит к дополнительным расходам?
 

V
18 Dec 2003 7:31 PM
2 Krovosos :
> Если интересно - почему, завтра напишу.
Вы лучше через eMail общайтесь, а то ведь я из отпуска выйду - прочитаю ;)))
 

Krovosos
19 Dec 2003 10:19 AM
torvic.
Разумеется, finalize приводит к расходам, как же иначе? Приходится же дергать метод. Я только не могу сказать точно в каком треде выполняются finalize в Java - не знаю. Подозреваю, что в том самом треде, который и чистит мусор. Если так, то в C# все то же самое - деструкторы вызываются в рамках одного специального треда с низким приоритетом.

V.
>Версию JVM не помните, рассказываете сказки давно прошедших лет, зачем ? ;)
V, опять за свои передергивания? :) a) это не сказка, а реальная история, которую легко повторить, взяв пример; b) версию Java-машины легко установить, я же указал что это SDK 1.2.2;

 

Krovosos
19 Dec 2003 10:27 AM
V.
А пример я привел, чтобы подчеркнуть, что плохая реализация не компрометирует хорошую концепцию.
 

jstm
19 Dec 2003 12:38 PM
2 Krovosos,V

Nebol'shoe utochnenie. Otnyne chistka musora na mnogoprocessornyh
mashinach vypolniaetsia raznymi tredamy parallel'no! :)
Malo togo, v neoficial'nyh anonsah na Tiger 1.5 gde-to chital,
chto, sozdanie novyh ob'jektov tozhe budet rasparalleleno.
 

torvic
19 Dec 2003 12:41 PM
Само собой я не вызов и выполнение finalize имел в виду.
В C# если вы хотите посмотреть "интенсивное" создание и разрушение объектов, работающих с упр.ресурсами "относительно короткий срок", не следует реализовывать Finalize, т.к. в этом случае существенно изменится алгоритм работы CLR с таким объектом, даже не считая сам вызов и выполнение метода.

И в CLR, причем я не "подозреваю", я _знаю_, не так: не в том же самом, Finalize вызываются в рамках одного специального треда с ВЫСОКИМ приоритетом.
Плюс я не очень понимаю ваше определение "сборщик мусора в виртуальной Ява-машине - это параллельный процесс с низким приоритетом", это и для однопроцессорой системы справедливо? если да, когда он активируется?
 

torvic
19 Dec 2003 12:46 PM
2 jstm
> Otnyne chistka musora na mnogoprocessornyh
mashinach vypolniaetsia raznymi tredamy parallel'no! :)
И все? Все CLR 2 механизма.
> sozdanie novyh ob'jektov tozhe budet rasparalleleno.
Если только budet, тогда я не понимаю, что вы так удивлялись тому тесту V, с созданием объектов в разных потоках? :)
 

torvic
19 Dec 2003 12:47 PM
s/Все CLR 2 механизма/В CLR 2 механизма
 

jstm
19 Dec 2003 1:50 PM
2 torvic

Tak eto kogda bylo... :). Ran'she vnimanie na eto ne obrashial.Ochen' uzh problema isskustvennaja.
 

Simon
25 Dec 2003 3:16 PM
Начиная с JRE1.4.1 можно выбирать из четырёх сборщиков мусора, в зависимости от задачи используя наиболее эффективный. Полагаю сейчас, когда ведётся разработка над 1.5.1, их стало ещё больше. И это в Сановской реализации. Другие поставщики могут предложить свои решения, удовлетворяющие спецификации.
 

V
13 Jan 2004 12:35 PM
Всем привет :) !

2 torvic, jstm :
> Если только budet, тогда я не понимаю, что вы так удивлялись тому тесту V, с созданием объектов в разных потоках?

Думаю вам стоит дождаться их реализации создания новых обьектов в разных нитях ( очередное очковтирательство скорее всего ;) и попробовать мой тест. Будете радоваться только тогда, когда блокировки уберут ( в чем я сильно сомневаюсь ;)))
 

Нурик - mafia_vitomail.ru
24 Jun 2006 3:41 PM
Дайте кто нибудь сборщик денег!!!1
 

 

← октябрь 2003 10  11  13  14  17  18  19  20  21 декабрь 2003 →
Реклама!
 

 

Место для Вашей рекламы!