kaz_av
Full Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору SuPriTo Цитата: Что значит сосет? Все что в одном потоке выделил, в нем и прикрой. И будет счастье. | Сосет это значит тупо падает производительность, и чем больше потоков обращаются к менеджеру тем сильнее падает. AlekXL Цитата: так считают многие программисты | Цитата: И выделение памяти там тоже дешевая операция. Думаю, более дешевая, чем у GC. Ведь у GC тоже свой пул. | Считают, думаю... Аргументы так аргументы. Цитата: так и менеджеров кучи ее нет. Это проблема программиста. И хороший программист будет ее решать сам, нежели чем передоверит ее автомату. | У менеджеров конечно нет, это геморой программиста. Только с GC его нет. Цитата: а сколько стоит дефрагментация? Потом, проблема фрагментации несколько надуманна. | Сколько бы она ни стоила, она лучше EOutOfMemory. Цитата: Я об этом не слышал что-то, но даже если так, то не намного. | Это прекрасно. Не слышал, но уверен, что не на много. Цитата: Сравнивая GC и подсчет ссылок, можно и нужно взять пример iOS и Android: это факт, что на iOS программы отзывчивее и быстрее. Вот тебе и реальный результат | У меня нет айфона, но ты вот мне ответь, почему на своём ведроиде я ни каких тормозов и проблем с отзывчивостью не наблюдаю? Ну т.е. если запустить аппу собранную с обезьяной они конечно сразу обнаруживаются, но дело тут-то точно не в GC Цитата: Про паузы -- чистое вранье. Как тебе писали:"Конечно он может, но от пауз не избавляет " | К Рихтеру и гуглу доверия как-то больше, уж извини. Цитата: Разве что на идеальный код. Не просто хороший. Но он никому практически не по карману. | Ок. Пусть будет идеальный. Теперь скажи, а кому по карману идеальный код в нативе? Прикол в том, что специалисты, что в одном, что в другом стоят дорого. А вот середнячки с нативом в руках, что обезьяны с гранатой. Цитата: Это не работает, когда сам граф быстро изменяется, то есть именно в самых критических сценариях. И в любом случае, нужен полный останов, чтобы окончательно установить не-достижимость. | Работает-работает, просто увеличивается время на просмотр графа. А полный останов требуется только для уплотнения, которое не явлется частой операцией. Цитата: Так других пуль там нету! Нету ручного контроля выделения памяти. Нету выбора! В Delphi я что-то контролирую вручную, что-то делегирую подсчету ссылок. | Да я не о том. Просто не нужно думать, что при использовании GC можно голову выключать. Я уже писал, что GC это инструмент и им нужно уметь пользоваться, а не просто: "память безгранична, ООП головного мозга, щас спою". Цитата: ЧТО? это вызов косвенный адово замедляет? Во времена, когда в тренде Dependency Injections и интерфейсы(в которых все вызовы косвенные)? | Читай. Цитата: Это редкая проблема. И притом нужно, чтобы буфер был аллоцирован в стеке -- это практика нетривиальная в Delphi. | Это статические-то массивы на стеке нетривиальная практика??? Куда уж тривиальнее... Цитата: Тем более, культура Delphi программирования не поощряет использование библиотек без исходников. А если есть исходники, то проблему найти достаточно легко, если она уже проявилась. | Она появиться может не сразу, а вылазить у юзера при обработке специфических данных. Такие ошибки самые гадские, и в плане поиска и в плане последствий. Не зря большое количество атак реализуется именно через срыв стека. Цитата: В основном про внутренне устройство M$ GC мало что известно. Вот в яве, там да, по GC немало инфы. | У Рихтера есть книжка посвященная GC. Есть статьи с детальным разбором. Ищущий да обрящет. Цитата: есть scaleMM . В разы быстрее дефолта именно в многопоточке. А главное, есть выбор! | SMM из стадии эксперимента все никак не выйдет. А его наличие никак не отменяет отстойности стандартного менеджера в многопоточке. Цитата: ты всех своих оппонентов посылаешь в гугль? Не от ума и нет от совести делаешь это. | А ты бы хотел, чтоб я я сюда постил многостраничные тексты? Пару слов в гугл вбить очень сложно? И желательно бы делать это до смелых заявлений о неподходящих технологиях. Цитата: Насколько известно, нету в природе высогонагруженных и сложных managed приложений работающих по стандарту реального времени. | Высокочастотный трейдинг достаточно серьезное применение? Вот например, написан на жабе. Цитата: боже, какая клюква!.. Работа со строками- один из коньков Delphi. Напиши любой нагруженный код со строками на жабе или доднете, и я напишу код Delphi, который будет быстрее. | Вот тебе простой пример на Oxygen: Код: namespace consoleapplication1; interface uses java.util, java.lang; type ConsoleApp = class public class method Main(args: array of String); end; Type TTestClass = Class F0 : String; F1 : String; F2 : String; F3 : String; F4 : String; F5 : String; F6 : String; F7 : String; F8 : String; F9 : String; Constructor (AIndex : Integer); Virtual; End; implementation // Constructor TTestClass(AIndex : Integer); Begin inherited constructor; F0 := new StringBuilder('StringBench0').append(AIndex).toString; F1 := new StringBuilder('StringBench1').append(AIndex).toString; F2 := new StringBuilder('StringBench2').append(AIndex).toString; F3 := new StringBuilder('StringBench3').append(AIndex).toString; F4 := new StringBuilder('StringBench4').append(AIndex).toString; F5 := new StringBuilder('StringBench5').append(AIndex).toString; F6 := new StringBuilder('StringBench6').append(AIndex).toString; F7 := new StringBuilder('StringBench7').append(AIndex).toString; F8 := new StringBuilder('StringBench8').append(AIndex).toString; F9 := new StringBuilder('StringBench9').append(AIndex).toString; End; // class method ConsoleApp.Main(args: array of String); begin var k : Integer; var lt := 0; for k := 1 to 100 do begin var time := System.currentTimeMillis(); var i : Integer; var l := new ArrayList; for i := 1 to 100000 do l.add(new TTestClass(i)); l := nil; var t := System.currentTimeMillis() - time; inc(lt, t); System.out.println(t); end; System.out.println('-->' + lt.toString); end; end. | Вот аналогичный на Delphi XE7: Код: program sb; {$APPTYPE CONSOLE} {$R *.res} uses System.Classes, System.Contnrs, System.Diagnostics, system.SysUtils; Type TTestClass = Class F0 : String; F1 : String; F2 : String; F3 : String; F4 : String; F5 : String; F6 : String; F7 : String; F8 : String; F9 : String; Constructor Create(AIndex : Integer); End; { TTestClass } constructor TTestClass.Create(AIndex: Integer); begin inherited create; F0 := 'StringBench0' + AIndex.ToString; F1 := 'StringBench1' + AIndex.ToString; F2 := 'StringBench2' + AIndex.ToString; F3 := 'StringBench3' + AIndex.ToString; F4 := 'StringBench4' + AIndex.ToString; F5 := 'StringBench5' + AIndex.ToString; F6 := 'StringBench6' + AIndex.ToString; F7 := 'StringBench7' + AIndex.ToString; F8 := 'StringBench8' + AIndex.ToString; F9 := 'StringBench9' + AIndex.ToString; end; Var sw : TStopwatch; l : TObjectList; k,i, lt : Integer; begin lt := 0; for k := 1 to 100 do begin sw := TStopwatch.StartNew; l := TObjectList.Create; try for i := 1 to 100000 do l.Add(TTestClass.Create(i)); finally l.Free; end; sw.Stop; inc(lt, sw.ElapsedMilliseconds); WriteLn(sw.ElapsedMilliseconds); end; WriteLn('-->', lt); end. | Оксидженовый код собираем под JVM. Устанавливаем в ОC профиль максимальной производительности. Запускаем. Результат: Java (Release. Open JDK x64): 6286 Delphi (Release. x64): 24214 Нужно заметить, что Open JDK далеко не самая быстрая JVM, но другой у меня нет. Дельфийский модуль запускался под Wine, поэтому мне интересно, какие результаты будут на чистой винде (впрочем, в тестовых операциях не задействуются системные функции, поэтому wine ни какого влияния оказывать не должен). Архив с бинарниками тут. CPU: AMD Phenom(tm) II X4 940 Processor. 3GHz. | Всего записей: 439 | Зарегистр. 15-02-2006 | Отправлено: 02:53 06-01-2015 | Исправлено: kaz_av, 02:56 06-01-2015 |
|