|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Что не так с Java String и как вы с этим боретесь? Почему в Java с первой версии не сделали нормальный string с подсчетом ссылок? Не осилили или были объективные причины? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 12:03 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewЧто не так с Java String и как вы с этим боретесь? Почему в Java с первой версии не сделали нормальный string с подсчетом ссылок? Не осилили или были объективные причины? А что не так с Java String? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 12:10 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Garrick, вроде того, что такой код плохой Код: java 1. 2. 3. 4.
пожирает память, создавая 100 объектов, причем почему то одновременно. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 12:24 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene New, StringBuilder не предлагать? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 12:28 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewGarrick, вроде того, что такой код плохой Код: java 1. 2. 3. 4.
пожирает память, создавая 100 объектов, причем почему то одновременно. Как подсчет ссылок на String поможет с проблемой, возникающей из-за иммутабельности String? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 12:46 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewGarrick, вроде того, что такой код плохой Код: java 1. 2. 3. 4.
пожирает память, создавая 100 объектов, причем почему то одновременно. Понятно... На какие-нибудь курсы для начинающих по Java записаться не пробовали? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 12:49 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewЧто не так с Java String и как вы с этим боретесь? Не то, что нет доступа к "внутренностям" String без копирования кроме как платформо/версия зависимого Unsafe Из-за этого скорость операций преобразования Charset'а, особенно в non-heap memory (CharBuffer), при пользование стандартными интерфейсами ниже плинтуса. Весь смысл CharBuffer'а и NIO пропадает. AFAIK. Борятся - относительно "грязными" хаками через Unsafe (версия зависимо!) или другими, меняя грязными решениями. Поиск в google рулит Eugene Newпожирает память, создавая 100 объектов, причем почему то одновременно. 1. Про гуано-код уже сказали. Для таких вещей предназначен StringBuilder / StringBuffer 2. AFAIK "в новых версиях" замену String на StringBuilder должен производит компилятор. Т.ч. притензия как-то запоздала лет на 5-8. Под профайлером не смотрел, но в Java 1.8 эффекта быть не должно Integer.toString(i); Сам это вызов автоматом будет плодить String для возврата результата. Гуано-код. Вместо toString + append, нужно сразу делать нормальный append https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html#append(long) public StringBuilder append(long lng) Appends the string representation of the long argument to this sequence. The overall effect is exactly as if the argument were converted to a string by the method String.valueOf(long), and the characters of that string were then appended to this character sequence. Parameters: lng - a long. Returns: a reference to this object. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 12:58 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewGarrick, вроде того, что такой код плохой Код: java 1. 2. 3. 4.
пожирает память, создавая 100 объектов, причем почему то одновременно. А что ВЫ удивляетесь? Что Вы вызваете, то так и работает SourceCode Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 13:15 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, спасибо за информативный ответ. Удивляюсь я тому, что временные объекты не уничтожаются сразу после вычисления выражения. Поэтому от данного кода с запашком ожидаешь только лишних затрат на перераспределение памяти (чем в других языках можно и пренебречь, особенно с умным компилятором - или их вообще нет, если строки т. н. паскалевские - фиксированного размера), но не лавинообразного занятия памяти строковыми объектами. В связи со всем этим возникает несколько вопросов: 1) Почему не удаляются временные объекты сразу после вычисления выражения, в котором они задействованы? Или все-таки удаляются? Хотелось бы понять, как это работает. 2) Когда все-таки следует или приходится использовать тип String в программах на Java? 3) Есть ли практика делать для хранения строк свои классы или StringBuilder/StringBuffer (а может каких то других классов) хватает с лихвой? В чем вообще считается правильным хранить строки? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 13:27 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewStringBuilder/StringBufferпоищи описание , его полно и очень досканально всё описано, ещё один раз здесь нет смысла повторять. 1) поищи про сборщик мусора. 2) когда не надо много строк складывать и они не большие 3)хранить можешь как угодно, если не надо их изменять многократно ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 13:40 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewLeonid Kudryavtsev, 1) Почему не удаляются временные объекты сразу после вычисления выражения, в котором они задействованы? Или все-таки удаляются? Хотелось бы понять, как это работает. JIT компилятор это умеет делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 13:42 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewLeonid Kudryavtsev, спасибо за информативный ответ. Удивляюсь я тому, что временные объекты не уничтожаются сразу после вычисления выражения. Поэтому от данного кода с запашком ожидаешь только лишних затрат на перераспределение памяти (чем в других языках можно и пренебречь, особенно с умным компилятором - или их вообще нет, если строки т. н. паскалевские - фиксированного размера), но не лавинообразного занятия памяти строковыми объектами. В связи со всем этим возникает несколько вопросов: 1) Почему не удаляются временные объекты сразу после вычисления выражения, в котором они задействованы? Или все-таки удаляются? Хотелось бы понять, как это работает. 2) Когда все-таки следует или приходится использовать тип String в программах на Java? 3) Есть ли практика делать для хранения строк свои классы или StringBuilder/StringBuffer (а может каких то других классов) хватает с лихвой? В чем вообще считается правильным хранить строки? 1) Потому что сборщик мусора в java так работает. Чем в вашем примере это могло помочь? Количество создаваемых объектов не уменьшиться, независимо от того, в какой момент они удаляться будут. (P.S. Возможно в JVM отличных от HotSpot есть сборщики использующие подсчет ссылок, яхз) 2) Всегда, когда нужны строки. Просто для их модификации рекомендуется использовать классы из пункта 3. (На самом деле конкатенация строк в Java выполняется через StringBuilder, https://docs.oracle.com/javase/8/docs/api/java/lang/String.html) 3) Эти классы сделаны не для хранения строк, а для их модификации/формирования ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 13:43 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Lelouch, Чем в вашем примере это могло помочь? Создавалось бы не более 2 лишних экземляров объекта String, а после выхода из цикла оставался бы один экземпляр - s. Так что ничего особо страшного бы не было. Код: java 1. 2. 3. 4. 5.
Не создает же 100 копий объектов для хранения integer. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 14:08 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewУдивляюсь я тому, что временные объекты не уничтожаются сразу после вычисления выражения 1. Они уничтожаются в момент сборки мусора. Благодаря этому у Java "сверх-быстрое" (по сравнению с другими языками, разница на порядки!) выделение памяти через new 2. Сборка мусора делится на Minor GC (быструю) для сборки "временных объектов" и Full GC (медленную) для сборки мусора "Временные объекты" хранятся нет в OldGen heap, а в Eden области (young generation). При правильной настройке GC и отстутствия гуано-кода (когда временные объекты живут значительно больше, чем время между минор-сборками мусора, т.е. временные объекты становятся не временными) - проблем с производительностью быть не должно (в оптимале) Для "старых"/"классических" GC. Для "нового" GC - G1, вроде немного не так. Но принципы те же. Eugene NewПоэтому от данного кода с запашком ожидаешь только лишних затрат на перераспределение памяти (чем в других языках можно и пренебречь, особенно с умным компилятором - или их вообще нет, При правильном Java коде и отсутствия гуано-кода (но где такой найдешь?) и в Java проблем с производительностью быть не должно Eugene Newесли строки т. н. паскалевские - фиксированного размера На дворе XXI век. Строки фиксированного размера - пережиток прошлого ))) Eugene NewВ связи со всем этим возникает несколько вопросов.... IMHO Вопросы риторические. Как оно работает (на мой взгляд AFAIK), в кратце постарался ответить выше. Eugene New3) Есть ли практика делать для хранения строк свои классы или StringBuilder/StringBuffer (а может каких то других классов) хватает с лихвой? В чем вообще считается правильным хранить строки? Зависит от задачи. Если Вы разрабатываете Real-Time OS/приложение для управления ядерным реактором - то это одно. Если обычное приложение - то другое 1.1. Обычно нет. Используют String. 1.2. В String'е 1.3. Иногда используют хакерские способы работы со String. Например, для сверх-высоко-производительного NIO Web сервера может не хватить скорости выполения перекодировки из одной кодовой-странцы в другую. AFAIK. Но все равно для хранения пользуются или String или StringBuilder или CharBuffer'ом. Дальше или аккуратное кодирование или хакерские способы зализания в private поля через Unsafe. Но тут скорее проблема не String, а концепции защиты Java (которую обходят через Unsafe). 1.4. Иногда может возникнуть желания сделать свой класс-хранилище на CharSequence. Например для парсинга файлов. Что бы избавиться от лишних копирований и выделения памяти (вместо дублирования распарсенных данных, хранить только позиции в исходном файле). Но честно говоря, затраты времени на кодирование и выйгрыш по экономии памяти / времени как-то не пропорциональный. Хотя, вроде сверх-высоко-скоростные XML-парсеры (не для Java) такой подход используют (заявленная производительность на порядки /10-50 раз/, выше чем классических XML-парсеров). ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 14:09 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewЧто не так с Java String и как вы с этим боретесь? Всё так, поэтому никак не борюсь. авторПочему в Java с первой версии не сделали нормальный string с подсчетом ссылок? Зато этот вопрос понятен. Вас ввело в заблуждение некоторое сходство синтаксиса Java и C++ и вы пытаетесь откосить от изучения Java, используя свои устаревшие знания C++. Не вы первый. Лучше отказаться от попыток переноса знаний C++ на Java и изучать Java с нуля. авторНе осилили или были объективные причины? Это вы не осилили. Объективная причина: не изучали Java. Ваши вопросы полностью отвечены, и больше обсуждать нечего. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 14:12 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Странно сделали разработчики Java - вроде бы сделали тип String с семантикой значения, а не ссылки, разрешили использовать в выражениях с операторами, но корректное удаление после вычисления выражения не сделали. Хотя как раз с ТАКОЙ реализацией (копирование=всегда создание нового экземляра) это делается безболезненно. Заболел у них тогда кто-то что ли, или уволился. Или я чего то не понимаю и есть причины, по котором они это не сделали и не могут сделать до сих пор в своем основном компиляторе? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 14:14 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
cossack5Eugene NewLeonid Kudryavtsev, 1) Почему не удаляются временные объекты сразу после вычисления выражения, в котором они задействованы? Или все-таки удаляются? Хотелось бы понять, как это работает. JIT компилятор это умеет делать. AFAIK нет JIT компилятор никак в работу подсистемы выделения памяти не вмешивается. Он, потенциально. может выкидывать не нужный код (например лишние boxing/unboxing) или заменять вызовы Java-функций на inline версии на C (например toInteger() в C вариант с возвратом не String, а CharSequence, но сомневаюсь, что такой inline есть в сорцах Java). Но не вмешиваться в распределение памяти. Если бы вмешивался, это было бы очень и крайне странно. IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 14:15 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Partisan M, отвечены или нет - мне решать. Не трудитесь больше писать сообщения на пол-страницы с 0 полезной информацией. Даже ловить вас на слове и безграмотности не хочу. Просто игнор. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 14:16 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewLelouch, Чем в вашем примере это могло помочь? Создавалось бы не более 2 лишних экземляров объекта String, а после выхода из цикла оставался бы один экземпляр - s. Так что ничего особо страшного бы не было. Код: java 1. 2. 3. 4. 5.
Не создает же 100 копий объектов для хранения integer. 1) Это не java 2) В вашем примере на java после выхода из цикла остается ровно 1 экземпляр строки ( s = "" ) 3) "Страшное" в вашем примере на java не количество экземпляров строки ("живых" там всегда не больше 3, считая результат Integer.toString), а то, что для конкатенации в java выполняется копирование контента аргументов в новый экземпляр строки. Именно это копирование и порождает проблемы в вашем примере, именно с ним борятся StringBuilder'ом и оно никак не связано с подстчетом ссылок ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 14:18 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, https://dzone.com/articles/escape-analysis - я думаю, вот это имелось в виду. Объект и правда может в хип не попасть при определенных условиях. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 14:19 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewСтранно сделали разработчики Java - вроде бы сделали тип String с семантикой значения, а не ссылки, разрешили использовать в выражениях с операторами, но корректное удаление после вычисления выражения не сделали. Хотя как раз с ТАКОЙ реализацией (копирование=всегда создание нового экземляра) это делается безболезненно. Заболел у них тогда кто-то что ли, или уволился. Или я чего то не понимаю и есть причины, по котором они это не сделали и не могут сделать до сих пор в своем основном компиляторе? Там сделано корректное удаление. В Java, уделение через GC ! И это оправдано. Т.к. оператор new в других языках, занимает какое-то время (т.к. нужно найти free память в heap). А в Java - это практически мгновенная операция! (разница работы new в C# и Java - AFAIK порядки, в Java в десятки-сотни раз быстрее) Но любой выйгрыш, где-то имеется подводные кани. Выигрываем на new, но теперь нужна очистка памяти в GC. Но опять таки, об этом подумали. Heap (и GC) разделен нв область для ВРЕМЕННЫХ объектов (young-генерация) и ПОСТОЯННЫХ объектов (oldgen). Для которых используют совершенно разные алгоритмы сборки мусора. В оптимале, если во young только временные объекты, их удаление так же будет "мгновенно". Но на практике, т.к. программисты пишут гуано-код, то все работает не совсем так, как ожидалось создателями языка )))) Плюс теоретики от ООП и новых технологий. Проблема не в распределнии памяти, а в концепции имутабельности объектов (необходимость лишнего копирования/создания иммутаблеьных объектов). Но такая же проблема будет в любом другом языке! AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 14:24 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, еще раз спасибо за информативные ответы. Насчет гуано - тонкий философский вопрос - код ли гуано, или язык, или компилятор.. 21 век Ну и что, что 21 век. Все равно в 21 веке практически ничего нового по теории программирования не изобрели. Рост мощностей вычислительных систем остановился. Лучше чем записи фиксированного размера для доступа к действительно большим массивам данных все равно ведь ничего не изобрели. Т. к. в таком случае адрес нужной записи вычисляется по индексу легко. Я вообще вижу, что в 21 веке часто стали изобретать велосипеды 50-летней давности, по невежеству наступая на все уже пройденные грабли. Например, xml - тупик иерархических БД 1950-1960-х годов. Или среды разработки, которые делают меньше, хуже и медленнее, пожирая дикое количество ресурсов по сравнению с тем, что быстро работало на Pentium-I. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 14:45 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Lelouch, "Страшное" в вашем примере на java не количество экземпляров строки Вы уж определитесь - да или нет. Создаются 100 объектов, висят ли в памяти или нет. Я ведь прямо об этом спросил сразу же. Leonid Kudryavtsev, Но такая же проблема будет в любом другом языке! Что такого в сборщике мусора от Java, чему повредит досрочное удаление объекта, сделанное без поиска в памяти? Иммутабельные временные переменные, созданные в выражениях, можно удалять сразу именно потому, что они иммутабельные. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 14:56 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene New, не надо гнать , а надо знать http://proglang.su/java/strings-stringbuilder-stringbuffer можешь сразу задать длину с запасом и будет у тебя "строка фиксированного размера" (правда может ещё и увеличиваться. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 15:01 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewLelouch, "Страшное" в вашем примере на java не количество экземпляров строки Вы уж определитесь - да или нет. Создаются 100 объектов, висят ли в памяти или нет. Я ведь прямо об этом спросил сразу же. Вы спросили что не так со строками - вам ответили. Потом вы спросили какую-то ересь про подсчёт количества ссылок для строк, считая это решением проблемы, которую сами себе придумали. Почему нельзя удалять сразу - Почитайте про то, как выполняется выделение памяти и сборка мусора, вопрос пропадёт. Кратко - большинство сборщиков должны выполнить упаковку кучи (heap compaction), чтобы освободить память (по-моему только Concurrent mark and sweep упаковку не выполняет) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 15:16 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene New...можно удалять сразу... А зачем? Это будет жесткий тормоз. Например Java new выделяет память не кусочками по байтам, а сразу большим куском для всего thread. Что бы минимизировать время блокировки heap при многопользовательской/многопотоковой обработке. Дальнейшее выделение памяти в Java (new), в оптимале, просто одна ассемблерная инструкция: add указатель_на_свободное_место + выделяемый_размер В оптимале, т.к. и тут теоретики ООП постарались. Ввели исключение при синхронизации для иммутабельных полей типа final в объектах. Теперь любой new дополнительно требует включение asm инструкций для синхронизации. Но, вроде, читал иследование которое этому было посвещено, потери времени минимальный, единицы процентов (плюс авторы иследования нашли баги в JVM ))) - в ассемблерном коде были перепутаны типы блокировок ))) ) Так же и освобождение. Бесмысленно освобождать по одному объекту. Когда eden (young генерация) заполнится - ее всю сразу и освободят. В оптимале, если в eden только временные объекты, опять таки, одна ассемблерная инструкция ))) Поменять один eden на другой (их два) P.S. Как я понимаю, сейчас проблема "иследований" это научить языки оптимально работать с NUMA архитектурой. Никаких алгоритмов более-менее оптимального выделения памяти для NUMA до сих пор не придумано. Пока выделяют первое попавшееся, а потом получают тормоза при выполнении. Но опять таки, это проблема не только JAVA, а практически любого современного языка программирования. AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 15:37 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewЯ вообще вижу, что в 21 веке часто стали изобретать велосипеды 50-летней давности, по невежеству наступая на все уже пройденные грабли. Например, xml - тупик иерархических БД 1950-1960-х годов. х.я се. в середине 40х только только появились электронные вычислители которые с натяжкой можно и компьютером то назвать, оказывается через 5 лет на таких уже иерархические бд крутились. Eugene NewИли среды разработки, которые делают меньше, хуже и медленнее, пожирая дикое количество ресурсов по сравнению с тем, что быстро работало на Pentium-I. Никто не заставляет пользоваться IDE, берешь notepad++ прогаешь на java, сразу после hello world вернешся назад на IDE. Почти все здесь пробовали в notepad писать. Как видно фанатов notepad здесь не много. Ну вот тебе навскидку что такое IDE https://martinfowler.com/bliki/PostIntelliJ.html Eugene NewЧто такого в сборщике мусора от Java, чему повредит досрочное удаление объекта, сделанное без поиска в памяти? Иммутабельные временные переменные, созданные в выражениях, можно удалять сразу именно потому, что они иммутабельные. Ничему не повредит но скорее всего врядли поможет. Помимо это есть термин фрагментация памяти. Смысл есть если у нас все объекты будут однинакового размера со всеми вытекающими те. все объекты должны быть размером с самый большой объект. Сборщик не просто чистит но еще и дефрагментирует. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 15:38 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вообще название сборщик мусора прижилось, возможно вначале они был сборщиком мусора но по сути это менеджер памяти встроенный в jvm. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 15:40 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewЧто не так с Java String и как вы с этим боретесь? Да, еще одна вещь, которая "не так" с Java String На самом деле, правильный интерфейс, это CharSequence !!! а String - это конкретная имплементация НО в большинстве ф-ций языка и 100% библиотк/пользовательского кода, вместо интерфейса CharSequence, забит String ((( Никто, никогда ПРАВИЛЬНО не пишет - CharSequence, все тупо в описании ф-ций гуано-кодят String и не парятся. Из-за этого, нет возможности сделать свою "правильную" имплементацию ((( Если бы народ не загуано-кодил 100500 миллиардов строк с тупым указанием String (имплементации), а правильно всюду бы использовали CharSequence (интерфейс) - проблемы бы не было. ООП бы рулил. Но сейчас, весь lagacy код жестко привязан к конкретной имплементации. Поэтому свою имплементацию, при всем желание, сделать уже не получается. Тогда нужно во ВСЕХ ныне существующих библиотеках find-and-replace String на CharSequence заменять и перекомпилировать ((( ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 15:55 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevНикто, никогда ПРАВИЛЬНО не пишет - CharSequence в android везде CharSequence ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 16:35 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewGarrick, вроде того, что такой код плохой Код: java 1. 2. 3. 4.
пожирает память, создавая 100 объектов, причем почему то одновременно. Потому что у тебя код слишком сложный для escape analysis оптимизации. Вот здесь почитай, как оно работает в java, и в каких случаях объекты не аллоцируются: https://habr.com/company/jugru/blog/322348/ А так да, асбстрактный совершенный компилятор здесь бы ничего не создал кроме финальной строки. Но таких пока нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 16:40 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
lleming, вас еще много открытий ждет. Как говорил Сократ: "я знаю что ничего не знаю". Leonid Kudryavtsev, значит, дело в тормозах. Теперь понятно, спасибо. Я тут сейчас прочитал про новый алгоритм выделения памяти в Java 2017 года - вообще отказаться от сборки мусора и просто ронять программу когда память заканчивается Никаких алгоритмов более-менее оптимального выделения памяти для NUMA до сих пор не придумано. IMHO раз в 2000-м году не придумали, сейчас тем более вряд ли что то новое родят. Под локальные объекты-значения просится стек, но есть опасения, что для строк неограниченной длины потребуется слишком много места в стеке. По поводу грязного кода - его же сами разработчики Java и наплодили в своих библиотеках, а не народ. Даже грязный Integer.ToString придумал не народ. :-) Возвращаясь к использованию String. Хотелось бы кое что уточнить. Мне бы хотелось иметь какие то критерии его использования. Понятно, что в принципе его вообще не надо использовать и бить тапками по голове всех, кто его упомянет в программе, включая самих разработчиков Java. Непонятно, когда его использовать все таки МОЖНО и это не будет грязным. Ну вроде для хранения константных значений, которые никогда не будем даже читать - можно :) А любая попытка доступа к нему даже для чтения породит копию объекта в куче, которая там будет висеть в потенциале очень долго. Если по final в функцию передать, сделает копию или нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 16:43 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, CharSequence повялся гораздо позже String у String контракт на hashCode, без него switch не работает с CharSequence будут возникать проблемы (ну самое простое: как его использовать в качестве ключа Map?) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 16:45 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
chpasha, в android везде CharSequence ;) Неправда. FontVariationAxis(String tagString, float styleValue) https://developer.android.com/reference/android/graphics/fonts/FontVariationAxis Я просто наугад потыкал в справочник, ожидая что первое со строками выпадет. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 16:49 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene Newlleming, вас еще много открытий ждет. Как говорил Сократ: "я знаю что ничего не знаю". Leonid Kudryavtsev, значит, дело в тормозах. Теперь понятно, спасибо. Я тут сейчас прочитал про новый алгоритм выделения памяти в Java 2017 года - вообще отказаться от сборки мусора и просто ронять программу когда память заканчивается Никаких алгоритмов более-менее оптимального выделения памяти для NUMA до сих пор не придумано. IMHO раз в 2000-м году не придумали, сейчас тем более вряд ли что то новое родят. Под локальные объекты-значения просится стек, но есть опасения, что для строк неограниченной длины потребуется слишком много места в стеке. По поводу грязного кода - его же сами разработчики Java и наплодили в своих библиотеках, а не народ. Даже грязный Integer.ToString придумал не народ. :-) Возвращаясь к использованию String. Хотелось бы кое что уточнить. Мне бы хотелось иметь какие то критерии его использования. Понятно, что в принципе его вообще не надо использовать и бить тапками по голове всех, кто его упомянет в программе, включая самих разработчиков Java. Непонятно, когда его использовать все таки МОЖНО и это не будет грязным. Ну вроде для хранения константных значений, которые никогда не будем даже читать - можно :) А любая попытка доступа к нему даже для чтения породит копию объекта в куче, которая там будет висеть в потенциале очень долго. Если по final в функцию передать, сделает копию или нет? Копия создается только при изменении. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 16:49 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Код: java 1.
Знающие, прокомментируйте это, пожалуйста. Так ли это или он меня в заблуждение вводит? Не первое противоречие в данной теме. String s1 = 'Превед'; String s2 = s1; Создается копия или нет? По идее да. Так зачем он мне пишет, что "Копия создается только при изменении." ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 17:04 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewЗнающие, прокомментируйте это, пожалуйста. Так ли это или он меня в заблуждение вводит? Не первое противоречие в данной теме. String s1 = 'Превед'; String s2 = s1; Создается копия или нет? По идее да. Так зачем он мне пишет, что "Копия создается только при изменении." ??? Нет конечно Где тут какое-то создание? (вызов new) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 17:17 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene New...Если .... в функцию передать, сделает копию или нет? Нет конечно. Еще раз читать книжки по Java для начинающих. AFAIK В Java ВСЕ передачи параметров типа "объект" by reference, а все передачи atomic типов by value. Разумеется никаких копий объектов при передачи в функцию не будет и быть не может. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 17:30 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene New... Почему в Java с первой версии не сделали нормальный string с подсчетом ссылок? при чем здесь String? Если подразумевается управление памятью с использованием счетчика ссылок на себя в самом объекте, то этого механизма памяти в java нет совсем . Ни для каких объектов. Управление памятью строится на базе достижимости объектов от переменных - "корней" графа созданных объектов. Недостижимые от таких корней объекты удаляются, со временем, сборщиком мусора. Eugene New Не осилили или были объективные причины? Мир они так видели. В целом, надеялись, что этот подход даст им более простые механизмы управления памятью, а значит, как они верили, более надёжный язык. Eugene NewКогда все-таки следует или приходится использовать тип String в программах на Java? Всегда, когда вам требуются ключевые свойства String - иммутабельность, компарабельность и предвычисленность хеш-значения. И, если вдруг, все три одновременно - то нужны очень-очень специальные основания для того, чтобы думать, чем их заменить. Eugene NewСтранно сделали разработчики Java - вроде бы сделали тип String с семантикой значения, а не ссылки... В java вообще нет объектов с "семантикой значения". Совсем, by design. Eugene NewПод локальные объекты-значения просится стек, но есть опасения, что для строк неограниченной длины потребуется слишком много места в стеке. Повторю. Никто никуда не просится. Объектов-значений в java просто нет . PS Дело ваше, конечно, что и как вам говорить. Но выглядят ваши тексты как ..., допустим, как слишком толстый троллинг. Местами - за гранью хамства. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 17:48 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Код: java 1. 2. 3.
s1 = "Hello" - хотя для других объектов было бы новое значение, а не старое. У Java нет перегрузки операторов, но String можно использовать в выражениях с оператором + . При том, что нет атомарного типа - последовательности символов. Поэтому String все же какой то особенный класс, отсюда вопросы про ньюансы его передачи в функции. хамство. Никакого хамства, желание разобраться - не более. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 18:42 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene New Код: java 1. 2. 3.
s1 = "Hello" - хотя для других объектов было бы новое значение, а не старое. У Java нет перегрузки операторов, но String можно использовать в выражениях с оператором + . При том, что нет атомарного типа - последовательности символов. Поэтому String все же какой то особенный класс, отсюда вопросы про ньюансы его передачи в функции. Нет никаких ньюансов передачи в функции Ваш пример и текст - совершенно не понял. В примере, вообще никакого создания объектов на этапе выполнения не будет. Т.к. все строковые константы будут созданы еще в момент загрузки класса. И никаких new у Вас нет. по исходному вопросу темы (хоть уже и отвечали): Использовать + с классом String, это гуано-код. Для нормального решения данной задачи, есть StringBuilder/StringBuffer и метод append Последние версии Java, умеют сами преобразовывать + в StringBuilder/StringBuffer Но в Вашем исходном примере, дофига лишних вызовов: Integer.toString() и + между String'ами. Хотя, все можно сделать одним вызовом: StringBuilder.append( int ) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 18:50 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
проблема в конструкции a = b + c в том, что Вы неявно говорите, мне нужен объект a, с новым значением a + b. В случае, атомарных типов. это и пофиг. просто перепишется существующее значение. В случае со строками, нужно или аллоцировать новую область памяти под новое значение или, как минимум, выполнять копирование строки с места на место (если буфер фиксированного размера) Никакой разницы между Java и другими языками программирования - НЕТ. Счетчик ссылок тут тоже никаким боком помочь не может. Даже строки с фиксированной длиной, помочь не могут. Т.к. их все равно нужно копировать (что не бесплатно! и строки могут быть в 100500 символов) Т.ч. в любом языке, такая конструкция будет не оптимальной. Оптимальный вариант, вместо создания 100500 раз разных переменных под временные значения в цикле и многократного копирования строк, один раз выделить буфер и дописывать в его конец... В Java для этого существует класс StringBuilder. В других языках (например "чистый" Basic) и того нет, только многократное копирование строк с места на место. Ни Java, ни GC, ни счетчик ссылок - тут вообще никаким боком. IMHO & AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 18:58 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene News1 = "Hello" - хотя для других объектов было бы новое значение, а не старое почему-это? Код: java 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 18:58 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
chpashaпочему-это?потому что ссылки ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 19:01 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
chpashaпочему-это? Запустить... проверить ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 19:03 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадя Leonid Kudryavtsev я не спрашиваю, почему так получается. был приведен пример Код: java 1. 2. 3.
и утверждение "s1 = "Hello" - хотя для других объектов было бы новое значение" я привел пример с объектами, идентичный указанному и усомнился в сделаных выводах ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 19:10 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Сорри. Полностью с тобой согласен. Просто показалось, что это вопрос Т.С., уже на твой ответ ))) вечер, пора идти пить пиво ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 19:28 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene New Код: java 1.
Знающие, прокомментируйте это, пожалуйста. Так ли это или он меня в заблуждение вводит? Не первое противоречие в данной теме. String s1 = 'Превед'; String s2 = s1; Создается копия или нет? По идее да. Так зачем он мне пишет, что "Копия создается только при изменении." ??? А зачем тут копию создавать. Тут во второй строке ссылка копируется из одной переменной в другую. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 19:51 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, . В примере, вообще никакого создания объектов на этапе выполнения не будет. Т.к. все строковые константы будут созданы еще в момент загрузки класса. И никаких new у Вас нет. Хотелось бы подробностей. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Верно ли, что a = "Abc" это не a = new String ("Abc") ? Что есть строковая константа "Abc"? Объект класса String или что? В момент загрузки какого класса он создается - класса MyCoolClass или какого? Где хранится объект "Abc" (если это вообще объект) - в куче или где то в другом месте? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 20:28 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewВерно ли, что a = "Abc" это не a = new String ("Abc") ? Что есть строковая константа "Abc"? Объект класса String или что? В момент загрузки какого класса он создается - класса MyCoolClass или какого? Где хранится объект "Abc" (если это вообще объект) - в куче или где то в другом месте? Да, верно Объект класса String Собственно последовательность байтиков-букв "Abc", в данном конкретном случае, будет хранится в некоторой специальной области для intern() строк пришедших из class файла. Куча это или нет - вопрос сложный и филосовский. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 20:41 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
На хабре была статья, что уже работает автоматическая оптимизация такого говнокода -> стрингбилдер. А т.тролля предлагаю забанировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 21:42 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
кстати на счет говнокода, считаю - тут тоже надо без фанатизма и экономии на спичках. Вариант конкатенации в цикле - да, плохо (возможность оптимизации вынесем за скобки), а вот варианты типа Код: java 1.
или даже Код: java 1. 2. 3. 4. 5. 6.
ничего страшного не произойдет в 99.9% случаев для 99.9% нетленок. Городить ради такого StringBuilder или String.format - только читаемость понижать ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 22:07 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Siemargl, это вы тролль, к тому же невежественный на 100%. Ничего по теме сказать неспособный. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 22:17 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
chpasha, Старый Язык. В дНете и Д есть мультилайн стринги. Возможно, формат() стоит того, конечно по сравнению с сиквелзапросом накладные копейки, а вот при логгинге уже не факт. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 22:20 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
chpasha, ничего страшного не произойдет в 99.9% случаев для 99.9% нетленок Вроде и так ничего смотрится: Код: java 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 22:32 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewЯ тут сейчас прочитал про новый алгоритм выделения памяти в Java 2017 года - вообще отказаться от сборки мусора и просто ронять программу когда память заканчивается Есть неплохая лекция Елизарова на тему сборок мусора. Там он рассказывает про Shennandoh (не помню как правильно писать) но походу прошелся по всем концепциям которые есть в науке и технике. Их кстати не очнеь много. Проблема которую ты вытащил в топик - гипертрофированая. Тоесть она существует но она не главная. Проблема есть для объектов которые переживают 1 эпоху жизни в Eden и путешествуют в suprival, и permgen. Твои объекты-строки хотя и флудят но будут убраны очень быстро за милисекунды. Performance issue они не создают. Вообще в крупном java-приложении аллокации памяти происходят постоянно и непрерывным потоком. Это нормальный flow. Тоесть выносить этот игрушечный цикл как проблему не стоит т.к. проблемы на самом деле нет. Это учебный пример который просто показывают новичкам чтобы рассказать что такое вообще Java-memory. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 09:00 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
[quot mayton]Eugene New... Проблема которую ты вытащил в топик - гипертрофированая. Тоесть она существует но она не главная. Проблема есть для объектов которые переживают 1 эпоху жизни в Eden и путешествуют в suprival, и permgen. Твои объекты-строки хотя и флудят но будут убраны очень быстро за милисекунды. Performance issue они не создают. Вообще в крупном java-приложении аллокации памяти происходят постоянно и непрерывным потоком. Это нормальный flow. Тоесть выносить этот игрушечный цикл как проблему не стоит т.к. проблемы на самом деле нет. Это учебный пример который просто показывают новичкам чтобы рассказать что такое вообще Java-memory. Ну, на 95% как бы примерно так и есть. Но на 5 копеек я бы уточнил. maytonчтобы рассказать что такое вообще Java-memory. и показать, что программирование всегда происходит в рамках и с учётом особенностей "машины", чтобы это не значило. Здесь она, в части управления памятью, вот такая. И это ведет к определенной манере работы с этой машиной. maytonPerformance issue они не создают Это вопрос, сильно связанный со способом разглядывать мир. Цикл жизни объекта состоит из его создания, использования и уничтожения. Уничтожение - не твое дело, оно не дано тебе в непосредственное управление и, в широком диапазоне историй, вообще не должно привлекать твое внимание как вопрос "Performance issue". Остается создание и использование. Если обсуждаемый цикл сидит в конструкторе некоего "очень долго создаваемого объекта", но который потом живет длительное время и быстро реагирует на многочисленные запросы к себе, то здесь тоже нет "Performance issue" - время создания такого объекта будет целиком амортизировано за время его жизни. А если такой цикл сидит в методе, отвечающем на клиентский запрос к этому объекту, то он может целиком определить время реакции на запрос и превратиться именно "Performance issue". Тогда происходит возвращение к пункту 1 - программировать надо с учетом особенностей работы конкретной "машины". ИМХО, самый тонкий момент состоит в том, как и когда ставить точку в "учете особенностей". Но этот вопрос - "для старших курсов". ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 11:15 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Современная кибернетика создала искусственные комфортные условия разработки и использования ПО. Оградив нас от segmentation fault мы заплатили налог. Мы платим его постоянно и везде. Это посторонние активности в браузере. Работа антивируса. И разные прочие активности операционных систем и сред и приложений и баз данных. Тысячи их. Фиксить их невозможно по экономическим законам да никто и не хочет. Вопрос цены этого налога - это открытый вопрос. Как его посчитать? Как его пофиксить? И какой ценой? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 11:29 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
maytonСовременная кибернетика ... Вот буквально вчера я глубоко сожалел, что это слово вообще реабилитировали. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 11:38 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Siemarglа вот при логгинге уже не факт я потому логгинг и не привел в качестве примера, кроме того все адекватные логгеры поддерживают в том или ином виде форматирование сами, там нет острой нужды ни в конкатенации ни в String.format Eugene NewВроде и так ничего смотрится возможно дело вкуса. я бы предпочел первый вариант - не вижу резона городить огород. кроме того нужно смотреть будет ли работать в таком случае автоподсказка. в первом случае я точно знаю, что будет ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 12:05 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
chpashaя точно знаю, что будет правда не во всех IDE ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 12:06 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
boobymaytonСовременная кибернетика ... Вот буквально вчера я глубоко сожалел, что это слово вообще реабилитировали. Это Усов меня заразил. ЭВМ... кибернетика. решения XXV съезда партии... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 12:39 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewЯ тут сейчас прочитал про новый алгоритм выделения памяти в Java 2017 года - вообще отказаться от сборки мусора и просто ронять программу когда память заканчивается "Слышал звон, да не знаю, где он" http://openjdk.java.net/jeps/318 Epsilon GC это не новый "подход", это просто еще 1 сборщик мусора. И в jep даже перечислено для чего это может быть полезно. There are a few use cases where a trivial no-op GC proves useful: Performance testing. Memory pressure testing. VM interface testing. etc. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 12:55 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Современная кибернетика создала искусственные комфортные условия разработки и использования ПО. 1) Вся т. н. современная кибернетика основана на идеях 20-50 летней давности 2) По сравнению со средствами 10-20 летней давности сделано хуже, неудобнее, некомфортнее. 3) Заморочки со строками и невозможность использовать встроенные оператор + - это неудобство. Удобным была бы реализация встроенного типа-строки, который бы работал так же, как атомарные типы вроде целых и не требовал бы думать о заморочках. Такое делалось в языках 1980-х годов. Не могут - не надо делать + со строками, не вводить в заблуждение. 4) Уверенность в том, что все обязаны жрать, что ни дают - раздражает. И в jep даже перечислено для чего это может быть полезно. Не только то, что вы сказали. Еще и: - Extremely short lived jobs - Last-drop latency improvements - Last-drop throughput improvements То есть для вполне таки рабочих программ. Прорыв 21 века! Программа работает пока не исчерпает всю память, потом просто падает! Разработчики довольны собой, считают что все ок! Ну а что - сожрут и так. Не могут наладить работу сборщика без пауз - давайте его вообще отключим. Современная кибернетика Осталось только разрешить ручное управление памятью, чтобы вернуться к тому, с чего начали. Вручную то получше будет. Ну будут утечки может быть, но хуже заранее определенной постоянной утечки уже быть не может. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 17:06 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewПо сравнению со средствами 10-20 летней давности сделано хуже, неудобнее, некомфортнее. Да, так и есть и дальше так будет. Вы хотя бы на секунду подумайте о том, куда деть программистов, когда они напишут все, что нужно - одну идеальную ОС, один идеальный браузер, один идеальный почтовый сервер и так далее. Так что и дальше будет прогресс в виде стремительно устаревающих знаний и технологий и переизобретения по 10-20 кругу старого и забытого под видом нового. Знаете, почему в армии копают траншею "от забора и до обеда"? Потому что принцип "мне не нужно, чтобы ты сделал, мне нужно, чтобы ты задолбался" воспитывает нужное подчинение, которое позволит в бою по команде офицера подняться солдатикам и побежать навстречу верной смерти в виде пулеметной очереди. Смысл - умение подчиняться. Не нужно умничать, берите свои IDE и пилите код, "солнце еще высоко" (с) Вам не нравится - никто Вас лично в IT не держит, наймитесь в Макдональдс, от Ваших выкриков с надрывом "эх, ребята, все не так, все не так, как надо" в стиле Владимира Семеновича - не поменяется ничего. Все было так, как должно быть, и дальше так будет. Уясните себе это раз и навсегда. И никто не позволит ребятам, которые курируют развитие Java, что-либо поменять. Нам нужно отсутствие нормальной верификации байт-кода в виртуальной машине. И это останется так навсегда. Нас не очень интересует, что думают по этому вопросу разработчики, как и по многим другим вопросам. Можете написать жалобу, я готов лично переслать ее Ларри со своими комментариями. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 17:20 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene New, всё правильно, вот только надо учесть что всё это создавалось путем выбора меньшего зла. ты смотришь со своей колокольни , но она намного меньше колокольни разработчиков, поэтому для того чтоб ругать что-то глобальное надо подняться на более высокую колокольню и уже от туда глаголить ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 17:24 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewСовременная кибернетика создала искусственные комфортные условия разработки и использования ПО. 1) Вся т. н. современная кибернетика основана на идеях 20-50 летней давности 2) По сравнению со средствами 10-20 летней давности сделано хуже, неудобнее, некомфортнее. 3) Заморочки со строками и невозможность использовать встроенные оператор + - это неудобство. Удобным была бы реализация встроенного типа-строки, который бы работал так же, как атомарные типы вроде целых и не требовал бы думать о заморочках. Такое делалось в языках 1980-х годов. Не могут - не надо делать + со строками, не вводить в заблужденит. Сколько лет вы программируете? И на каких языках и технологиях? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 17:27 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewСовременная кибернетика создала искусственные комфортные условия разработки и использования ПО. 1) Вся т. н. современная кибернетика основана на идеях 20-50 летней давности 2) По сравнению со средствами 10-20 летней давности сделано хуже, неудобнее, некомфортнее. 3) Заморочки со строками и невозможность использовать встроенные оператор + - это неудобство. Удобным была бы реализация встроенного типа-строки, который бы работал так же, как атомарные типы вроде целых и не требовал бы думать о заморочках. Такое делалось в языках 1980-х годов. Не могут - не надо делать + со строками, не вводить в заблуждение. 4) Уверенность в том, что все обязаны жрать, что ни дают - раздражает. И в jep даже перечислено для чего это может быть полезно. Не только то, что вы сказали. Еще и: - Extremely short lived jobs - Last-drop latency improvements - Last-drop throughput improvements То есть для вполне таки рабочих программ. Прорыв 21 века! Программа работает пока не исчерпает всю память, потом просто падает! Разработчики довольны собой, считают что все ок! Ну а что - сожрут и так. Не могут наладить работу сборщика без пауз - давайте его вообще отключим. Современная кибернетика Осталось только разрешить ручное управление памятью, чтобы вернуться к тому, с чего начали. Вручную то получше будет. Ну будут утечки может быть, но хуже заранее определенной постоянной утечки уже быть не может. Если хочется сборщика мусора без пауз (а точнее с небольшими паузами) - есть ZGC, Shenandoah и C4 (от Zulu) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 17:27 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene New2) По сравнению со средствами 10-20 летней давности сделано хуже, неудобнее, некомфортнее.Неудобнее? Некомфортнее?? Что за ересь! 20 лет назад для организации межплатформенного взаимодействия приходилось дикие танцы с бубнами устраивать, придумывать протоколы или какую-нибудь CORBA городить. Сейчас за 5 минут любая современная IDE сожрет WSDL, нагенерит определений типов и шли что угодно куда угодно, с управляемым качеством сервиса, любыми фичами шифрования. Жалующихся, что прогресса нет, программировать ЕС1045 посадить бы на месяц. Даже без хардкора вроде перфокарт, с терминальным доступом через какую-нибудь СВМ ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 18:34 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Andy_OLAP, Все было так, как должно быть, и дальше так будет. Уясните себе это раз и навсегда. Это вы от лица разработчиков Java говорите? Что же они бояться это заявить от своего имени и используют всяких анонимов для этого? почему в армии копают траншею "от забора и до обеда"? Как то я не ощущаю себя солдатом. Если уж приводить аналогии - то с офицером, который в офицерском клубе с другими офицерами и генералами почти на равных общается. Если хотите реальных исторических примеров, почитайте про попытку общения великого и ужасного Берии с физиком Капицей в таком тоне, что Капица ему ответил и чем это в итоге закончилось для обоих. Вам не нравится - никто Вас лично в IT не держит, наймитесь в Макдональдс, от Ваших выкриков с надрывом "эх, ребята, все не так, все не так, как надо" Вы себя маршалом IT вообразили, а всех остальных духами, которым вы приказы раздаете? Детский сад. Блин, даже боюсь разрушать ваши иллюзии, вдруг это вам нанесет душевную травму. Все таки скажу - что и как мне делать разберусь сам. А вы так не можете разговаривать даже с сотрудниками, которым платите зарплату, будь у вас такие, в чем я сомневаюсь. Неверный вы тон выбрали для разговора.. Вам не удастся ни зафлудить тему, ни вывести меня из себя. "мне не нужно, чтобы ты сделал, мне нужно, чтобы ты задолбался" Ну пусть напишут этот девиз на своем официальном сайте, а не используют для этого анонимов и не рассказывают про 'удобства'. Вы определитесь - вы программист или представитель компании. Может в самой компании то по головке за такую агитацию не погладят. Зашедший, приходилось дикие танцы с бубнами устраивать, придумывать протоколы или какую-нибудь CORBA городить. Ок, замечу только, что были и веб-сервера, и http-запросы к ним, и текстовые файлики слать было можно. программировать ЕС1045 посадить бы на месяц Не застал. Это вы слишком далеко в прошлое заглядываете, я не такой срок называл. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 19:14 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Если хочется сборщика мусора без пауз (а точнее с небольшими паузами) - есть ZGC, Shenandoah и C4 (от Zulu) Спасибо за конкретную информацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 19:20 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewЗашедший, приходилось дикие танцы с бубнами устраивать, придумывать протоколы или какую-нибудь CORBA городить. Ок, замечу только, что были и веб-сервера, и http-запросы к ним, и текстовые файлики слать было можно.Можно. То есть написать собственные парсеры, маршаллинг-демаршаллинг, конверторы форматов дат/времени, добавить обработчики исключительных ситуаций... Это и есть изобретение велосипеда собственного протокола, о котором я сказал. Сейчас любой (почти) объект в любом (почти) языке автоматом маршаллится в SOAP со всеми иерархическими вложениями, генерациями стабов и оберток. Eugene New программировать ЕС1045 посадить бы на месяцНе застал. Это вы слишком далеко в прошлое заглядываете, я не такой срок называл.В 90-х на территории нашей необъятной была масса мест, где работали эти прекрасные орудия пытки программистов. В одном подмосковном военном городке "секретные" ЕС-ки заменили на нормальные серверы только в начале нулевых. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 20:09 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Зашедший...В 90-х на территории нашей необъятной была масса мест, где работали эти прекрасные орудия пытки программистов. В одном подмосковном военном городке "секретные" ЕС-ки заменили на нормальные серверы только в начале нулевых.А что такое нормальный сервер в этом контексте? А то каждые 5 лет мода меняется с тех времен и до сих пор. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 20:22 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
SiemarglЗашедший...В 90-х на территории нашей необъятной была масса мест, где работали эти прекрасные орудия пытки программистов. В одном подмосковном военном городке "секретные" ЕС-ки заменили на нормальные серверы только в начале нулевых.А что такое нормальный сервер в этом контексте?Поддерживающий *nix, gcc и прочий стандарт. В ЕС-ках были свои самобытные операционки, частично тыренные с IBM, частично допиленные во всяких НИИ с набором не менее самобытных приблуд с кучей багов. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 21:37 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Зашедший, До этого еще была нетварь, полуось и ос/400 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 21:41 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Зашедший, "секретные" ЕС-ки заменили на нормальные серверы только в начале нулевых Это они зря. Теперь вся безопасность страны ни к черту. О чем уже говорится совершенно открыто и что увязывают с политическими событиями последних пяти лет. Отклоняясь от темы замечу, что Буран летал в полностью автоматическом режиме, а Шатл - нет. Я большие ЭВМ видел видел (в институте и на одном ВПК предприятии), но за ними не работал и даже не помню их марок. То есть написать собственные парсеры, маршаллинг-демаршаллинг, конверторы форматов дат/времени, добавить обработчики исключительных ситуаций... Это и есть изобретение велосипеда собственного протокола, о котором я сказал Свое может и получше будет.. И побыстрее и понадежнее. И без ненужной шелухи. xml-файлы заставляют хвататься за голову сами по себе. В них полезной информации может половина от силы, остальное - повторяющиеся теги. Никак не могу понять, нахрена им понадобилось дублировать название тега при его закрытии, каким надо обладать для этого извращенным умом. Многобайтовые кодировки опять же - совершенно излишняя для русского языка вещь. Ах, для иероглифов это нужно, загребли русский язык вместе с ними. Просто увеличение в 2 раза объема передаваемой информации для русского текста без каких либо выгод. В ДВА РАЗА! Сложим это с xml-файлом и получаем уже примерно 75% мусора в сообщении. Это же очень-очень много! Поправьте если я тут в чем то ошибся. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 21:54 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewЗашедший, "секретные" ЕС-ки заменили на нормальные серверы только в начале нулевых Это они зря. Теперь вся безопасность страны ни к черту. О чем уже говорится совершенно открыто и что увязывают с политическими событиями последних пяти лет.Лолшто? Стыренные пиратские версии софта IBM, доработанные кувалдой и такой-то матерью, "безопаснее" полностью открытых исходников Линуха? Торвальдс - выкормыш ЦРУ и агент Моссада? ЕС-ки (особенно бакинской сборки), которые постоянно ремонтировались и требовали дежурной бригады с паяльниками, "надежнее" какого-нибудь камня от AMD? Это уж совсем толстый троллинг пошел. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 22:40 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Зашедший, я не готов к обсуждению отечественных ЭВМ, ЕС, Эльбрусе, Пентковском и т. п. В силу собственной некомпетентности в данном вопросе. Так же я не знаю, какое ПО и какая аппаратная часть используется в данный момент, скажем, в системе обнаружения запуска ядерных ракет. А также я не готов устраивать обсуждать ни того, все ли открыто в Линуксе или нет, ни конфликт Столлмана с Торвальдсом. Стыренные пиратские версии софта IBM На это вообще наплевать. Гугл тырит все подряд и у всех и не признает никаких законов других стран. И ничего. Но я хочу сказать, что для обеспечения обороноспособности страны вся аппаратная и программная часть должна изготавливаться в этой стране и этот выпуск должен быть полностью контролируемым этой страной и никем иным. И не иметь связей с внешним миром. И что не следовало в оборонной сфере отказываться от пусть и устаревших, но собственных систем, если они корректно выполняли свою работу. Мало того, что как говорят, почти в каждую материнскую плату внедрен механизм бекдора. В сфере ОС вообще идет нацеливание на автоматическое обновление всего без спроса и полную утрату пользователем контроля над своим собственным компьютером. То же самое в отношении средств создания ПО. Взять хотя бы мерзкий gradle и его активное навязывание всем. Предлагаю дальше на эту тему не распространяться, т.к. это оффтоп. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 23:20 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewЕсли хочется сборщика мусора без пауз (а точнее с небольшими паузами) - есть ZGC, Shenandoah и C4 (от Zulu) Спасибо за конкретную информацию. До того как вы окунётесь с головой в Шенанды и прочие Си-4 послушате краткий поинт. Выбор GC - это перетягивание каната между - время реакции системы (lag) - пропускная способность (throughput) Первый вариант - катит для UI приложений. Второй для джобов и фоновых процессов. Вы исходя из условий вашей задачи выбираете что вы ходите. Одно или другое. Нет особой надежды что в ближайшее время создадут что-то революционное или сверх-быстрое в части управления памятью. Почитайте также рекомендации от производителя по поводу выбора GC в десятке. Для большинства бизнесовых задач этого хватает. https://docs.oracle.com/javase/10/gctuning/available-collectors.htm#JSGCT-GUID-414C9D95-297E-4EE3-B0D9-36F158A83393 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 00:30 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewТо есть для вполне таки рабочих программ. Прорыв 21 века! Программа работает пока не исчерпает всю память, потом просто падает! Разработчики довольны собой, считают что все ок! Ну а что - сожрут и так. Есть ПО которое работает в особом режиме. Утром стартует и вечером вырубается. Биржевые процессы например. Это удобно для наката новых версий. И если соптимизировать аллокации памяти так что они будут работать с пулами объектов то чистых аллокаций будет очень мало. С -Xmx32G со старта можно будет долго ждать пока все не заполнится. ЕМНИП создатели программного продукта Disruptor который успешно работает в Лондонской бирже так и поступили. Собственно они изобрели Эпсилон чуть раньше. С другой стороны. Если вспомнить что в ОС освобождает память при убийствое main-процесса с гарантией то идея становится не такой уж абсурдной. Вспомните как часто вы убивали процессы в таск менеджере Windows или посылали сигнал KILL процессу Unix? Разве вас беспокоило состояние памяти после этого? Пох. Мы убеждены что самый лучший GC это операционка. С третьей стороны. Все умные и сверх-умные параллельные и последовательные GC постоянно делять памят на зоны по классу доступа. И на этом мы теряем полезное пространство. А эпсилону пох. Вся память - flat. Вся доступна. Уплотнять не надо. Убирать не надо. Уберет ОС. Особенно если речь идет о коротких и одноразовых процессах таких как компилляция или деплой. Why not? Вот как-то так. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 00:43 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene New1) Вся т. н. современная кибернетика основана на идеях 20-50 летней давности Как мы дошли до идей кибернетики. Вернемся чуть в начало. Собственно тема началась как обсуждение GC, строк и подсчета ссылок. Код: java 1. 2. 3. 4.
Обсуждение данной темы я считаю неполным без код-ревью и комментариев этого исходника со стороны сообщества Java в котором мы находимся. Code-smell вообще написать можно в любом ЯП. Но я-бы не стал это возводить в систему. Это - редкое исключение из правил и обычно code-review на нормальном проекте не пропускает подобные "странности". Мне также интересно - кто автор. У него профиль не прокачан. Там есть Delphi, Android. Но в небольших количествах. Хочется понять откуда автор пришёл с такими вопросами. Бытие определяет сознание. Это сказал классик. А у нас в форуме - язык и технология. Мне также всегда было интересно почему GC обуждают в контексте Java? Есть масса предметных областей It, где GC используется явно или неявно. Существуют предметные области где без GC вообще ничего не работает. GC (ЕМНИП) был создан и применен для языка Lisp. В силу своей специфики (приложение + данные суть AST ) ручное управление освобождением памяти для Lisp-машины практически немыслимо. Я за свою практику использования Java видел много прод-инцедентов. C OutOfMemory, PermGen e.t.c. И во всех случаях мы разбирались и приходили к выводу что виноват разработчик. Где-то не так c Hibernate работали. Где-то экстенсивный рост системы вследствие распухания БД. Но никогда GC не был указан причиной инцедента. Да и сложно себе представить подобное объяснение. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 01:11 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
mayton, Спасибо за полезную информацию. Утром стартует и вечером вырубается Это все хорошо, но где гарантия, что оно не отрубится раньше? Вносится элемент непредсказуемости, повезет-не повезет. Или есть четкие критерии оценки времени работы такой программы и условий, которым она должна удовлетворять, которые могут гарантировать n часов работы программы? Мы убеждены что самый лучший GC это операционка. Вы уверены, что с аварийным завершением работы у операционки все в порядке на 100% и это не создает утечек ресурсов? Программа может не только оперативную память использовать, но и другие ресурсы расходовать, которые автоматически не освободятся. Например, создавать временные файлы на диске. Менять существующие файлы и привести их в негодное состояние при внезапном завершении. Запустить транзакцию в БД, которая пусть даже не зависнет, но отвалится по rollback и приведет к росту мусора в базе (и так на регулярной основе, каждый день). Это так, на вскидку. приходили к выводу что виноват разработчик. Где-то не так c Hibernate работали. Где-то экстенсивный рост системы вследствие распухания БД. Кто виноват - тонкий философский вопрос, занимающий умы отечественной интеллигенции с середины 19 века. Существуют ли список того, что не должен делать разработчик, чтобы не оказаться виноватым и чтобы наоборот - если он этого не делал, то и обвинять его не будут? Условия использования. Было бы полезно с ними ознакомится. (понятное дело, что разработчик склонен будет наоборот считать виноватым не себя, а среду). Мне также интересно - кто автор. Предлагаю обсуждать суть вопроса, а не мою скромную персону. почему GC обуждают в контексте Java? Ну вроде как 100 временных строк не удаляются сразу из-за алгоритма сборщика мусора, который обеспечивает быстрое выделение, но может откладывать освобождение памяти сравнительно надолго. Это мне так сказали. Отсюда обсуждение плавно перешло на систему управления памятью. я считаю неполным без код-ревью и комментариев этого исходника со стороны сообщества Java в котором мы находимся Это просто пример проблемного кода, выбранный нарочно, не более. Все таки операцию + я бы для строк отменил в Java, раз уж она такая дурно пахнущая, а выгоды от нее не видно никакой. Просматривать тогда меньше пришлось бы - ведь компилятор по идее должен брать на себя часть работы по отсеиванию плохого кода. Заодно и Integer.toString на отмену просится или есть мнения, что оно может быть не дурно пахнущим? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 03:12 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene New, у тебя куча претензий к java, но всё упирается в незнание тонкостей языка. начни работать, а не обсуждать и будет польза. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 03:41 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Я собрал на Jdk8 следующий исходник. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Вот что внутри байткода. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
Прошу комментарии сообщества. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 09:09 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
mayton, Код: java 1.
это комменты декомпилятор пишет? если да - то какие проблемы :) тогда следующий тест - загрузить из текстового файла по строчно. помнится у меня грузилось очень долго , но это было в 6 java.... если не в 5... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 09:36 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Утилита javap генерит все. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 09:41 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
maytonУтилита javap генерит все.значит компилятор очень умный и не понятно откуда Eugene New Код: java 1. 2. 3. 4.
пожирает память, создавая 100 объектов, причем почему то одновременно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 09:46 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадя тогда следующий тест - загрузить из текстового файла по строчно. помнится у меня грузилось очень долго , но это было в 6 java.... если не в 5... Я думаю что со времен java5 слишком много всего поменялось. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 09:46 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
mayton, может из-за этого Код: java 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 09:48 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
если да - то какие проблемы Проблемы все же есть. 1. new StringBuilder внутри цикла 2. Integer.toString это new String внутри цикла 3. StringBuilder.toString это new String внутри цикла ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 09:49 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
maytonЯ думаю что со времен java5 слишком много всего поменялось.еще как много... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 09:52 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
То есть внутри цикла здесь создается 200 объектов String, 100 объектов StringBuilder. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 09:52 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Надо дальше копать. Я катаюсь на восьмой модели. У кого девятка? Десятка? Пробуйте. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 09:53 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
maytonЯ собрал на Jdk8 следующий исходник. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Вот что внутри байткода. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
Прошу комментарии сообщества. 21678798 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 10:21 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Siemargl, читай 21680335 в бесконечном цикле до наступления просветления. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 10:31 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewSiemargl, читай 21680335 в бесконечном цикле до наступления просветления. А что там читать, код написан криво уже не раз сказали в ветке об этом. Хочешь пиши криво, хочешь правильно. Криво или правильно зависит от ситуации. Хочешь в цикле создавать новые объекты создавай и не жалуйся что они создаются, не хочешь создавать не создавай и не жалуйся что они не создаются. по сути Integer.toString(12) явно говорит, сделай объект string представлящий число. stringBuilder.append(12) строку не сделает а просто пишет chars в свой буфер И тот и этот метод воспользуются тем же самым Integer.getChars, только Integer.toString создает новый char array и в конце сделает new String(chars[]) а stringbuilder прежложит дописать в свой заранее выделенный char array. Java дает тебе две пилюли одну синюю другую красную, выбирай. И не жалуйся зачем потом выбрал синюю. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 12:01 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewТо есть внутри цикла здесь создается 200 объектов String, 100 объектов StringBuilder. И что? Русским язЫком сказать что хочешь? Хочешь обсуждать содержательно, замени в своем коде String на int и этот код обсуждай. В нем ни одного объекта создано не будет. Код: java 1. 2. 3. 4. 5. 6.
на каком языке так программировать рекомендовано, для какой машины? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 12:33 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
maytonобычно code-review на нормальном проекте не пропускает подобные "странности". [рекламная пауза] некоторые IDE уже на этапе разработки про подобные странности рапортуют ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 13:32 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
chpasha, ))))) Круто! LOL )) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 14:20 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
некоторые IDE уже на этапе разработки про подобные странности рапортуют Им бы еще самим научится эти IDE грамотно писать. lleming, А что там читать, код написан криво уже не раз сказали в ветке об этом. По жизни недогоняющему Siemargl читать надо, причем до полного просветления - он решил, что компилятор все исправил и так можно писать. Чтобы говорить на любой пример плохого поведения программы, что код плохой и программист дурак, даже не нужно обладать разумом. Это может и попугай. Сформулировать критерии заранее, что можно и что нельзя, гораздо сложнее. Единого мнения по правилам применения String я тут не вижу. (недогоняющих просьба не беспокоится). ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 20:34 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Рекомендации FindBug по поводу этого фрагмента кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 21:21 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
mayton, а на Integer.toString даже не ругается. Этот FindBug наверняка писали не какие-то сверхлюди, а такие же как мы с вами, возможно глупее нас. Не всегда же будет так очевидно. Скажем будет функция создающая String и ее вызов в цикле. Вряд ли этот FindBug поможет. Он и не помог с Integer.toString. Есть расхожая цитата: "преждевременная оптимизация корень всех зол". Только обычно не обращают внимания на слово преждевременная. Является ли преждевременной оптимизация использования строк сразу же? Ведь известно, что именно строки чаще всего вылезают в профайлере как проблемные места, потребляющие память. И как потом оптимизировать их использование в запутанной иерархии классов, если это не сделано изначально? Авторы Idea, например, если судить по их ролику об оптимизации даже и не пытаются оптимизировать свой код, хотя строки у них на первом месте по пожираемым ресурсам. Пусть они дилетанты, но все же.. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 21:29 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
maytonпо поводу этого фрагмента кода ты мне другое скажи, у тебя чего шрифты такие в линухе страшные ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 21:37 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Беря во внимание внутреннее устройство StringBuilder я-бы сделал так. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Забавно но чисто случайно я переключил Jdk на десятку и заметил что StringBuilder уже не оперирует символами. Он может работать с байтовым представлением строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 21:41 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
chpashamaytonпо поводу этого фрагмента кода ты мне другое скажи, у тебя чего шрифты такие в линухе страшные ;) Ты тоже заметил? А я как раз недавно даже топик на эту тему поднимал. После перехода с Windows10 на Ubuntu-14 у меня долго была ломка в части работы с UI. Там по консоли да по серверной части - ОК. Привык ибо много лет работаю с серверными операционками. Ораклы там. Дж-Боссы и прочее. Но тут - десктоп. Я и выпал в осадок. Честно такого огромного количества визуальных косяков я давно не видел. Графический редактор Pinta крашится непрерывно уже пол-года. Никто не фиксит хотя я репорты слал уже 5 раз. Не могу вообще вспомнить чтобы MS-Paint подвисал или ронял систему в синий экран. Ну да бох с ним. Оффтоп ибо. Подниму отдельно "топик-ворчалку" в разделе Линуксов. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 21:45 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
chpashamaytonпо поводу этого фрагмента кода ты мне другое скажи, у тебя чего шрифты такие в линухе страшные ;) Наверное, ему лень снять флажок с "Show only Monospaced Fonts". ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 21:47 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
chpashamaytonпо поводу этого фрагмента кода ты мне другое скажи, у тебя чего шрифты такие в линухе страшные ;) Вот хорошая статья для настройки шрифтов, если убунта . ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 21:49 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Andy_OLAPchpashaпропущено... ты мне другое скажи, у тебя чего шрифты такие в линухе страшные ;) Вот хорошая статья для настройки шрифтов, если убунта . Thnx. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 21:52 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Andy_OLAPВот хорошая статья для настройки шрифтов мне не надо, у меня хорошие шрифты ;) Andy_OLAPНаверное, ему лень снять флажок с "Show only Monospaced Fonts" раз пошла такая пьянка с гаданиями, то вангую, что mayton идею не с той jdk запускает ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 21:52 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
StringBuilder уже не оперирует символами. Он может работать с байтовым представлением строк Подробнее, пожалуйста. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 21:54 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene Newа на Integer.toString даже не ругается а что с ним не так? просто можно записать лаконичней. от того, что ты вызовешь stringBuilder.append(int) или просто string + int ничего не изменится, int все равно нужно в String конвертировать ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 21:57 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewStringBuilder уже не оперирует символами. Он может работать с байтовым представлением строк Подробнее, пожалуйста. Начало этой темы было тут Алексей Шипилев - Катахезис String. Там он прошелся по секретам имплементации строк в т.ч хардкодным оптимизациям. Рассказал о том что от двухбайтных char[] отказываются в пользу более экономного внутреннего представления. Далее... надо качать последние Jdk и смотреть сорцы. Там действительно мать его байтовый массив. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 22:01 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewИм бы еще самим научится эти IDE грамотно писать. Критикуя предлагай альтернативу Eugene Newlleming, А что там читать, код написан криво уже не раз сказали в ветке об этом. По жизни недогоняющему Siemargl читать надо, причем до полного просветления - он решил, что компилятор все исправил и так можно писать. Ну не совсем это он имел ввиду, а то что это известный плохой паттерн использование конкатенации строк в цикле. Который можно увидеть и на Хабре и stackoverflow и в статьях частенько. Eugene NewЧтобы говорить на любой пример плохого поведения программы, что код плохой и программист дурак, даже не нужно обладать разумом. Это может и попугай. Сформулировать критерии заранее, что можно и что нельзя, гораздо сложнее. Единого мнения по правилам применения String я тут не вижу. (недогоняющих просьба не беспокоится). Говорить попугай может, правда не всегда угадывает правильно, а если бы угадывал всегда то программистов давно заменили бы попугаями. Правило поведения очень простое каждый выбирает для себя сам, я когда столкнулся выбрал использовать явно всегда StringBuilder и пне полагаться на компилятор. Тут трейдофф если код простой со stringbuilder ухудшается читаемость. Поведение компилятора очень разумное. Integer.toString это явная просьба создать новый объект, соотвественно что просили то получили в чем проблема? Единые правила известны если вам нужны объекты делайте их если не нужны то избегайте. Возможно синтаксис Java иногда явно не указывает будет создан объект или компилятор сам поправит, но иногда даже явность не всегда поможет, так там еще много накручено прям в Jvm кэши на Integer, String. Если неизвестно создаются или нет объекты то откройте исходники благо они доступны в Java (тут кстати IDE и пригодится ctrl click и уже прям там где надо, и неплохо регулярно этим пользоваться) Общие претензии видимо к тому что компилятор не разворачивает самостоятельно цикл и не выносит stringbuilder наружу из цикла. И правильно делает ибо не знает точно что все внутри цикла без побочных эффектов и соотвественно делает то что его попросили. Конешно можно было впилить в компилятор сразу правильно разворачить цикл и выносить stringbuilder наружу и это красиво выглядет на этом тривиальном примере. Но тут ктото пишет метод который помимо основной логики, еще и делает ну например устанавливает соединение к БД. В результате получим здоровски быстро сделанную строку и непонятный NullPointerException и непонятном месте из за того что компилятор соптимизировал конкатенацию и вырезал важную часть кода по инициализации соединения с БД. Есть целые трактаты советы как делать и как не делать и почему с примерами. Целая куча статей на ibm developer network например от брайна гоетца с объяснениями как поведет себя кусок кода в конкретном случае, можно полистать oracle secure coding standards. Ссылок накидать легко, но есть сильное подозрение что не заинтересует. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 23:06 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
lleming, Ну не совсем это он имел ввиду Как раз это. уже работает автоматическая оптимизация такого говнокода -> стрингбилдер. Не впервые тут от этого гражданина вижу понимание строго наоборот. Критикуя предлагай альтернативу Это не обязательно. Но все же пусть посмотрят, как сделаны старые взрослые IDE. И знания основ и здравый смысл бы им не помешал. Например, не лепить 30 отдельных файлов настроек в формате XML в запутанное дерево каталогов. Т. к. XML сам по себе уже иерархическая БД и все можно писать в один файл. Это позорище видно каждому сразу после установки этой суперсреды. Поведение компилятора очень разумное Тут дело не в компиляторе, а в языке и его библиотеке. Гуано-код Integer.toString (и его аналоги) это часть стандартной библиотеки. И оператор + для строк часть языка. Можно насчет этого подискутировать. Что хорошего вы видите в этих двух вещах, что оправдывало бы их существование? Должна быть четкое и краткое описание того, что считается гуано кодом при работе со String. Без воды. mayton, Алексей Шипилев - Катахезис String. Я попробую это почитать. Хотя название уже доставляет. Катехизис! Секта свидетелей Java, блин! Может он и правда принимает вещества какие-нибудь? Не могли бы вы в двух словах рассказать тут, что имеется в виду, это ведь наверняка можно описать именно в двух словах, чтобы не продираться через сектантскую проповедь "Пастора", который наверняка будет тратить две страницы на то, что можно описать в двух предложениях. И вообще после сборщика мусора, который мусор не собирает вообще, а просто роняет программу в произвольный момент, я от него жду чего угодно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 23:48 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Блин, он РЕАЛЬНО под НАРКОТОЙ это писал. Или он шизофренией страдает. https://shipilev.net/talks/jpoint-April2015-string-catechism.pdf "Stay Awhile And Listen" "Кишочки" "Кишочки: Катехизис" "Почему всё это так больно?" "как облегчить мои страдания?" "В ответ была тишина, и Инженер ушёл просветлённым" "Тишина была ему ответом, и профессионал ушёл просветлённым" "Регулярки: разорвать на куски" "Гуляем" И выводы: "String хорошо оптимизирован" Самое обидное, что про 10-ю версию я ничего не нашел, а ведь шизоидно-амфетаминовый бред прочитал. Ну по внешнему виду автора видно, что с головой что то не так. https://i.ytimg.com/vi/8F7uTlv5Y9E/maxresdefault.jpg ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 00:02 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Рассказал о том что от двухбайтных char[] отказываются в пользу более экономного внутреннего представления. Что автоматически приведет к дикому замедлению обработки строк. Впрочем, разве это его волнует, когда колеса под рукой?) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 00:15 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewНе впервые тут от этого гражданина вижу понимание строго наоборот. ну для тех кто был этим вопросов озабочен ранее вполне очевидно что именно он имел ввиду. Eugene NewЭто не обязательно. Но все же пусть посмотрят, как сделаны старые взрослые IDE. И знания основ и здравый смысл бы им не помешал. Например, не лепить 30 отдельных файлов настроек в формате XML в запутанное дерево каталогов. Т. к. XML сам по себе уже иерархическая БД и все можно писать в один файл. Это позорище видно каждому сразу после установки этой суперсреды. какое отношение файлы настроек имеют к качеству и удобству IDE, да никакого. Файлы настроек для IDE и используются только IDE. Как и где желают хранить настройки ide пусть решают разработчики ide, мне без разницы. Не верится что разбиение на разные файл настроек случайное решение. Вполне разумным решением хранить разные части настроек в разных файлах ибо легче тестировать независимые части чем все в куче. К тому же в xml dom очень небыстро сериализовать а если настроек много то уже неприятные задержки будут. есть такая штука как мавен т.к. шта проект ездит без проблем из eclipse, в idea и Netbeans и никаких проблем хоть в Notepad работай только Maven directory layout запомни и все. Eugene NewТут дело не в компиляторе, а в языке и его библиотеке. Гуано-код Integer.toString (и его аналоги) это часть стандартной библиотеки. И оператор + для строк часть языка. Можно насчет этого подискутировать. Что хорошего вы видите в этих двух вещах, что оправдывало бы их существование? Integer.toString есть документация для чего это, int в строку преобразовывать. Что такое int и почему они в Java тоже можно нагуглить. Вот если у System.out не был бы перегружен метод println а был бы только println(String line) то что тогда остался бы только варинт везде писать System.out.println(""+number); Не все библиотеки продуманы для все вариантов. Есть подозрение что если бы забыли в станд. библиотеку добавить Integer.toString и оставили только println(String value) то Вопрос "Как вывести на консоль integer value" был бы вторым после "Как выйти из vim" Первый вариант симпатичнее явно говорит что произойдет. String number = Integer.toString(22); String number = "" + 22; 2+"2" что должно быть, а что будет ? Integer.toString(2) + "2" а здесь ? Eugene NewДолжна быть четкое и краткое описание того, что считается гуано кодом при работе со String. Без воды. Которое уже неоднократно указали без воды не используй строки как промежуточное хранилище, а используй stringbuilder. Eugene NewИ вообще после сборщика мусора, который мусор не собирает вообще, а просто роняет программу в произвольный момент, я от него жду чего угодно. Не в произвольный а когда заканчивается память, а она не заканчивается если не расходуется. А если расходуется и по определенному паттерну то отсекаем часть и проставляем памяти больше чем в точке отсечения это же не рокет саенс. Это не единственный и не основной gc, а как вариант предложение, ибо в java все неспешно. Можно попробовать оценить, не подходит не использовать. Где такой используется уже указали где нужен хороший отклик и можно сервер реастартовать регулярно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 00:39 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
lleming, какое отношение файлы настроек имеют к качеству и удобству IDE Прямое. И вообще это индикатор крайне низкого уровня. Как только я это увидел - понял, дилетанты. Все дальнейшее подтверждает мое первое впечатление. Если даже такую элементарную вещь сделали максимально через задницу, остальное тем более. Файлы настроек для IDE и используются только IDE. А замусорили ими все. Какого они вообще пишут в чужие каталоги какие то файлы, даже не заботясь, что могут ими что то затереть? Не верится что разбиение на разные файл настроек случайное решение. Да уж, я тоже в случайность не верю. . К тому же в xml dom очень небыстро сериализовать Это следующий пункт - использование xml само по себе. То, что они делают xml а используют их как набор плоских файлов, показывает, что они вообще не понимают что делают и зачем. Хотели бы использовать xml-как единую иерархическую базу для того, чтобы хранить все в одном месте - это еще можно было бы понять. Создали бы кучу плоских файлов, которые легко читать поодиночке - ну хреново, но хотя бы понятно. А брать xml и делать кучу файлов, которыми замусоривать все - это максимально через задницу. И ведь речь то идет о ПРОСТЫХ вещах, но нет, из них сделали сами искусственно целую ПРОБЛЕМУ. Одно это уже говорит о том, какой у них ужасный бардак во внутренней архитектуре программы. Ну не понимают люди, что они вообще делают и зачем. Что только подтверждается дикими системными ресурсами, которые она жрет и ее низким быстродействием. Тут давали ролик на рассказ одного из авторов Идеи о попытках оптимизации. 2017 год. Сразу обращает внимание, что автор, хотя 10 лет работает над этим проектом, "открытия" начал совершать в 2017 году. Обнаружив, что главная проблема в строках, он даже не сделал никакой попытки оптимизировать архитектуру проекта с точки зрения использования строк. Только пытался тип строк подменить - что ему сделать так и не удалось. есть такая штука как мавен Не буду про мавен, я его не пробовал. Он хотя бы скачанные файлы сохраняет в нормальном виде, в котором их можно использовать. Что гораздо лучше мерзейшего gradle. Netbeans Из всех трех это мне понравилось больше других. Integer.toString есть документация для чего это, int в строку преобразовывать Есть StringBuilder.append (int) . Заметьте, сишная itoa не создает строку, а пишет в готовый буфер. 2+"2" что должно быть, а что будет ? Должна быть ошибка компиляции. Это если по уму. Не в произвольный а когда заканчивается память, а она не заканчивается если не расходуется Уже обсуждалось же. Нельзя предсказать момент окончания памяти, нельзя его обработать. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 01:21 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
lleming, Которое уже неоднократно указали без воды не используй строки как промежуточное хранилище, а используй stringbuilder. Это не решает всех проблем, т. к. даже в лучшем случае модификация строки ведет к созданию как минимум одной мусорной копии. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 01:24 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewРассказал о том что от двухбайтных char[] отказываются в пользу более экономного внутреннего представления. Что автоматически приведет к дикому замедлению обработки строк. Впрочем, разве это его волнует, когда колеса под рукой?) Давайте порассуждаем. Основной поинт который ставился во главу угла - это чрезмерное использование интернированных строк. Констант. Имен классов и пакетов. В кодировке UTF-16 они занимают много места хотя содержат в основном латиницу. При работе с конвертерами с UTF-8/Latin в UTF-16 мы понесем какие-то накладны расходы. Но вспомним что все это написано на intrinsic и перформанс будет примерно такой же как в С++. Кстати предлагаю обсудить положение с кодировками в С++. Вообще при оптимизации я-бы обсудил два вектора. 1) Собственно уменьшение памяти которую занимают структуры данных. Если уменьшим - значит освободим место под другие структуры, кеши, пулы объектов 2) Собственно оптимизация кода (мегафлопы процессора). В данном вопросе я считаю что оптимизация размера строк это скорее благо чем зло. Все кто делали memory dump обращали внимание что top memory consumers : это в первую очередь char[] - тоесть собственно внутренние структуры строк. Поэтому по поводу "дикого" замедления строк я-бы на вашем месте не спешил. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 08:31 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewБлин, он РЕАЛЬНО под НАРКОТОЙ это писал. Или он шизофренией страдает. По поводу персоны Шипилева. На самом деле он - человек от "системы". Кодил OpenJDK стало-быть что-то знает. И вообще если пройтись по всяким Jug/JPoint/Joker конференциям то подобных ему "рупоров" перформанса почти нет никого. Ну есть еще Роман Елизаров который тоже по части перформанса любит порассуждать. На безрыбье и такой Шипилев вполне себе рыба. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 08:35 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewЭто следующий пункт - использование xml само по себе. То, что они делают xml а используют их как набор плоских файлов, показывает, что они вообще не понимают что делают и зачем. Хотели бы использовать xml-как единую иерархическую базу для того, чтобы хранить все в одном месте - это еще можно было бы понять. Создали бы кучу плоских файлов, которые легко читать поодиночке - ну хреново, но хотя бы понятно. А брать xml и делать кучу файлов, которыми замусоривать все - это максимально через задницу. И ведь речь то идет о ПРОСТЫХ вещах, но нет, из них сделали сами искусственно целую ПРОБЛЕМУ. Мне вобщем тоже не нравится сам xml как основа для конфигураций. Я считаю его соврешенно избыточным и не-human readable. По сабжу. Два пункта. Вы скорее всего не работали с maven. Maven предполагает много-модульный проект каждая часть которого имеет dependencies от других модулей. Это дает возможность в разработке нам не собирать крупный проект (сборка которого может длится много минут) а задать сборку одного модуля. Беря во внимание практики использования файловой системы последних лет мы делаем раздельные конфигуарции для каждого модуля. Связи - семантические. Тоесть связь - подразумевается. Это даёт определенную гибкость о управлении модулем. По поводу - "почему" и прочее. Maven как и многие open-source проекты создавался спонтанно группой энтузиастов. И они не запилили каких-то фич просто потому что не было рядом с ними такого инициативного как вы. Поэтому цена вашего рац-предложения - это войти самому в группу разработки. Предложить идею или улучшение. И своими силами, своим умением и уберждениями "продавить" эту идею и запилить ее в мастер репозитарий. Что вы все еще сидите? Почему я не вижу ваш пул-реквест? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 08:50 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewПрямое. И вообще это индикатор крайне низкого уровня. Как только я это увидел - понял, дилетанты. Все дальнейшее подтверждает мое первое впечатление. Если даже такую элементарную вещь сделали максимально через задницу, остальное тем более. скажет так пишут они в "невидимые" под линукс .idea, .settings, .classpath и соотсвественно обычно их тут же добавляют в gitignore, и проект отстается чистым мавеном. А про мавен mayton уже написал подробнее. А замусорили ими все. Какого они вообще пишут в чужие каталоги какие то файлы, даже не заботясь, что могут ими что то затереть? не в чужие в свои конкретные Eugene New Не верится что разбиение на разные файл настроек случайное решение. Да уж, я тоже в случайность не верю. Вряд ли чтобы испортить Вам настроение, а больше с точки зрения надержности, скорости, легкости расширения. Многие сразу в проект mvnw аля gradle добавляеют и он тоже папочку создает и ничего. Eugene New. llemingК тому же в xml dom очень небыстро сериализовать Это следующий пункт - использование xml само по себе. То, что они делают xml а используют их как набор плоских файлов, показывает, что они вообще не понимают что делают и зачем. Хотели бы использовать xml-как единую иерархическую базу для того, чтобы хранить все в одном месте - это еще можно было бы понять. Создали бы кучу плоских файлов, которые легко читать поодиночке - ну хреново, но хотя бы понятно. А брать xml и делать кучу файлов, которыми замусоривать все - это максимально через задницу. И ведь речь то идет о ПРОСТЫХ вещах, но нет, из них сделали сами искусственно целую ПРОБЛЕМУ. Одно это уже говорит о том, какой у них ужасный бардак во внутренней архитектуре программы. Ну не понимают люди, что они вообще делают и зачем. Что только подтверждается дикими системными ресурсами, которые она жрет и ее низким быстродействием. Тут давали ролик на рассказ одного из авторов Идеи о попытках оптимизации. 2017 год. Сразу обращает внимание, что автор, хотя 10 лет работает над этим проектом, "открытия" начал совершать в 2017 году. Обнаружив, что главная проблема в строках, он даже не сделал никакой попытки оптимизировать архитектуру проекта с точки зрения использования строк. Только пытался тип строк подменить - что ему сделать так и не удалось. Видимо там нечего оптимизировать поэтому и не делал попыток. Integer.toString есть документация для чего это, int в строку преобразовывать Eugene newЕсть StringBuilder.append (int) . Заметьте, сишная itoa не создает строку, а пишет в готовый буфер. Готовый буфер откуда появляется? Если в цикле создавать новый буфер и загонять туда число чем от приведенного примера отличается ? А в java сделайте stringbuilder, у него все равно буффер внутри и заметьте он не создает строку а пишет в буффер builder.append(34) Уже обсуждалось же. Нельзя предсказать момент окончания памяти, нельзя его обработать. Да обсуждалось, можно предсказать это простая логика, если чтото не тратить то это не закончится. Как вариант для особо типа приложений jvm рестартовать до того как закончится память. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 10:12 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewРассказал о том что от двухбайтных char[] отказываются в пользу более экономного внутреннего представления. Что автоматически приведет к дикому замедлению обработки строк. Впрочем, разве это его волнует, когда колеса под рукой?) Firefox такое провернули несколько релизов назад. Огласили результат что наоборот стало сильно быстрее и меньше тратить памяти. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 10:14 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Раз идентификаторы содержат только латинские буквы и цифры с подчеркиванием (это ведь так для Java?), напрашивается их хранить в однобайтовых строках. Т. к. это стандарт языка, вряд ли потребуется это менять. Многобайтовые строки считаю злом - либо увеличение размера в два раза, либо невозможность простого доступа к символу в строке, что усложняет все алгоритмы обработки строк. Фактически, чтобы использовать любой старый наработанный алгоритм обработки строки, надо сначала преобразовать ее в многобайтовую кодировку с фиксированной длиной символа. А потом преобразовывать ее обратно, если мы хотим уменьшить занимаемое место. Но для русских букв оно все равно не уменьшится. Тогда как русские буквы прекрасно хранятся в одном байте. Нас заставляют платить за ущербность китайской системы письма, хотя мы ее вообще не используем. Долго и упорно всем навязывали эти многобайтовые кодировки. Тех, кто латиницу использует, возможно это мало затрагивает, может даже многие из них и не делают расчет на многобайтовость UTF8. Англосаксонские шовинисты. Насчет скорости встроенных конвертеров строк - все равно же если мы будем обрабатывать каждую строку перед использованием ее в Java, это займет заметное время, т. к. обрабатывается она полностью и два раза - туда-обратно. А строки длинные бывают. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 10:37 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
lleming, больше с точки зрения надержности, скорости, легкости расширения. Либо дремучий дилетантизм, либо желание все как можно больше запутать. Т. к. эффект - ненадежность, медленность, сложность. Видимо там нечего оптимизировать поэтому и не делал попыток. Вот это вы пошутили. Судя по тому, какие открытия они начали совершать в 2017 году, даже элементарные вещи по перетряхиванию их архитектуры могут принести ощутимый эффект. Но они до этого еще не дошли. Видно, им надо еще 10 лет. Если в цикле создавать новый буфер и загонять туда число чем от приведенного примера отличается ? Тем, что он создается явно и это хотя бы видно в коде. А в Java создается иллюзия удобства и прозрачности, которые Java на самом деле не обеспечивает. можно предсказать это простая логика, если чтото не тратить то это не закончится. Нужно это разжевывать? Речь идет о Java, в которой вообще нет статических переменных, в которой на каждый чих создаются объекты в куче. Вы не можете обеспечить того, что память не будет тратится. Вы можете только махнуть рукой - и так мол сойдет. Если я не прав, объясните, как вы будете гарантировать отсутствие выделений объектов в куче. Если хотите обеспечить то, что не будет тратится - запрещайте динамическую память вообще, делайте все на статических переменных (что в Яве вообще невозможно) и вручную контролируйте все случаи исчерпания массивов и т. п. Как вариант для особо типа приложений jvm рестартовать до того как закончится память. А лучше вообще не запускать. Тогда точно не закончится. Хотя ведь всегда можно сказать, что пользователь идиот и нищеброд, который не захотел лишних 20 гигов оперативки ставить - и поэтому программа падает не раз в день, а раз в час. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 10:51 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Огласили результат что наоборот стало сильно быстрее и меньше тратить памяти. А вы так и верите в их честность? Огласить можно что угодно. Особенно если оценивает свою же работу и употребляет вещества для изменения сознания. Надо хотя бы полные условия тестирования и методику тестов оглашать. Чтобы это было проверяемым со стороны. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 10:56 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewОгласили результат что наоборот стало сильно быстрее и меньше тратить памяти. А вы так и верите в их честность? Огласить можно что угодно. Особенно если оценивает свою же работу и употребляет вещества для изменения сознания. Надо хотя бы полные условия тестирования и методику тестов оглашать. Чтобы это было провряемым со стороны. Ну так в чем проблема посмотри проверь опровергни. Под огласили имеется ввиду не просто ктото сказал на ютубе а сделал тесты и огласил результаты (не сложно было догадаться). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 12:09 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene Newlleming, Видимо там нечего оптимизировать поэтому и не делал попыток. Вот это вы пошутили. Судя по тому, какие открытия они начали совершать в 2017 году, даже элементарные вещи по перетряхиванию их архитектуры могут принести ощутимый эффект. Но они до этого еще не дошли. Видно, им надо еще 10 лет. Вы так яростно критикуете разработчиков новомодных IDE . Судя по Вашим постам у Вас есть достаточно опыта в разработке и оптимищации сложных систем. Чтобы проникнуться вашими идеями не могли бы Вы привести примеры какие проекты Вы реализовывали. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 12:42 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Ну преобразование из одной кодовой системы в другую - требуется только в момент ввода-вывода. Ну и преобразование при вводе-выводе, сейчас все равно требуется. В процессе работы, думаю hash, equils самые частые методы. Сортировка - сейчас и так досаточно сложная задача (т.к. должна поддерживать локализацию), тут уже ничего не усложнится. В общем, насколько мешанина UTF-8 / UTF-16 будет эффективной, насколько не эффективной - могут сказать только тесты. На мой взгляд, для 95 % реальных приложений, UTF-8 более эффективно. Уменьшаем занимаемую память, данные компактнее, кэши и шины процессора работают эффективнее. Все упирается, насколько это криво реализуют. Сейчас encode / decode между кодовыми страницами - безумно криво сделано. Если хаки и оптимизации на уровне JVM не срабатывают - то и безумно тормознуто. Все тормоза при encode, decode строк исключительно из-за закрытости класса String, CharBuffer и бесмысленных копирований/переалоцирования памяти. Смотрел Apache NIO library, кусок кода отдачи результата клиенту - плакать можно, одно сплошное копирование буфферов туда-обратно, тупой encode через стандартные тормозные вызовы. (вроде CharBuffer и non-heap memory задумывали, что бы избавиться от лишних копирований, на практике - все прямо наоборот, поскольку работа по символьно через CharBuffer безумно тормозная /проверка индексов на выход за пределы массива, отсутвие JIT оптимизаций/, то все равно сначала копируют в heap, потом обрабатывают, потом обратно копируют) IMHO & AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 12:44 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewЛибо дремучий дилетантизм, либо желание все как можно больше запутать. Т. к. эффект - ненадежность, медленность, сложность. Можно аргументы поподробнее а не просто слова и эмоции, тогда можно говорить дальше. Пока выглядет как "я xml не видел не работал но осуждаю". Eugene NewВот это вы пошутили. Судя по тому, какие открытия они начали совершать в 2017 году, даже элементарные вещи по перетряхиванию их архитектуры могут принести ощутимый эффект. Но они до этого еще не дошли. Видно, им надо еще 10 лет. Со строками mayton уже сообщил что итоге все скатывается к строкам ибо они больщая часть jvm так что даже разработчки idea ничего нового не придумали. Вот eclipse сильно медленнее. Если это элементарно подскажите им что поменять чтобы было можно работать, а то только идея пока. Eugene NewТем, что он создается явно и это хотя бы видно в коде. А в Java создается иллюзия удобства и прозрачности, которые Java на самом деле не обеспечивает. По сути нет отличий нет что в C создаем буффер внутри цикла что на java создаем буффер внутри метода. В java тоже явно, я даже описал как посмотреть, можно было удосужится и попробовать и потом говорить об илюзиях и удобстве. Eugene NewНужно это разжевывать? Речь идет о Java, в которой вообще нет статических переменных, в которой на каждый чих создаются объекты в куче. Вы не можете обеспечить того, что память не будет тратится. Вы можете только махнуть рукой - и так мол сойдет. Если я не прав, объясните, как вы будете гарантировать отсутствие выделений объектов в куче. А зачем гарантировать отсутствие выделений объектов на куче, нужно гарантировать (что у многих вполне себе неплохо получается). что за жизненный цикл приложения понадобится куча не более определенного размера. Чтото так сложно то. Зачем такие приложения нужны тоже приводили примеры там где требуется минимальный отклик, либо жизненный цикл запустил сделал заботу завершил прилоежние. Внезапно есть консольные приложения на java и некоторой части из них лучше вообще без выделить достаточно для работы дабы побыстрее, gc для таких только зря потерянное время и такты. Eugene NewА лучше вообще не запускать. Тогда точно не закончится. бинго. Eugene NewХотя ведь всегда можно сказать, что пользователь идиот и нищеброд, который не захотел лишних 20 гигов оперативки ставить - и поэтому программа падает не раз в день, а раз в час. Почему именно 20Гб а не 200Гб или не 100Мб? PS у самого 16Гб, тут кое у кого на форуме проскальзывало что 32 стоит на ноуте. llemingЗачем такие приложения нужны тоже приводили примеры там где требуется минимальный отклик. у этих финансистов 32 это не очем. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 12:48 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewРечь идет о Java, в которой вообще нет статических переменных Есть статические поля классов... Вы даже букварь не прочитали? Eugene Newв которой на каждый чих создаются объекты в куче. Вы не можете обеспечить того, что память не будет тратится. Есть способы уменьшить или исключить выделение памяти, применяются они как раз в приложениях, для которых Epsion GC будет приемлемым (ака Трейдерский софт например) Eugene NewЕсли я не прав, объясните, как вы будете гарантировать отсутствие выделений объектов в куче. Пулы объектов, использование Off-Heap memory, etc. Eugene NewА лучше вообще не запускать. Тогда точно не закончится. Хотя ведь всегда можно сказать, что пользователь идиот и нищеброд, который не захотел лишних 20 гигов оперативки ставить - и поэтому программа падает не раз в день, а раз в час. IMHO Не так и много случаев, когда нам нужно полностью избавиться от пауз для сборки мусора, и при этом иметь минимальный оверхед. В среднестастистических приложениях важно только обеспечить приемлемый уровень этих показателей. В таком случае само по себе выделение памяти проблемой не является, сборщик мусора скорее начнет тормозить из-за обилия "живых" (достижимых из корней ссылок) объектов, чем от создания объектов. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 12:55 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewОгласили результат что наоборот стало сильно быстрее и меньше тратить памяти. А вы так и верите в их честность? Огласить можно что угодно. Особенно если оценивает свою же работу и употребляет вещества для изменения сознания. Надо хотя бы полные условия тестирования и методику тестов оглашать. Чтобы это было проверяемым со стороны. Обычно крупные проекты содержат как элемент CI цикл тестирования перформанса. Перед релизом его прогоняют и смотрят что все измерения попали в зелёный сектор. И никто здесь ничего оглашать не будет. Тоже мне...теорема Ферма. Просто релиз прошел успешно и все. Итеративная разработка. Увидели что хорошо и все. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 13:06 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
maytonОбычно крупные проекты содержат как элемент CI цикл тестирования перформанса. Честно говоря, ни разу нормального нагрузочного тестирования ни где не видел. На одном проекте, был "перформанс-тест", но он скорее попадал не под категорию нагрузочное тестирование, а под тестирование обратной совместимости. Т.е. посмотреть, что при внисении изменений мы случайно вообще производительность не положили. Очень сложно бизнес метрики (кол-во юзеров, данных) заранее привести к синтетическому тесту. На практике, все вполне удовлетворяются грубым расчетом: раз при 1 G памяти мы спокойно обслуживаем 10 клиентов, то для 100 клиентов будет нужно 10 G памяти. Плюс минус лапоть, расчеты выполняют с запасом. IMHO & AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 13:21 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevmaytonОбычно крупные проекты содержат как элемент CI цикл тестирования перформанса. Честно говоря, ни разу нормального нагрузочного тестирования ни где не видел. На одном проекте, был "перформанс-тест", но он скорее попадал не под категорию нагрузочное тестирование, а под тестирование обратной совместимости. Т.е. посмотреть, что при внисении изменений мы случайно вообще производительность не положили. У нас тоже нечто подобное. Но все бизнес кейсы покрывает а только самые high frequency. Например исполнение биржевого ордера. И каждый релиз у нас есть метрики. Если просядут - сядем анализировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 13:27 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
И никто здесь ничего оглашать не будет Еще бы. Им куда удобнее изображать из себя гуру, говорить что все хорошо. "И так сожрут". Увидели что хорошо и все. Им то что плохо, зарплата идет, деятельность имитируется. Опять же колес заглотнуть - так вообще все хорошо становится. Раз уж даже за написание публичной документации под ними никто пинком под зад из компании не выгонит. После этого работника из Оракула я вижу, что возможно вообще все. даже разработчки idea ничего нового не придумали. Даже! Ну вы и сказали. Если разработчики Идеи действительно лучшие, то тем хуже для всего сообщества Явы. Есть статические поля классов.. Память под них выделяется где? нужно гарантировать (что у многих вполне себе неплохо получается). что за жизненный цикл приложения понадобится куча не более определенного размера. Огласите, пожалуйста, методику обеспечения таких гарантий. С формальным доказательством ее верности. Почему именно 20Гб а не 200Гб или не 100Мб? Как пример. Если у вас 20 и тормозит, всегда можно сказать, что надо 40. Судя по Вашим постам у Вас есть достаточно опыта в разработке и оптимизации сложных систем Для критики не обязательно делать самому. Достаточно сравнения с другими IDE. Например с теми, которые быстро работали под Pentium-1 и делали больше, чем современные IDE под Яву. А можно с тем, что имело многооконный интефейс, визуальный дебагер, справочную систему и занимало вместе с компилятором 150 килобайт, сравнить. В андроидной студии нет нормального визуального редактора интерфейса. Скажите, если он где то под другие платформы под Яву есть. Если нет, выходит что уровня 1995 года эти IDE еще не достигли. Текстовый редактор вряд ли является такой уж сложной системой, если, конечно, там каждый чих не усложняется намеренно. Я думаю, что тут еще дело в том, что линуксоиды мало вообще знакомы с графическим интерфейсом и визуальными компонентами. Поэтому им не с чем сравнивать. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 13:41 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene New, Eugene NewПамять под них выделяется где? Если переменная примитивного типа, то прямо в объекте класса, который живет в metaspace. Если не притивного, то в heap. В чем проблема? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 13:48 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Как бы это поточнее выразится.. Методика "сошло и ладно, отвалится - переделаем" может подходить для некоторых заказных программ. Распространять ее на серийное ПО и тем более на системное или средства создания ПО как то не очень правильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 13:54 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Lelouch, вот видите - в куче. Проблема в отсутствии критериев и доказательств того, что программа проработает определенное время. Раз уж вы их до сих пор не назвали, делаю вывод, что их не существует и что делают все наобум по принципу - "прокатило и ладно, а если что то будет - либо свалим на пользователя, либо в крайнем случае переделаем". ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 13:57 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewКак бы это поточнее выразится.. Методика "сошло и ладно, отвалится - переделаем" может подходить для некоторых заказных программ. Распространять ее на серийное ПО и тем более на системное или средства создания ПО как то не очень правильно. 1) Чем серийное ПО отличается от заказного, кроме количества покупателей? Может вы имели в виду прикладное по? 2) java явно не популярна для разработки системного ПО 3) а что не так со средствами создания ПО? чем они отличаются от прочего прикладного софта? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 13:59 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewLelouch, вот видите - в куче. Проблема в отсутствии критериев и доказательств того, что программа проработает определенное время. Раз уж вы их до сих пор не назвали, делаю вывод, что их не существует и что делают все наобум по принципу - "прокатило и ладно, а если что то будет - либо свалим на пользователя, либо в крайнем случае переделаем". А для какого языка они есть? Приведите пример, пожалуйста. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 14:00 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene New, и да, в чем проблема выделения памяти в куче? Это ж не какая-то особенность java. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 14:01 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewРаз идентификаторы содержат только латинские буквы и цифры с подчеркиванием (это ведь так для Java?)"Я прикрепил" ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 14:08 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
lleming, Можно аргументы поподробнее а не просто слова и эмоции, тогда можно говорить дальше. Пока выглядет как "я xml не видел не работал но осуждаю". Я выше уже говорил об этом. Что касается XML самого по себе - то это иерархическая БД в текстовом виде, в которой доступ к любым данным будет происходит крайне медленно, т. к. для него нужен синтаксический разбор. Причем из-за синтаксиса закрытия тегов в XML полезной информации там обычно процентов 50 или меньше, остальное мусор. Синтаксический разбор - работа с текстом - значит задействуются строки. В Ява любое использование строк чревато утечками памяти (будем уже их так называть). Авторы ИДЕИ вообще анализировали ли во что им обходится использование xml, да еще такой кучи файлов? Судя по всему нет. Пытались ли они хоть как то оптимизировать их или там каждый раз, чтобы получить какое-то одно значение параметра настройки, дергается синтаксический разбор по новой? Судя по всему, так и делается. Альтернатива - плоские файлы. Пускай даже в текстовом виде с разделителями, с не с записями фиксированной длины, которые неудобно редактировать вручную. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 14:09 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewВ Ява любое использование строк чревато утечками памяти (будем уже их так называть). Нет не будем. В Java под утечками памяти понимается ситуация, при которой сборщик мусора считает объект "живым", а на самом деле он уже не нужен. Происходит исключительно из-за рукожопости программиста. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 14:13 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Lelouch, и да, в чем проблема выделения памяти в куче? в исчерпании свободного места и падении программы в любой момент, если вы эту память совсем не освобождаете. А для какого языка они есть? Ни для какого нет. Поэтому нельзя делать программы, рассчитанные на динамическое выделение памяти без ее освобождения и падение программы в результате этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 14:14 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, Ему не нужно в школу, пусть и дальше пилит приложения на новой android studio и страдает. Кроме того, Вы таки даже не представляете, сколько еще опытов мы запланировали провести на этом участнике форума. Надеюсь, модераторы никогда его не забанят, это исключительно кошерный экземпляр носителя современного мышления. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 14:17 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewLelouch, и да, в чем проблема выделения памяти в куче? в исчерпании свободного места и падении программы в любой момент, если вы эту память совсем не освобождаете. А для какого языка они есть? Ни для какого нет. Поэтому нельзя делать программы, рассчитанные на динамическое выделение памяти без ее освобождения и падение программы в результате этого. 1) Приложения, которые в java совсем не освобождают память - огромная редкость. И люди, которые их пишут, делают это осознано и с применением техник, которые уменьшают или исключают выделение памяти. 2) FYI Если что , есть целый язык, сделаный с философией Let it crash, называется erlang . ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 14:19 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene Newlleming, Можно аргументы поподробнее а не просто слова и эмоции, тогда можно говорить дальше. Пока выглядет как "я xml не видел не работал но осуждаю". Я выше уже говорил об этом. Что касается XML самого по себе - то это иерархическая БД в текстовом виде, в которой доступ к любым данным будет происходит крайне медленно, т. к. для него нужен синтаксический разбор. Причем из-за синтаксиса закрытия тегов в XML полезной информации там обычно процентов 50 или меньше, остальное мусор. Синтаксический разбор - работа с текстом - значит задействуются строки. В Ява любое использование строк чревато утечками памяти (будем уже их так называть). Авторы ИДЕИ вообще анализировали ли во что им обходится использование xml, да еще такой кучи файлов? Судя по всему нет. Пытались ли они хоть как то оптимизировать их или там каждый раз, чтобы получить какое-то одно значение параметра настройки, дергается синтаксический разбор по новой? Судя по всему, так и делается. Альтернатива - плоские файлы. Пускай даже в текстовом виде с разделителями, с не с записями фиксированной длины, которые неудобно редактировать вручную. Тут все легко разобрать по пунктам. Везде есть свой трейд офф. Избыточность xml да известный недостаток. Из за нее у xml жирный плюс самодокументированость, поэтому навскидку там данных процентов 50 или меньше, еще 30-40% это информация о структуре данных. В случае не xml вы это описание во внешнем файле прячете. Если описания нет то файл бессмыслица в отличие от xml. В Ява любое использование строк чревато утечками памяти неверная фраза вот правильная любая работа с паматью внезависимости от языка программирония или IDE чревата утечками памяти. Авторы idea думаю они знакомы с концепцией DOM, а вы судя по всему нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 14:22 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, "Я прикрепил" Я вашу Яву не знаю в подробностях и не скрываю это. Раз у них можно идентификаторы на других языках - значит они идиоты. При нулевой пользе создали себе этим массу проблем. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 14:27 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
давно так хорошо не было, одна проблема - работать некогда ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 14:28 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewЯ вашу Яву не знаю Но критикуете. Это изумительно. Коллега, какими еще откровениями Вы нас порадуете? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 14:30 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
lleming, у xml жирный плюс самодокументированость Никакого плюса в самодокументированости повторение названия тега при его закрытии не дает. В случае не xml вы это описание во внешнем файле прячете В реляционных БД все данные о структуре БД хранятся в таких же таблицах БД. Следовательно это можно делать и для плоских файлов. В Java под утечками памяти понимается ситуация То есть если назвать проблему по другому, она пропадет. Нет, не пропадет. Утечки памяти это утечки памяти. Да, в строгом виде это не утечка, т. к. она когда нибудь будет освобождена. Но на деле хранение ненужных временных данных долгое время мало чем отличается от утечек памяти. любая работа с паматью внезависимости от языка программирония или IDE чревата утечками памяти. Нет, неверно. Не в любом языке. И не любая работа. Хотите обобщить - обобщайте на Яву, не более. В случае строк в Яве мы просто знаем, что "утечки" обязательно будут, как ни крутись. Или я не прав? Авторы idea думаю они знакомы с концепцией DOM, а вы судя по всему нет. К сожалению они незнакомы с концепцией здравого смысла и в голове у них каша из магических названий технологий. Зачем вы DOM тут вворачиваете? Зачем вам DOM, сделанный для разметки документов в браузере, использовать для хранения простейших настроек? Ах, дерево узлов это суперконцепция со страшным именем, отдельное слово в программировании. Вам самому не смешно? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 14:43 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene Newони незнакомы с концепцией здравого смысла и в голове у них каша из магических названий технологий Вы лечащий психиатр у авторов Idea, поэтому знаете точно, что у них в голове? Могу написать для Вас их электронные ящики, напишите им письмо, спросите, знакомы ли они с концепцией здравого смысла, и чем они руководствовались, когда в своей Idea все делали Вам назло, специально не так, как Вы считаете оптимальным. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 14:48 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene New, Но критикуете. Это изумительно. Что вижу критикую с позиции универсальных концепций и сравнивая с другими, что не знаю - спрашиваю. И что не так? Лучше сидеть, бояться окриков и читать "катехизис", написанный обдолбанным "гуру", веря каждому написанному слову? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 14:48 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Инженер прежде всего знает, что любой продукт инженерной деятельности создается в условиях ограничений: технических, экономических и социальных. Есть понятие _достаточных_ характеристик, это применимо не только к разработке, у микросхемы в твоем плеере и аналогичные по функционалу на орбите сильно отличаются своими ТТХ и количеством денег и времени, потраченных на их R&D. В 1995 можно было пилить нетленки годами, оттачивая мастерство в ручном управлении памятью. Сегодня time-to-market может исчисляться неделями. Количество создаваемого софта и программистов выросло по экспоненте. Не существует в мире столько людей, способных понять как работает указатель и выдавать на unmanaged языках код предсказуемого качества, сколько сейчас нужно рынку. С другой стороны задачи решаемые современным софтом сложнее, элементарно даже тем, что больше движущихся частей, сложность домена часто сложнее. Так лучше направить энергию туда. А что String не оптимальный? Да плюнуть и растереть, GC дает _достаточные_ характеристики. Не способен понять и принять как устроен современный мир? Ну, ты не инженер: гик, фрик, пусть и хороший спец, но способный приносить пользу только под руководством грамотного менеджера, если тот захочет возится. Ну не нравится тебе, есть много областей, где твой навык будет востребован, на Андроиде свет клином не сошелся. Но нет, нужно в пяти топиках биться, как баран (оценочное суждение в смысле упертости и недальновидности) в одно и то же место. Хочешь, запускай свой дельфи 1995 года или на что ты там намекал и пиши. Вон, недавно, на твиче какой то дядя писал чат бота на TurboC 1987 года и ни разу не обламывался. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 14:48 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewИ что не так? Лучше сидеть, бояться окриков и читать "катехизис" Так у Вас 3 варианта. 1. Вопить на форуме, но на ситуацию это не повлияет никак. 2. Стиснув зубы, пилить под android на android studio, который есть перелицованный idea. 3. Устроить на работу в JetBrains, стать там главным по разработке и выкатить для всех простых смертных такую IDE, что всем IDE IDE. И что Вы выберете? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 14:51 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewИ никто здесь ничего оглашать не будет Судя по Вашим постам у Вас есть достаточно опыта в разработке и оптимизации сложных систем Для критики не обязательно делать самому. Достаточно сравнения с другими IDE. Например с теми, которые быстро работали под Pentium-1 и делали больше, чем современные IDE под Яву. А можно с тем, что имело многооконный интефейс, визуальный дебагер, справочную систему и занимало вместе с компилятором 150 килобайт, сравнить. Ну критиковать не мешки ворочать . Рот закрыл - рабочее место убрал. Исходя из вашей фразы Вы таки ничего стоящего не разрабатывали а сепциализируетесь исключительно на критике. Ну еще настроение на форуме людям поднимаете. Если Вам всетаки не стыдно признаться в ваших разработках - поделитесь с дургими . ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 14:52 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
LelouchEugene NewВ Ява любое использование строк чревато утечками памяти (будем уже их так называть). Нет не будем. В Java под утечками памяти понимается ситуация, при которой сборщик мусора считает объект "живым", а на самом деле он уже не нужен..... В Java скорее ситуация не memory leak, а resource leak. Забыли закрыть файл или коннекшен к БД - открытые файлы и конекшены копятся. Чистый memory leak - достаточно редкий случай. Ну и да, разумеется, со строками это никак не связано Note: данную тему читаю исключительно выборочно. Т.к. на все осмысленные вопросы Eugene New, вроде уже осмысленно ответили. Сейчас дискуссия вообще какая-то не информативная. Просто флуд и "как не повезло Java" IMHO & AFAIK Eugene Newв исчерпании свободного места и падении программы в любой момент, если вы эту память совсем не освобождаете. Евгений, какую-то полную ерунду сказали. Java как раз язык, _свободный_ от этой проблемы! Т.к. освобождением памяти занимается сам язык / среда выполнения / сборщик мусора. Многими авторами книг это и преподносится как одно из главных достоинств Java. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 14:53 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Назвать xml - иерархической базой данных. IMHO очень круто Просто структурированный текстовый файл. С относительно понятной разметкой (imho & afaik стыбренной у html). Благодаря этому и получил распространение, т.к. принципы разметки всем были понятны и вопросов не возникало. Вопросы перформанса / эффективно никогда никто перед собой при разработки XML и HTML и не ставил. Оно так само, исторически получилось: Был SGML, подпилили у табуретки ножку, доработали напильником - поличился HTML, подпилили ножку. доработали напильником - получился XML, подпилили ножку, доработали напильником, посыпали сверху блестками в виде CSS - современный HTML, подпили ножку, доработали напильником.... я его слепила, из того, что было а потом. что было, то и полюбило ( C ) попса ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 15:01 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Andy_OLAP, Вы лечащий психиатр у авторов Idea, поэтому знаете точно, что у них в голове? Вы правы, тут я зря перешел границу в диалоге с таким же "телепатом", говорящим за них. Прошу прощения. Могу написать для Вас их электронные ящики, напишите им письмо Спасибо, но не похоже, чтобы они стали обращать внимание на подобные письма. В 1995 можно было пилить нетленки годами IDE Идея делают уже 10 лет. адачи решаемые современным софтом сложнее Спорный вопрос, когда речь идет об IDE. Ничего в задачах IDE не менялось уже давным-давно. Текстовый редактор, подсветка синтаксиса, компиляция, отладка. Количество создаваемого софта и программистов выросло по экспоненте Ты измерял? Знаешь сколько разного софта создавалось раньше? Изучи вопрос, будешь удивлен. Вы думаете, что взрывной рост развития вычислительной техники продолжается. А он уже остановился. По крайней мере на уровне вашего ее понимания. И бума на программистов давно уже нет. е способен понять и принять как устроен современный мир? О пошли заверения от все понявших в жизни на 200% молодых людей :-) Боюсь, что у тебя есть определенные иллюзии насчет его устройства.. ты не инженер: Инженер, у меня диплом есть) И значок с молоточками) А у тебя? только под руководством грамотного менеджера Давай договоримся, что ты не будешь ничего рассказывать об инженерах?) Ты напрасно пытаешься взять глоткой и криком, со мной это не работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 15:08 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Andy_OLAP, Так у Вас 3 варианта. 1. Вопить на форуме, но на ситуацию это не повлияет никак. Вариантов больше и я не воплю, спокойно обсуждаю. Кстати, новая задача, решаемая IDE сейчас - это лишить программиста контроля над средой разработки и владения исходным кодом. Вижу, что ее хотят решить с помощью gradle. Правда программистам это все совсем невыгодно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 15:12 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewМогу написать для Вас их электронные ящики, напишите им письмо Спасибо, но не похоже, чтобы они стали обращать внимание на подобные письма. Давайте так. Мы скооперируемся всем форумом, напишем Вам рекомендательные письма, укажем, что Вы не знаете java, но знаете, что туда все стащили из оберона, исказив по дороге, и что Вы точно знаете, что и как нужно переделать. Поскольку видите вооруженным зорким глазом саму суть проблемы. И устроим совместными усилиями Вас на работу в JetBrains. Вам такой вариант подходит? Сможете все переделать, когда станете там главным человеком - ну а с Вашим то энтузиазмом это будет достаточно быстро. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 15:14 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene New Вижу, что ее хотят решить с помощью gradle. Правда программистам это все совсем невыгодно. Вот именно! Как же все сразу до этого не додумались. Вам срочно нужно в JetBrains, отломаете им в IDEA работу с gradle (а она и так не ахти), сделаете шикарную работу с maven и ant, затем поедете в США и то же самое проделаете над Eclipse (ну а NetBeanse сам подтянется к новым стандартам). Ну что, коллеги, поможете уговорить ребят из JetBrains взять на работу инженера с дипломом и молоточками? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 15:16 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
[quot Andy_OLAP]Eugene New Ну что, коллеги, поможете уговорить ребят из JetBrains взять на работу инженера с дипломом и молоточками? Вы серьезно . И оставить нас на форуме без светоча истинных знаний . Я категорически против. Пусть в JetBrains сами такого ищут . А то они привыкли на все готовенькое. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 15:24 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewТекстовый редактор, подсветка синтаксиса, компиляция, отладка рефакторинг, vcs, анализ кода, quick fixes, тестирование, декомпиляция, поддержка сотни framework-ов? извини за банальность, но ты сначала попробуй устриц, а потом говори, что не вкусно. для того чтобы оценить инструмент, его нужно изучить и им нужно попользоваться, а не делать обличительные выводы на основании xml в папке проекта. кстати можно тезисно, без голословных bla-bla-bla чем gradle принципиально отличается от maven? вот в корне и радикально? по пунктам. пожалуйста ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 15:27 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene Newзадачи решаемые современным софтом сложнее Спорный вопрос, когда речь идет об IDE. Ничего в задачах IDE не менялось уже давным-давно. Текстовый редактор, подсветка синтаксиса, компиляция, отладка. Вопрос не в сложности разработки IDE как таковой, вопрос в кадрах, в том, что условный Eugene New, умеющий делать IDE, вместо этого пилит что-то под андроид, а другой ковыряет блокчейн, торговых роботов, КАД, ядро линукса, другую какую бигдату. [/quot] Eugene NewЗнаешь сколько разного софта создавалось раньше? Изучи вопрос, будешь удивлен. Вы думаете, что взрывной рост развития вычислительной техники продолжается. А он уже остановился. По крайней мере на уровне вашего ее понимания. И бума на программистов давно уже нет. Не понятно при чем тут развитие per se? Да хоть остановись оно, количество устройств в мире уже чудовищно. Прикинешь на глаз количество средств создания, доставки и потребления контента? Это все софт. Многие сферы бизнеса на 100% зависят от софта, технологий и алгоритмов. Реклама, маркетинг, кино, фондовый рынок и т.п. просто не существуют в современном виде без софта. О пошли заверения от все понявших в жизни на 200% молодых людей :-) Боюсь, что у тебя есть определенные иллюзии насчет его устройства.. Боюсь, я не сильно младше тебя, все ж почти четвертый десяток. Инженер, у меня диплом есть) И значок с молоточками) А у тебя? У меня нет, я прикладной математик. Вопрос не в молоточках, а инженерном подходе. Ты напрасно пытаешься взять глоткой и криком, со мной это не работает. Я эмоционален, потому что возмущен. Имею право. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 15:33 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
chpasha, чем gradle принципиально отличается от maven? вот в корне и радикально? Если вы знаете, как из т. н. gradle извлечь готовые объекты, чтобы использовать их без него, скажите как. gradle не компилирует без обновления себя и обновления всего. Да, я знаю, что там можно включить оффлайн - на какое то время он скачивать не будет. Эта возможность может быть отрублена в любой версии и обновление gradle может быть все равно легко навязано. Просто поменяют формат или положение репозиториев, так что старая версия работать не будет. С gradle я в командной строке особо не экспериментировал, т. к. у меня эта глючная фигня просто не может себя обновить из gradlew и соответственно не может ничего собрать Поэтому я не собираюсь пользоваться gradle. После изучения всего этого возникло желание сделать свою утилиту, которая бы скачивала библиотеки (пока еще формат относительно открытый) и выкладывать это где нибудь в готовом виде назло гуглу. Maven, хот я и делался для такой цели, складывает скачанное в готовом виде, я это видел. Рот закрыл - рабочее место убрал. Это вы своим подчиненным будете говорить, если не боитесь от них по морде схлопотать и если они у вас вообще есть. Да хоть остановись оно, количество устройств в мире уже чудовищно. Прикинешь на глаз количество средств создания, доставки и потребления контента? Слишком высокая скорость передачи информации по сетям. Стандартизация ПО. Автообновление. Одно и то же ПО везде. Монополизация мегакорпорациями того, что было разделено на частные предприятия. Пример - гиперсети торговли. Когда раньше было 200 частных магазинов, каждый выбирал свое ПО, какое хотел. Сейчас одна гиперсеть, которая везде ставить одно-единственное ПО. Раньше была огромная неосвоенная область. Это как земледельцы приехали в дикую местность. Сейчас все основные места уже заняты, освоены и поделены. Насчет контента - гугол его мополизирует. Тут можно много говорить и все будет слишком далеко от заглавной темы про String. У меня нет, я прикладной математик. Вопрос не в молоточках, а инженерном подходе. С каких это пор у прикладных математиков перестали писать тире инженер в дипломах? У меня вот написано - инженер-математик. Я эмоционален, потому что возмущен. Имею право. Пользуйтесь холодной логикой, коллега. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 15:58 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
[quote Eugene New] преамбула: я довольно неплохо знаком с мавен (но не гуру) и более менее не плохо с gradle (тем более не гуру) - мне трудно понять, в чем состоит какая-либо серьезная разница между ними, если абстрагироваться от частностей и мелочей. Eugene NewЕсли вы знаете, как из т. н. gradle извлечь готовые объекты, чтобы использовать их без него, скажите какчто есть готовые объекты? Eugene Newgradle не компилирует без обновления себя и обновления всего ну он хоть раз должен откуда-то зависимости скачать, которые нужны для работы активированных плагинов? я не вижу в чем отличие от мавена - если у нас в maven задекларирована зависимость от скажем flex-plugin или android-plugin или surefire (тесты) - их нужно скачать. такая же история если мы повышаем версию самого инструмента - но только gradle сам себя качает, а maven обновлять надо либо руками либо средствами os (ну т.е. я не исключаю возможности существования волшебного плагина для такого, но уверен что 99.9% либо живут на одной версии пока не приспичит и обновляются вручную). Eugene NewДа, я знаю, что там можно включить оффлайн - на какое то время он скачивать не будети мавен не будет Eugene Newобновление gradle может быть все равно легко навязаночестно говоря ничего не понял. у меня во всех проектах версия gradle прибита гвоздями и ничего само не обновляется. если бы было иначе, проекты ломались бы (или могли ломаться) сами по себе из-за изменений между мажорными версиями. кроме того, в папке проекта лежит папка gradle с gradle.properties в которой так же явно указана версия дистрибутива, файл коммитится в vcs, никаких самопроизвольных изменений. кроме того - дистрибутив gradle можно хранить так-же в vcs и ссылаться на него локально Код: sql 1. 2. 3. 4. 5.
Eugene NewПоэтому я не собираюсь пользоваться gradle. хозяин барин, удачи на android без gradle ;). но еще раз повторюсь - я не вижу никаких радикальных отличий между maven и gradle, если абстрагироваться от xml-ности maven и скриптовости gradle Eugene NewПосле изучения всего этого возникло желание сделать свою утилиту, которая бы скачивала библиотекиесли есть время на подобное, могу только пожелать удачи Eugene NewMaven, хот я и делался для такой цели, складывает скачанное в готовом виде, я это виделчто значит "в готовом виде"? ложит jar-ы в userhome/.m2 ? ну а gradle кидает их в .gradle/cache ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 16:22 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene Newlleming, Я выше уже говорил об этом. Что касается XML самого по себе - то это иерархическая БД в текстовом виде, в которой доступ к любым данным будет происходит крайне медленно, т. к. для него нужен синтаксический разбор. Причем из-за синтаксиса закрытия тегов в XML полезной информации там обычно процентов 50 или меньше, остальное мусор. Синтаксический разбор - работа с текстом - значит задействуются строки. В Ява любое использование строк чревато утечками памяти (будем уже их так называть). Авторы ИДЕИ вообще анализировали ли во что им обходится использование xml, да еще такой кучи файлов? Судя по всему нет. Пытались ли они хоть как то оптимизировать их или там каждый раз, чтобы получить какое-то одно значение параметра настройки, дергается синтаксический разбор по новой? Судя по всему, так и делается. . Стоп. Вот с этого момента стоп. Вы очень интересный человек. Но ваши взгляды на технологии соответствуют статьям образца 2000 года. Xml не является базой данных по определению. Это я вам говорю как бывший DBA. Когда то были попытки перенести базы данных и знаний в xml Но они не закончились ничем. Никакой очевидной пользы от хранения не было получено. Хотя очень долго soap и ему подобные протоколы были трендом в протоколах веб сервисов. Щас упростилось. Работу с xml вы описали неправильно. То что вы вынесли в проблемы на самом деле таковыми не являются. Работа со строками и утечки это разные проблемы. Вернее то что вы называете утечки на самом деле для jmm таковыми не являются. Утечки это когда вы в c++ выделили память и потеряли указатель. В jmm этого не бывает. Накладные расходы при работе с properties и конфигами реально существуют но они не создают проблем по сравнению с циклом компиляции и тестирования. Если вы считаете что это не так - то дайте ваши цифры или числовые оценки. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 18:32 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewРаньше была огромная неосвоенная область. Это как земледельцы приехали в дикую местность. Сейчас все основные места уже заняты, освоены и поделены. Насчет контента - гугол его мополизирует. Дело в том, что в постиндустриальном обществе, сама информационная среда порождает новые неосвоенные области. Типичный пример: datata.ru , компания продает кусочек софта, который правильно подсказывает адрес в поле. Оборот бизнеса несколько миллионов. Без интернет-магазинов такому бизнесу неоткуда было бы взяться. Таких примеров можно найти много. Eugene NewТут можно много говорить и все будет слишком далеко от заглавной темы про String. Это все в поддержку тезиса, что софта нужно много, а программистов мало. Вследствие этого предлагаю расслабиться, простить Джаву за Стринги и наслаждаться новыми интересными задачами, которые несет нам постиндустриальная экономика. А если и когда будет нужно, мы напишем свой Стринг, мы же знаем как, правда? Eugene NewС каких это пор у прикладных математиков перестали писать тире инженер в дипломах? У меня вот написано - инженер-математик. Со времен царя Гороха. Специальности 01.хх.хх не инженерные, а 05.хх.хх инженерные. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 18:59 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Правильная ссылка dadata ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 19:01 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Со времен царя Гороха. Специальности 01.хх.хх не инженерные, а 05.хх.хх инженерные. При царе Горохе это точно была инженерная специальность. Инфа 100%. Правильная ссылка dadata Это вы бум доткомов не помните. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2018, 23:06 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewПравильная ссылка dadata Это вы бум доткомов не помните. У вас как будто-бы есть бекграунд. Но странный. Может вы сисадмин? Или девопс? Или вас просто заставляют кодить на Java и это вызывает у вас раздражение. Мой вам инженерный совет - не будьте предвзяты. Предвзятость мешает вам видеть вещи как они есть. Если хотите изучать Java - welcome. Помогут. Проконсультируют. Но если вы изначально пришли сюда уже настроившись поругаться - то лучше топик сразу закрыть. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2018, 16:14 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
mayton, я не ругаюсь, а спрашиваю, анализирую и критикую. Петь хоралы из катехизиса принявшего пару колес амфетамина гуру я точно не буду. Ругани тут не очень много и идет она в основном от граждан, не имевших бы при царе Горохе шансов на получения профильного высшего образования, занятие должности инженера-программиста и шансов на общения с инженерами-программистами. Предлагаю вернутся к теме обсуждения - String в Java. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2018, 18:07 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewПредлагаю вернутся к теме обсуждения - String в Java. Давайте вернемся. В начале топика от вас прозвучала фраза. Что не так с Java String и как вы с этим боретесь? Да никак не боремся. С ним все в порядке. Это я тебе говорю после опыта разработки на C++ с разными типами CSTring, TString, std::string, после плавающей кодировки, когда есть микс разных API которые принимают где ASCII, где Unicode-16, e.t.c. После PL/SQL где отчоты формируются конкатенацией строк VARCHAR как раз в самом неприглядном варианте. После всего этого тип java.lang.String - не создает проблем. Разработчики-свитчеры (которые переключились с С/C++ на Java - обычно солидарны с этим). Надо просто помнить об иммутабельности. Это кстати серъезный задел на будущее в части мультипоточки и ФП. Если ты конечно слышал о важности иммутабельных типов. Тот пример что ты привел... Я гарантирую что он не пройдет code-review на enterprise-проектах. Поверь я был там. Я знаю. В некоторых случаях например в реализации ::toString() допускается такой вариант. Здесь нет пере-присвоения строки. Здесь компиллятор (восьмерка точно) просекает что можно сделать финт ушами и активирует билдер. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2018, 18:46 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
mayton... Давайте вернемся. В начале топика от вас прозвучала фраза. ... Не кажется странным мусолить на 8 страницах "тему". У неё на текущий момент отсутствует содержание. А с самого оно было ли, и стоило ли 8 страниц? Как думаешь, что лично тебя заставляет её "возвращать"? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2018, 19:23 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
mayton, Нет смысла объяснять что то человеку, не понимающему, что оптимизаторы уже лет 10 выносят инвариант из цикла. Ну и до кучи, не знающего разницы между иммутабельными и COW строками ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2018, 19:41 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
java 10 Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2018, 19:42 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
booby, содержание отсутствует у ТВОЕГО сообщения, так что перестань замусоривать тему. В других сообщениях оно есть и я получил из обсуждения полезную информацию, хотя не полный ответ на свой вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2018, 19:42 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
boobyКак думаешь, что лично тебя заставляет её "возвращать"? Что меня заставляет модерировать два подфорума? Что меня заставляет подсказывать одному математику на пенсии как вообще пишут алгоритмы? Я не знаю. Это - загадочный вопрос и корни его лежат далеко не в It. Вобщем оффтоп это. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2018, 19:48 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Siemargl, что оптимизаторы уже лет 10 выносят инвариант из цикла. Не надо гадать, что делают компиляторы вообще, когда мы видим сгенерированный байт-код, в котором это не сделано. Но Siemargl - уникум, всегда умудряется написать максимально наоборот тому, что есть. Вадя, java 10 Осталось узнать, что делает функция makeConcatWithConstants. Вдруг она внутри тот же самый StringBuilder создает? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2018, 20:20 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewОсталось узнать, что делает функция makeConcatWithConstants. Вдруг она внутри тот же самый StringBuilder создает? http://qaru.site/questions/61777/how-is-string-concatenation-implemented-in-java-9 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2018, 20:41 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene Newbooby, содержание отсутствует у ТВОЕГО сообщения, так что перестань замусоривать тему. В других сообщениях оно есть и я получил из обсуждения полезную информацию, хотя не полный ответ на свой вопрос. Милай, то сообщение не табе писалось. Там для табе содержания и не планировалось, не табе и письма писать. Между прочим, открой же тайну, вопрос-то у тебя какой , по состоянию на текущий момент? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2018, 22:34 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадя, http://qaru.site/questions/61777/how-is-string-concatenation-implemented-in-java-9 Спасибо. Это интересно. Я понял, что можно каким то образом выбирать реализацию конкатенации во время выполнения. Не понятно только одно - каким образом работают предоставляемые варианты, что у них внутри. "Вызывает что то, помещенное внутри java.lang.StringBuilder", что именно это что то делает - не видно. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2018, 22:53 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewНе понятно только одно - каким образом работают предоставляемые варианты, что у них внутри. "Вызывает что то, помещенное внутри java.lang.StringBuilder", что именно это что то делает - не видно.тут есть не только это... надо учесть еще что jvm производит оптимизацию во время выполнения , и что там делается одним разработчикам известно. и ещё много что зависит от количества раз использования данного фрагмента кода. поэтому если есть "проблемный" кусок кода - надо ставить "измеритель " времени выполнения и выбирать оптимальный вариант кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 10:13 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene Newвадя, http://qaru.site/questions/61777/how-is-string-concatenation-implemented-in-java-9 Спасибо. Это интересно. Я понял, что можно каким то образом выбирать реализацию конкатенации во время выполнения. Не понятно только одно - каким образом работают предоставляемые варианты, что у них внутри. "Вызывает что то, помещенное внутри java.lang.StringBuilder", что именно это что то делает - не видно. Вадя спасибо, очень интересно. Ну так там вполне очевидно. Вместо жесткой компиляции конкатенации через stringbuilder теперь компилятор генерит код вызова специального метода и его (метод) можно улучшать до бесконечности не затрагивая сам компилятор и не ломая предыдущую реализацию. Заранее зная распределение данных можно повысить эффективность реализации. Ну например если заранее известен необходимый размер буфера чтобы избежать расширения и копирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 11:57 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewАлексей Шипилев - Катахезис String. Блин, он РЕАЛЬНО под НАРКОТОЙ это писал. Или он шизофренией страдает. ... Самое обидное, что про 10-ю версию я ничего не нашел, а ведь шизоидно-амфетаминовый бред прочитал. ... Ну по внешнему виду автора видно, что с головой что то не так. ВОТ ЭТО ПОВОРОТ JEP 280: Indify String Concatenation Owner Aleksey Shipilev ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 12:01 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
llemingEugene NewАлексей Шипилев - Катахезис String. Блин, он РЕАЛЬНО под НАРКОТОЙ это писал. Или он шизофренией страдает. ... Самое обидное, что про 10-ю версию я ничего не нашел, а ведь шизоидно-амфетаминовый бред прочитал. ... Ну по внешнему виду автора видно, что с головой что то не так. ВОТ ЭТО ПОВОРОТ JEP 280: Indify String Concatenation Owner Aleksey Shipilev Да. Стиль подачи материала у Шипилева весьма эпотажный. Но я-же говорю. Это человек "от системы". Собсно если гуглить русскоязычные материалы по перформансу то основные двигатели этой активности это и есть Шипилев и Елизаров. За англоязычных - не скажу. Я их мало слушал. Так в основном по ссылкам JBreak, JPoint, Jug. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 12:23 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Я грепнул транковую ветку OpenJDK по его фамилии. Сейчас (по состоянию на 23-Sep 2018 она соответствует Java-11) Код: java 1. 2.
Там еще есть 2 со-автора этой библиотечки. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 12:33 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
mayton, Ну, в некотором смысле, это мелочёвка. Сжатые строки - вроде бы последнее, что он делал в Oracle. Думаю, что ConcatFactory - это что-то вроде работы в рамках сопровождения... он вроде бы в Red Hat c 16го года и, главным образом, пилит Shenandoah GC. На своем сайте он в красной шляпе теперь, и со ссылками на исходный код. А стиль да - молодёжный. Ребяты, это не для вас, но я вам расскажу.... Это не просто, а очень просто. Впрочем, о чем я говорю - вряд ли вам это вообще понять... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 14:56 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
boobyА стиль да - молодёжный. Ребяты, это не для вас, но я вам расскажу.... Это не просто, а очень просто. Впрочем, о чем я говорю - вряд ли вам это вообще понять... Меня самого раздражают "смищные щютки" и демотиваторы в докладах. Ума не приложу зачем они. Но в принципе способность рассказать сложные вещи очень простым языком - это очень хороший навык. Что-то там было в лидерских тренингах про "умение рассказать ребенку постулаты Эйнштейна"... Поэтому Шипилёву - плюс за доходчивость. Кстати в последнее время общаюсь с одним очень нудным математиком. Этот господин совершенно не может кратко и однозначно ответить на вопрос. Кажется что его в принципе не научили формулировать мысли кратко. А это - минус. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 17:15 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадяEugene NewНе понятно только одно - каким образом работают предоставляемые варианты, что у них внутри. "Вызывает что то, помещенное внутри java.lang.StringBuilder", что именно это что то делает - не видно.тут есть не только это... надо учесть еще что jvm производит оптимизацию во время выполнения , и что там делается одним разработчикам известно. и ещё много что зависит от количества раз использования данного фрагмента кода. поэтому если есть "проблемный" кусок кода - надо ставить "измеритель " времени выполнения и выбирать оптимальный вариант кода. В идеале даже после StringBuilder-овской оптимизации мы должны стартовать JMH-тесты и мерять что получилось. Готов спорить на бутылку виски что в обычном ентерпрайзе данная операция не будет узким местом. Там обычно ожидания стоят на работе с БД и Networking. Данный синтетический фрагмент кода который мы обсуждаем выдает нам константу которую можно даже кешировать поэтому пути для достижения перформанса идут гораздо дальше стринг-билдера. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 18:08 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
mayton, да, я понял что он не с улицы. Но в принципе способность рассказать сложные вещи очень простым языком Увы, у Шипилова нет этой способности. Скорее наоборот - запутывание. Судя по всему нет и полного понимания вещей о которых он говорит. При этом держит свою аудиторию за толпу имбецилов. общаюсь с одним очень нудным математиком. Возможно, он стремится быть как можно более точным. лидерских тренингах про "умение рассказать ребенку постулаты Эйнштейна" Они как обычно все перепутали и сделали это намеренно. "Если учёный не может объяснить уборщице, которая убирается у него в лаборатории, смысл своей работы, то он сам не понимает, что он делает." (c) Резерфорд. Это совсем не одно и то же. Судя по статье Дейкстры у США давно проблемы https://www.beroal.in.ua/article/dijkstra/ewd1165.html : "Посредственность не доверяет выдающемуся человеку, потому что не понимает его, и боится его, потому что он способен делать вещи за гранью понимания." "Менеджеры имеют совершенно стандартные боевые кличи, которые не изменились со времён Второй мировой войны. На учёных нападают как на личностей — на непокорных, неприкрытых индивидуалистов, управлять которыми намного сложнее, чем комитетами — приказывая работать в команде." "даже высокотехнологичные компании стремительно теряют учёных и инженеров" -- Возвращаясь к нашему любимому String, замечу еще раз, что пока не увидим деталей реализации этой новой функции, мы вряд ли точно узнаем, что изменится и изменится ли что то вообще и чем отличаются разные предлагаемые варианты между собой. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 18:18 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewУвы, у Шипилова нет этой способности. Скорее наоборот - запутывание. Судя по всему нет и полного понимания вещей о которых он говорит. При этом держит свою аудиторию за толпу имбецилов. Ну про ваш критицизм мы все уже поняли. Но где-же последующее предложение? Очевидно вы знаете языки и технологии где этот кейс реализован лучше? Прошу вас! Не стесняйтесь. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 18:22 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
mayton, Очевидно вы знаете языки и технологии где этот кейс реализован лучше? Я не совсем понял вопрос. Нужны примеры лучшего изложения тонкостей языка внутренних механизмов его реализации или лучшей реализации String? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 18:27 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene Newобщаюсь с одним очень нудным математиком. Возможно, он стремится быть как можно более точным. Когда говоришь - ВОТ ЭТИ ПРЯМЫЕ ПАРАЛЛЕЛЬНЫ! Тут-же набегают Лобачевский с Риманом и говорят - это смотря как посмотреть... Может и параллельны а может и нет.... Вобщем топик сходит из обсуждения конкретной задачи входит в сложную философскую линию допущений где и сама задача замыливается а тезисы ораторов сводятся к тому чтобы напустить побольше туману и не дать конкретного ответа никогда. Есть математика где можно договориться об условиях. И есть - философия где "петух - суть человек по определению Платона....". ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 18:28 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene Newmayton, Очевидно вы знаете языки и технологии где этот кейс реализован лучше? Я не совсем понял вопрос. Нужны примеры лучшего изложения тонкостей языка внутренних механизмов его реализации или лучшей реализации String? Нет. Вы покритиковали работу со строками в java. Очевидно у вас был опыт либо работы с другими ЯП где эта работа реализована лучше. Либо вы знаете как разработать другой ЯП (компиллятор или рантайм) где это лучше. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 18:29 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewСудя по статье Дейкстры у США давно проблемы https://www.beroal.in.ua/article/dijkstra/ewd1165.html : "Посредственность не доверяет выдающемуся человеку, потому что не понимает его, и боится его, потому что он способен делать вещи за гранью понимания." "Менеджеры имеют совершенно стандартные боевые кличи, которые не изменились со времён Второй мировой войны. На учёных нападают как на личностей — на непокорных, неприкрытых индивидуалистов, управлять которыми намного сложнее, чем комитетами — приказывая работать в команде." "даже высокотехнологичные компании стремительно теряют учёных и инженеров" Я удивляюсь как вы втащили в эту дему Дейкстру. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 18:32 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
maytonГотов спорить на бутылку виски что в обычном ентерпрайзе данная операция не будет узким местом. Там обычно ожидания стоят на работе с БД и Networking.тут и спорит нечего, в одном из проектов для реализации "серверного рендеринга" строил строку html таблицы для порядка 2-3 тысяч записей со сложным строением ячейки таблицы - само построение стрингблдером было приемлемым для такого объёма. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 18:36 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene Newвадя, http://qaru.site/questions/61777/how-is-string-concatenation-implemented-in-java-9 Спасибо. Это интересно. Я понял, что можно каким то образом выбирать реализацию конкатенации во время выполнения. Не понятно только одно - каким образом работают предоставляемые варианты, что у них внутри. "Вызывает что то, помещенное внутри java.lang.StringBuilder", что именно это что то делает - не видно. Я возможно забегаю в сторону. Но если вы решили быть разработчиком под Android то здесь надо Шипилёва вообще отодвинуть далеко. И сайты oracle.com в части имплементации машины вообще не читать. Android использует другую JVM. Google-овскую. И чтобы знать реализацию некоторых оптимизаций следует делать посты вообще в форум http://www.sql.ru/forum/android У "мобильщиков" свои hints, tricks. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 18:51 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
mayton...Кстати в последнее время общаюсь с одним очень нудным математиком. Этот господин совершенно не может кратко и однозначно ответить на вопрос. Кажется что его в принципе не научили формулировать мысли кратко. А это - минус.У него случайно не почасовая оплата? =) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 18:55 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
mayton, Нет. Вы покритиковали работу со строками в java. В том сообщении, на которое вы ответили, я резко раскритиковал статью Шипилева, его манеру изложения и поведение. С кем сравнивать есть - с теми же классиками программирования. Что касается java, то сложно что то придумать в рамках жестких ограничений: - строки хранятся в куче - длина строки не ограничена - строка иммутабельна - сборщик мусора Причем сравнивать не особо есть с чем среди распространенных языков программирования. StringBuilder позволяет работать со строками более-менее неплохо. По крайней мере не перевыделять память на каждый чих, а задать размер этой области заранее. В порядке мозгового штурма напрашивается идея с выделением памяти для строк в отдельной куче отдельным менеджером памяти и подсчетом ссылок с уничтожением этих срок сразу же. Но это может работать только для локальных и временных переменных и поэтому является фигней. Можно еще обсудить, зачем именно в Java так нужна иммутабельность строк (кроме потокобезопасности). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 19:23 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
SiemarglУ него случайно не почасовая оплата? =) Ограниченные люди о всех судят по себе. Siemargl выделяется даже не фоне остальных. Не женщина ли случайно? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 19:25 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
И чтобы знать реализацию некоторых оптимизаций следует делать посты вообще в форум http://www.sql.ru/forum/android Здесь, в основном форуме Java, гораздо больше умных людей и меньше неумных. У меня вообще создалось впечатление, что в сфере Андроида интеллектуальная температура намного ниже. И сводится все к настройке gradle, параметров в IDE без понимания азов и механизмов, которые мне интересны. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 19:39 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
maytonГотов спорить на бутылку виски что в обычном ентерпрайзе данная операция не будет узким местом. Там обычно ожидания стоят на работе с БД и Networking.если судить о применение прокладок в виде шаблоизаторов и хибера то стрингбилдел - самое "широкое" место . ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 19:46 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадяmaytonГотов спорить на бутылку виски что в обычном ентерпрайзе данная операция не будет узким местом. Там обычно ожидания стоят на работе с БД и Networking.если судить о применение прокладок в виде шаблоизаторов и хибера то стрингбилдел - самое "широкое" место . На синтетических бенчмарках вы не докажете что хибер - узкое место. Узкие места обычно - промахи мимо оптимального execution plan и просто неверная прикладная логика. Типа вычитывается во много раз больше entities чем надо для решения данной задачи. Но стринг-билдер не будет узким местом. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 19:50 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene Newmayton, Нет. Вы покритиковали работу со строками в java. В том сообщении, на которое вы ответили, я резко раскритиковал статью Шипилева, его манеру изложения и поведение. С кем сравнивать есть - с теми же классиками программирования. Что касается java, то сложно что то придумать в рамках жестких ограничений: - строки хранятся в куче - длина строки не ограничена - строка иммутабельна - сборщик мусора Причем сравнивать не особо есть с чем среди распространенных языков программирования. ... dlang осилишь ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 19:58 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
maytonНа синтетических бенчмарках вы не докажете что хибер - узкое место.потому что это будет всё хитро закрыто... maytonпросто неверная прикладная логика. Типа вычитывается во много раз больше entities чем надо для решения данной задачи.да , вот это и есть основное . и все это намного превышает затраты на стрингбилдер.... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 20:15 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewИ чтобы знать реализацию некоторых оптимизаций следует делать посты вообще в форум http://www.sql.ru/forum/android Здесь, в основном форуме Java, гораздо больше умных людей и меньше неумных. У меня вообще создалось впечатление, что в сфере Андроида интеллектуальная температура намного ниже. И сводится все к настройке gradle, параметров в IDE без понимания азов и механизмов, которые мне интересны. У мобильщиков - арсенал инструментов очень узкий IMHO. И всё их программирование это сплошная экономия и компромиссы. Баз данных у них нет. I/O - вырожденный. Вобщем лично для меня как объект для изучения мобильная разработка не особо интересна. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 20:26 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадяmaytonНа синтетических бенчмарках вы не докажете что хибер - узкое место.потому что это будет всё хитро закрыто... maytonпросто неверная прикладная логика. Типа вычитывается во много раз больше entities чем надо для решения данной задачи.да , вот это и есть основное . и все это намного превышает затраты на стрингбилдер.... Написать все-объемлющий тест во много раз сложнее чем просто фиксить какую-то конкретную проблему. Ты попробуй начни что-то писать тестовое для Хибера и уже в процессе написания окажется что постановка натянутая и высосанная из грязного пальца. Накладные расходы вообще начинаются не в хибере а уже в том что объявлена Entity и создан ее экземпляр. Это то что называется потеря соответствия (impedance mismatch) и после этого уже бери хоть Хибер хоть любой другой ORM. Уже проиграл. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 20:33 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
maytonТы попробуй начни что-то писать тестовое для Хибера и уже в процессе написания окажется что постановка натянутая и высосанная из грязного пальца. Накладные расходы вообще начинаются не в хибере а уже в том что объявлена Entity и создан ее экземпляр. Это то что называется потеря соответствия (impedance mismatch) и после этого уже бери хоть Хибер хоть любой другой ORM. Уже проиграл.по этому высказыванию - ты просто выразил то о чем все со мной спорят. я могу только добавить +100500 и вот пример без прокладок , с использованием StringBuilder Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 20:48 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадяи вот пример без прокладок , с использованием StringBuilder Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.
Что делает этот кусок кода ? это риторический вопрос не требующий ответа ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 21:07 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
llemingЧто делает этот кусок кода ?"риторически" отвечаю это пример использования стрингбилдера вместо прокладок... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 21:11 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewЧто касается java, то сложно что то придумать в рамках жестких ограничений: - строки хранятся в куче Строки могут хранится сразу в perm-gen (metaspace). Это фикс для строк которые один раз созданы и всегда буду существовать. Eugene- длина строки не ограничена Чисто технически индексация java.lang.String ограничена 32х разнядным целым со знаком. Тоесть до 2 млрд символов. Но у меня есть сомнения что это полезный кейс. А какие ограничения вы хотели ввести? 32k как в PLSQL? Как это постулировать в языке? Eugene- строка иммутабельна Вы можете аллоцировать массив символов char[] и очень-очень быстро и много его модифицировать. Мне сложно представить для этого какую-то полезную задачу. Сама природа строк - последовательная. Или последовательност-ная. Несколько лет назад у меня был спор на эту тему где-то в sql.ru и я просил привести мне в качестве примера любой алгоритм работы со строками где-бы было бы очень строгое обоснование работать со строками именно так чтобы они были ну ... очень мутабельны. И в качествре конт-позиции я обещал очень быстро адаптировать их алгоритм к работе с иммутабельностью. Мне не смогли ответить. И такую задачу мне никто не привел. Да вы правы по поводу ФП и потокобезопасности. Это тренд нового времени. Нам дешевле доказать иммутабельность строки и не беспокоиться о синхронизации для 99% случаев. Это разумный выбор. Те кто не согласны - работают сейчас с С++ строками. Но мне сложно говорить об их проблематике (я давно не брал в руки шашек) и сложно говорить о том как часто или редко у них крашится структура данных из-за мультипоточного доступа к строкам. - сборщик мусора (здесь я могу пожать плечами) Тема GC слишком объемна чтобы уложить ее в контекст строк. Она достойна отдельного топика. В порядке мозгового штурма напрашивается идея с выделением памяти для строк в отдельной куче отдельным менеджером памяти и подсчетом ссылок с уничтожением этих срок сразу же. Но это может работать только для локальных и временных переменных и поэтому является фигней. Я думаю вам будет интересно почитать про то как устроен сборщик мусора в Rust. Мне кажется это близко к описанному. Я по сабжу еще нечитал. Только аннотации. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 21:14 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадя, прошу прощения за критику, и особенно в связи с тем, что я сам java как средство программирования не использую. Но это - плохой пример беспорядочного проектирования. Да, он "без прокладок", и с использованием StringBuilderю Но и с использованием +. Как это вообще возможно, если ты модельный пример показываешь. PS Если ты взял в руки Java, то существо дела не в том, чтобы "программировать без прокладок" , а, ровно наоборот, в ясном понимании того, какие и как использовать. То что ты дал себе чес-слово не использовать здесь чужих прокладок, не освобождает тебя от обязанности создать взамен собственные. А показанный тобой пример - просто каша в стиле одноразового скрипта. Это не текст, с любовью выписанный для многократного применения, о чем так печется ООП. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 21:20 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадяllemingЧто делает этот кусок кода ?"риторически" отвечаю это пример использования стрингбилдера вместо прокладок... Я уже писал в родительском топике что данная задача под профайлером покажет узкое место на PrepareStatement и ResultSet::next. Основная 99% нагрузка упадет вообще на SQL-базу данных а не на STDOUT ( StringBuilder ). И я вангую что там есть места гда можно свернуть строковые операции в String::format или просто конкатенацию вообще без потери перформанса. Давайте уже оставим в покое бедный StringBuilder. Сцепление констант + переменных успешно разруливает компиллятор. В продуктовом окружении его роль могут успешно заменять FreeMarker, Velocity, или ... мне недавно рекомедовал кто-то Thy-meleaf и прочие шаблонные движки и генераторы отчотов. Или сериализаторы типа Avro, Protubuf и прочие если надо просто гонять сущности по сети. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 21:21 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
boobyНо и с использованием +.я ожидал этого замечания. да, от этого + можно избавиться, но я его специально оставил, просто для наглядности данной строки. правильно и ли нет - это вопрос спорный. если потребуется ловля блох в скорости - можно избавиться от этих ++ boobyА показанный тобой пример - просто каша в стиле одноразового скрипта.каша в чем? boobyЭто не текст, с любовью выписанный для многократного применения, о чем так печется ООП.что можно с ним сделать чтоб это было для многократного применения? написать кучу кода для возникновения тормозов? сделать свою прокладку? шаблонизатор? - нагородить ещё кучу строковых переменных и пр. и пр. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 21:33 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
maytonИ я вангую что там есть места гда можно свернуть строковые операции в String::format или просто конкатенацию вообще без потери перформанса. по поводу String::format делал, но потеря в скорости была очень значительна. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 21:37 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадяmaytonИ я вангую что там есть места гда можно свернуть строковые операции в String::format или просто конкатенацию вообще без потери перформанса. по поводу String::format делал, но потеря в скорости была очень значительна. Покажи где и как сделал. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 21:38 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадя... что можно с ним сделать чтоб это было для многократного применения? написать кучу кода для возникновения тормозов? ... и пр. и пр. Если тебе это на сомом деле нужно, есть потребность "что-то с ним сделать", просто заведи отдельный топик. С высокой вероятностью тебе помогут. А пока этот пример всего лишь предполагает копи-паст для совершенно утилитарного кода. В общем-то это не имеет значения, пока ты владелец кода и он тебя устраивает. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 21:43 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Нужно + для строк и функции вида Integer.toString объявить устаревшими и выкинуть из языка. Просто затем, чтобы не морочили голову никому. Копирование блоков текста не очень тяжелая операция. Беспокоит лишний расход памяти на неубранный строковой мусор, а не производительность. Почитал про указатели в Rust. Понял с первого раз одно - намудрили они изрядно. Почему бы в Java не сделать операцию выделения памяти в стеке? Хотя бы для избранных классов объектов, вроде построителей строк. Тогда бы они уничтожались автоматически после выхода из функции. Когда мы делаем строку с помощью StringBuilder, в конце мы ее записываем в String, а объект StringBuilder становится, как правило, мусором. Если бы он был на стеке, автоматически бы очистился без сборщика мусора. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 00:26 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Новый класс TmpStringBuilder - с выделением всегда на стеке. Что имеете против такой идеи? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 00:27 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Увеличение TmpStringBuilder.Capactiy за счет выделения нового блока равному объему добавляемой памяти (а не всей), на стеке, без освобождения прежнего. Уменьшение TmpStringBuilder.Capactiy не делает ничего. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 00:30 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Если боимся стеком управлять динамически, сделать объявление таких переменных статическими, сразу после декларации функции. (ну и хак я предлагаю, покушаюсь на святое - писать в стек). Ок, пусть это будет отдельный стек, который не смешивается со стеком вызовов. Тогда уж и динамически выделять не страшно. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 00:37 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
По крайней мере если нам надо что то такое страшное со строками творить, будем знать, что все заканчивается после выхода из процедуры и дальше за собой мусор в куче не тянет. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 00:39 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Извините за кучу сообщений, постоянно идеи приходят в голову. Семантика tmp-объектов на стеке - их нельзя возвращать и никогда нельзя ничему присваивать. Расширять на все классы не предлагаю - сложно и ни к чему. Достаточно TmpStringBuilder и может какого-нибудь TmpByteArray - конкретных классов, от которых нельзя наследовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 00:46 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewНовый класс TmpStringBuilder - с выделением всегда на стеке. Что имеете против такой идеи? Я не против. Делай. Только пара замечаний. 1) JVM изначально - стековая машина. И любая операция даже будь то сложение регистров int32 проходит через пушинг в стек. 2) Что будешь делать если в процессе работы с TmpStringBuilder тебе надо сделать еще один вызов метода? Опиши состояние стека до и после. 3) Не надо никакой новый класс делать. То что ты делаешь это изменение спецификации JVM ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 00:49 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewПочитал про указатели в Rust. Понял с первого раз одно - намудрили они изрядно. Ну ты и быстр. УЖе прочитал? Дай ссылку и мне. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 00:51 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewПо крайней мере если нам надо что то такое страшное со строками творить, будем знать, что все заканчивается после выхода из процедуры и дальше за собой мусор в куче не тянет. Давай еще подкину пищу для размышлений. Современный код который занят инициализацией должен шарить результат своей работы. Твой волшебный билдер который волшебным образом удаляет сам себя со стека непонятно какую проблему решает. Его результат - тоесть копирование в строку всё равно должен быть сохранен. Его нельзя убивать сворачиванеим стека. Если ты считаешь что оптимизировав удаление билдера ты вдруг очень круто помог GC - то я думаю что здесь ты ошибаешся количественно. От тебя нужен strong justification. Не просто сказать "я так решил" или "я так думаю". А провести исследования. Собрать макет. Прогнать его на типовых задачах. В конце должен быть JEP. Давай. Побей Шипилёва. Go-Go. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 01:02 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
mayton, JVM изначально - стековая машина. И любая операция даже будь то сложение регистров int32 проходит через пушинг в стек. 2) Что будешь делать если в процессе работы с TmpStringBuilder тебе надо сделать еще один вызов метода? Опиши состояние стека до и после. Навскидку два варианта (о них уже упоминал): 1. Второй стек. независимый от настоящего. Когда создаем TmpObject - перемещаем указатель вперед и запоминаем, сколько должны вернуть. При выходе из функции сдвигаем указатель на вершину "стека" назад. Настоящий стек это вообще никак не затрагивает. 2. Сделать вместимость TmpObject константой и привязать к объявлению функции. Код: sql 1. 2. 3. 4.
Тогда по сути это не будет ничем отличаться от выделения памяти под параметры. Выделяется при вызове функции, при выходе освобождается. УЖе прочитал? Дай ссылку и мне. https://www.ibm.com/developerworks/ru/library/l-rust_08/index.html ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 01:07 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene New1. Второй стек. независимый от настоящего. Когда создаем TmpObject - перемещаем указатель вперед и запоминаем, сколько должны вернуть. При выходе из функции сдвигаем указатель на вершину "стека" назад. Настоящий стек это вообще никак не затрагивает. Стоп-стоп. Подожди. Современный сервернй Java-процесс поднимает до нексольких тысяч Threads. Каждый Thread будет аллоцировать помимо основного стека еще и твой второй стек. Сколько-же тебе памяти надо? Какова вероятность что потокам понадобится второй стек? Беря во внимание частоту использования билдера - вангую что почти всем. Но я думаю что уже на этом шаге можно забить капитальный гвоздь. Твоя доработка может переполнить свободную память. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 01:12 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
mayton, Код: java 1.
Если нам надо что то вернуть, а не просто использовать - результат будет сохранен обычным образом - через функцию TmpStringBuilder.toString(). Которая выделить память в обычной куче под неизменяемый String. На чем экономим? На том, что сам TmpStringBuilder удалится. Сейчас когда мы используем StringBuilder, он остается в виде мусора и ждет сборщика мусора. А TmpStringBuilder уберется сразу. И мы будем хранить только готовые неизменяемые строки. Разрешаем TmpStringBuilder передавать по ссылке вниз вызываемым функциям, чтобы в него там можно было что то писать и не требовалось возвращать String для промежуточных результатов. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 01:14 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene New Код: sql 1. 2. 3. 4.
Здесь вообще ничего не понимаю. Откуда взялось число 1000 ? Откуда 123? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 01:14 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
mayton, Какова вероятность что потокам понадобится второй стек? Второй "стек" не обязательно вызывать на каждый поток. Простейший способ - при создании потока определять, нужен ли ему второй стек. Если поток создан, как поток без второго стека, вызывать Exception времени выполнения при вызове функций с TmpObject-ми. Не забывай про вариант #2, без второго стека. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 01:21 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
mayton, Откуда взялось число 1000 ? Откуда 123? Константа - размер в символах. Вроде Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 01:23 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Подобно тому, как в С++ объявляются статические локальные массивы. Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 01:24 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewПростейший способ - при создании потока определять, нужен ли ему второй стек. Если поток создан, как поток без второго стека, вызывать Exception времени выполнения при вызове функций с TmpObject-ми. Капец какой-то! Это кто будет решать нужен ему поток или нет? Программист? А зачем еще один Exception? Чтобы программисты заплакали горькими слезами и бежали еще дальше от таких улучшений? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 01:26 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
То есть в варианте два Capacity мы задаем сразу и изменять его не сможем. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 01:26 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
mayton, Ок, забудьте пока про вариант №1. Есть еще вариант №2. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 01:27 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Ну что? Факир был пьян - фокус не удался. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 13:22 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
P.P.S. На самом деле. давно говорил, что в Java очень не хватает разделения кучи между Thread'ами. Т.е. как минимум своя eden-область у каждого Thread'а поинты следующие: 1. Возможность административно назначить ограничение памяти на уровне Thread'а (application WAR'ника в application server'е): Теперь код вида ListArray rubbish = new ListArray(); while ( true) { rubbish.add( new Object() ); } не сможет "завалить" JVM/application server. Свалиться только Thread/application 2. Можно смотреть статистику потребления памяти на уровне Thread/группа Thread/application 3. Сборка мусора copy-конструктором не будет зависить от "крутости" приложения. Чистим по Thread'ам. Хотя с принципами работы "новых" GC не знаком. G1 уже в эту сторону двигался. 4. Возможность NUMA-дружелюбного алоцирования памяти. Память для Thread'а выделяется на той ноде, где работает Thread. Проблемы: 1. Нужно как-то уметь понимать и обрабатывать объекты покидающие/могут покинуть (аналог escape-анализа) Thread. 2. Нужна какая-то синхронизация с диспетчером потоков, что бы при миграции потока на другую NUMA-ноду и его Heap мигрировать. Но тут все сложно. Как работает диспетчер потоков и какие алгоритмы закрепления потоков за ядрами/нодами и их миграция - для меня большая загадка. По практике - глюка глюкой, никак с документацией не соотносящаяся ))). А с учетом, что потоки хорошо бы еще и к ядру с обработчиком прерываний сетевого стека прикреплять (RSS Receive-Side Queue) - вооще на докторскую дисертация в области IT тянет ))). 3. Для application сервера вообще вырисовывается дерево heap'ов application сервер приложение на сервере (WAR) thread ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 13:30 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev2) непонятно, что делать с функциями возвращающими строки. Теоретически, побороться можно, практически - фиг знает как реализовать. Или будет копирование туда-сюда обратно между кадрами стека или нужно память под возвращаемое значение в кадре вызывающей процедуры выделять (и передавать не явным парметром), но опять таки, размем буффера под строку заранее не известен (и даже, может меняться). У меня была идея о парадигме (близкой к ФП) языка где строк не существует но есть такие себе pure-functions которые генерируют потоки символов. Типа. Код: java 1.
Накладные расходы минимальны если работает lazy-механизм. Ну и весь API переколбасить соотв. Доступ к i-му элементу тоже возможен но это будет как-раз отступление от потоков и движение в сторону других строк. Неэкономных. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 13:39 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
mayton...о парадигме (близкой к ФП) языка где строк не существует но есть такие себе pure-functions которые генерируют потоки символов... Ты представляешь какой "взрыв мозга" кодировать в такой парадигме? Для отчетных систем / сборка отчетов - возможно и осмысленно. А для универсального языка программирования - это какой-то освенцем и дурдом для программистов ))) Такое частилище, что потом 9-кругов ада пионерским лагерем покажутся ))) IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 13:45 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
maytonТебе по идее вообще не нужна строка. У тебя сервлет. И у него где то есть OutputStream. Вот туда и надо нацелить html bulder.вот тут и проявляется. у меня ws. и тут только строка или бинари. и строка, как ни крути, останется строкой. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 13:49 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev2. Можно смотреть статистику потребления памяти на уровне Thread/группа Thread/application Статистика это +1000 Меня всегда интересовал сбор информации о частоте дёргания new в исходниках и о времени жизни порождаемых объектов. Думалось так: Здесь делаем хинт аллокатору что объект сразу будет вечным. Код: java 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 13:55 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsevmayton...о парадигме (близкой к ФП) языка где строк не существует но есть такие себе pure-functions которые генерируют потоки символов... Ты представляешь какой "взрыв мозга" кодировать в такой парадигме? Для отчетных систем / сборка отчетов - возможно и осмысленно. А для универсального языка программирования - это какой-то освенцем и дурдом для программистов ))) Такое частилище, что потом 9-кругов ада пионерским лагерем покажутся ))) IMHO Давай подумаем. Из API стримов выпадает только взятие симаола по индексу. Или substr(m,n). Все остальное работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 13:57 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev1. Нужно как-то уметь понимать и обрабатывать объекты покидающие/могут покинуть (аналог escape-анализа) Thread. Я-бы добавил профайлер survival областей. Мне кажется там лежат самые подозрительные объекты. Это еще не старички. Но уже и не Эдемский сад. Вобщем их идентифицировать и понять где в коде они были созданы. Возможно будет много точек в коде где есть конструктора и фабрики. И такие точки надо подсвечивать красным примерно как это делает SonarQube. Отчот по memory-performance включает в себя этих перебежчиков. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 14:01 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
mayton, а зачем столько головняков? почему не остановиться на StringBuilder? ведь там есть всё, что нужно для работы со строками . только останется выяснить как ведёт себя .delete Код: plaintext 1. 2.
освобождается ли память ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 14:10 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадя, это камент к какому из моих сообщений? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 14:14 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, выделять на стеке только object String, без буффера - те же яйца, но в профель. Все равно будет heap гадится. Нет, только буфер. TmpStringBuilder 2) непонятно, что делать с функциями возвращающими строки. Теоретически, побороться можно, практически - фиг знает как реализовать. Или будет копирование туда-сюда обратно между кадрами стека или нужно память под возвращаемое значение в кадре вызывающей процедуры выделять (и передавать не явным парметром), но опять таки, В верхней функции создаем TmpStringBuilder и передаем во все вызываемые процедуры как параметр. азмем буффера под строку заранее не известен (и даже, может меняться). Если его зафиксировать константой, то должно получится. Доступ к i-му элементу тоже возможен но это будет как-раз отступление от потоков и движение в сторону других строк. Уж лучше я на буфере фиксированного размера буду работать. Нужно как-то уметь понимать и обрабатывать объекты покидающие/могут покинуть (аналог escape-анализа) Thread. Этого мало. Нужно убивать TmpStringBuilder при завершении функции, в которой он объявлен, не потока, а функции. Если сделать выделение под TmpStringBuilder в куче, общей для всех потоков, но отдельной от обычной куче? В этой строковой куче не будет сборщика мусора, память будет освобождаться сразу по выходе из процедуры со всеми прелестями фрагментации и т. п. Не получится из за необходимости синхронизации потоков для выделения памяти? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 14:14 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
mayton....survival областей....этих перебежчиков. Предположим, есть одна штука application сервера, где крутятся два разных процесса/сервлета 1. "быстрый" запрос-ответ (0.001 секунда), но к которому идет частое обращение, т.е. много мусора 2. "второй" медленный (10 секунд), выделяющий буффер большого объема. пусть обработка фотографий из-за процесса N 1, minor коллектор срабатывает раз в 0.2 секуды... все хорошо... но буффер от второго процесса, никогда в eden не задержится, т.к. за 10 / 0.2 = 50 циклов сборки мусора, он явно из servival в old gen переместится. В общем, современная JVM совершенно не многозадачная. Ее можно настроить только на выполнения одной задачи. А для разных thread/задач, нужны разные настройки памяти. Статистика по survival для настройки и так вполне достаточная. Но если на сервере есть разные классы задач (по времени жизни, по требованию eden vs old / temporary object vs cache/ ), то нормально работать они могут только после разнесения по разные JVM / application server'ам. Современные концепция application server'ов: кучу application задеплоим в одну JVM - для меня очень сомнительна IMHO p.s. Потребность использования non-heap меморя для кэшей - из-за этого же. Просто нельзя нормально JVM настроить, пока heap общий. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 14:16 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene New...В этой строковой куче не будет сборщика мусора, память будет освобождаться сразу по выходе из процедуры... Ну напишите свою реализацию String'а на non-heap memory + подсчет ссылок Только... практического смысла в этом нет... никакого. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 14:20 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
maytonвадя, это камент к какому из моих сообщений?в среднем по всем, как я вижу разговор из практической фазы переходит в область околонаучных исследования,теоретически может быть и интересно , но практически - ..., как и исследования британских учёных. твои бы знания направить в изучение оптимизации стринбилдера - это было бы и более познавательнее и более практичнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 14:21 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадяmaytonТебе по идее вообще не нужна строка. У тебя сервлет. И у него где то есть OutputStream. Вот туда и надо нацелить html bulder.вот тут и проявляется. у меня ws. и тут только строка или бинари. и строка, как ни крути, останется строкой. Ты хочешь сказать что в этот ws ты вставляешь html? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 14:21 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Ну напишите свою реализацию String'а на non-heap memory + подсчет ссылок Ничего считать не надо, всегда удаляем по выходу из процедуры. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 14:23 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
maytonТы хочешь сказать что в этот ws ты вставляешь html?с передаю сформированную строку (которая представляет из себя html код /в примере таблица/) по ws, на клиенте просто вставляю эту строку как элемент.innerHTML='полученная_по_ws_строка' и у меня отображается таблица. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 14:26 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадяmaytonвадя, это камент к какому из моих сообщений?в среднем по всем, как я вижу разговор из практической фазы переходит в область околонаучных исследования,теоретически может быть и интересно , но практически - ..., как и исследования британских учёных. твои бы знания направить в изучение оптимизации стринбилдера - это было бы и более познавательнее и более практичнее. Стринг билдер - прекрасно работает. Нечего там оптимизировать. Топик вообще про компиллятор. Надо просто некоторым топик стартерам сначала почитать рекомендации по оптимизации. Самые базовые. Они есть в любом языке. В сях есть свои. В Паскале свои. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 14:27 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewУж лучше я на буфере фиксированного размера буду работать. А в твой буфер можно будет положить utf-8 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 14:30 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадяmaytonТы хочешь сказать что в этот ws ты вставляешь html?с передаю сформированную строку (которая представляет из себя html код /в примере таблица/) по ws, на клиенте просто вставляю эту строку как элемент.innerHTML='полученная_по_ws_строка' и у меня отображается таблица. Это треш. Ты согласен? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 14:31 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
maytonЭто треш. Ты согласен?это серверный рендеринг. объясни в чем трэш? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 14:33 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадяmaytonЭто треш. Ты согласен?это серверный рендеринг. объясни в чем трэш? WS - это веб-сервис? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 14:36 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
maytonWS - это веб-сервис?websocket ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 14:39 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
maytonСтринг билдер - прекрасно работает. Нечего там оптимизировать. +100500 Если StringBuilder не нравится, то можно ByteArrayOutputStream взять. У него даже несколько реализаций есть (например от google - поблочне выделение, что бы копирования не было) maytonНечего там оптимизировать. Обычно "подводный" камень по перформанцу это отдача клиенту по сети. Там приходится и encode в кодовую таблицу клиента делать и gzip'овать Gzip в Java (да и вообще), крайне тормознутая вещь. У нас >50 % CPU на продуктиве уходило чисто на gzip перед отдачей клиенту. Всякие JSON / ProtoBuf / String / StringBuilder'ы на этом фоне были копейки ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 14:40 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevGzip в Java (да и вообще), крайне тормознутая вещь.вообще то зипует апач- нативным кодом. java тут не приделах ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 14:44 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадяmaytonWS - это веб-сервис?websocket А тьфу. Ну сорян. Извини я не UI-щик и этих ваших юайных штук не понял. Ладно беру слова взад. Не трешак. Нормик. Но насчет Html-builder ты все таки подумай. Код всегда удобнее рефакторить если это вызовы методов а не простыня конкатенаций. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 14:46 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
mayton, А в твой буфер можно будет положить utf-8 ? Суть предложения дать возможность выделять на входе процедуры буфер в стеке с его автоматическим освобождением при выходе из нее. Класть туда можно что угодно, для UTF-8 можно отдельный класс сделать. Хотя я бы этот utf-8 использовать бы не стал. Все равно на выходе из самой верхней функции вернет String tmpBuf.ToString (), выделяя под этот String место в обычной куче. По производительности - не хуже чем сейчас. Зато не будет на каждую операцию со строкой мусорить в куче умершими StringBuilder-ми. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 16:15 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Кстати, в UI приложениях этот ваш сборщик мусора бесит больше долгих операций по нажатию кнопки. Пользователь может понять, почему ему приходится ждать, когда он что-то приказал сделать, нажав на кнопку. Но когда он не делает ничего, а программа начинает вдруг шуршать диском и зависать - это реально бесит. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 16:18 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewХотя я бы этот utf-8 использовать бы не стал.. Почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 16:18 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Вот сижу я в Firefox, никого не трогаю, смотрю сайт, просто текст читаю. И вдруг эта сволочь начинает виснуть сама по себе и шуршать диском. Не знаю, что оно там вообще делает, мусор собирает или еще что, но раздражает изрядно. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 16:20 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
mayton, мы же заботимся об упрощении работы программиста. С UTF-8 работать сложнее, потому что он не является массивом символов с произвольным доступом и дольше по той же причине. Раз уж буфер все равно уничтожится при выходе из функции, уж лучше я буду формировать строки без лишнего геморроя. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 16:22 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewВот сижу я в Firefox, никого не трогаю, смотрю сайт, просто текст читаю. И вдруг эта сволочь начинает виснуть сама по себе и шуршать диском. Не знаю, что оно там вообще делает, мусор собирает или еще что, но раздражает изрядно. Это просто прекрасно. Мне нравится как ты проводишь параллели между java и посторонними приложениями на сях. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 16:30 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадя, заведи свою ветку, или ничего не пиши, если, на голубом глазу, считаешь что с твоим кодом всё в порядке. Обсуждать "твою" тему в этом топике - за рамками добра и зла. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 16:34 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Обсуждать "твою" тему в этом топике - за рамками добра и зла. Как раз его тема здесь по смыслу подходит. Т. к. вопрос заключается и в возможных проблемах со String. В отличие от ваших сообщений, в которых один оффтоп и ноль полезной информации. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 16:44 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
maytonEugene NewХотя я бы этот utf-8 использовать бы не стал.. Почему? потому что там на символ или один или два байта, а программу нужно писать на одном языке (не языке программирования а вобще) пишете для англичан то ansii Код: java 1. 2. 3. 4. 5.
клиент из россии то cp1251 Код: java 1. 2. 3. 4. 5.
все остальное от лукавого. Причем все строки на стеке и работает ну очень быстро. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 16:46 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
lleming, Но как быть с международными проектами? Как , великий гуру? P.S. мне б вашу категоричность.. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 17:23 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
boobyсчитаешь что с твоим кодом всё в порядке. Обсуждать "твою" тему в этом топике - за рамками добра и зла.обсуждение моего кода было несколько раз, и каждый раз заканчивалось тем, что у противной стороны заканчивались аргументы. а код тут как раз в тему - в результате надо строку - строка получается. надо быстро - быстрее предложишь воспользуюсь. более кратко - предлагай, но так чтоб и быстрота осталась. более читабельно - опять таки что б не медленнее. сгородить json - так это та же строка+конвертация json->Html Html-builder - вот это смотрел, но не понял как применить к моему случаю.. проблема написать валидную html-строку - так это уже другая проблема я , в принципе, могу построить html строку для строки таблицы и в sql , но это будет как-то не очень наглядно, но зато нативным кодом будет выполняться. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 17:24 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene Newвопрос заключается и в возможных проблемах со String. Мне нравится слово "возможных". Оно создаёт некий ареал загадочности. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 17:27 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадяboobyсчитаешь что с твоим кодом всё в порядке. Обсуждать "твою" тему в этом топике - за рамками добра и зла.обсуждение моего кода было несколько раз, и каждый раз заканчивалось тем, что у противной стороны заканчивались аргументы. а код тут как раз в тему - в результате надо строку - строка получается. надо быстро - быстрее предложишь воспользуюсь. более кратко - предлагай, но так чтоб и быстрота осталась. более читабельно - опять таки что б не медленнее. сгородить json - так это та же строка+конвертация json->Html Html-builder - вот это смотрел, но не понял как применить к моему случаю.. проблема написать валидную html-строку - так это уже другая проблема я , в принципе, могу построить html строку для строки таблицы и в sql , но это будет как-то не очень наглядно, но зато нативным кодом будет выполняться. У аргументов есть свойство кончаться ибо их количество конечно. Другой вопрос были ли они выслушаны и/или опровергнуты. (мы помним про страсть к хранимках). А если требование "надо быстрее" поменять на "так же быстро но еще и читабельно". вадяя , в принципе, могу построить html строку для строки таблицы и в sql , но это будет как-то не очень наглядно, но зато нативным кодом будет выполняться. насколько sql сервер наитивней чем jit компилятор java ? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 17:56 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадяboobyсчитаешь что с твоим кодом всё в порядке. Обсуждать "твою" тему в этом топике - за рамками добра и зла.... а код тут как раз в тему - в результате надо строку - строка получается. ... Ну, раз в тему, то мой аргументы закончились. Обсуждай здесь. Мое высказывание по отношению к твоему коду к строкам отношения не имело. Только к манере писать код. Строки я с тобой обсуждать не планировал. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 18:03 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
lleming... (мы помним про страсть к хранимках). А если требование "надо быстрее" поменять на "так же быстро но еще и читабельно". ... Лично я "страсть к хранимкам" воспринимаю скорее как признак психического здоровья и адекватности. Так что в этом месте, концептуально, ваде от меня плюс. И код у него абсолютно читаемый. Но ни от того, ни от другого он не становится лучше. Ни в смысле повторного использования, ни в смысле внесения изменений при изменении бизнес-требований. Такие скрипты админы на все руки себе пишут впопыхах, для решения вот здесь и сейчас конкретной админской задачи на один раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 18:17 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
boobyМое высказывание по отношению к твоему кодувот это как раз, моё мнение, и имеет отношение к строкам - потому как мой код - это построение строки. и если есть предложения - я готов выслушать. boobyТолько к манере писать код.мнение интересно. boobyЛично я "страсть к хранимкам" воспринимаю скорее как признак психического здоровья и адекватности. Так что в этом месте, концептуально, ваде от меня плюс.ну хоть кто-то поддерживает в этом. boobyНи в смысле повторного использования, ни в смысле внесения изменений при изменении бизнес-требований.ну как можно повторно использовать всё написанное, если что-то написанное решает конкретную задачу? а задача данного примера 21683344 сформировать таблицу найденных по условию like and like записей как раз и используется многократно - формирование раскрывающегося "списка листбокс" да. это не организовано в объект и либу, но эти обусловлено многими вещами. и самое простое- копи/паст для применения. да, всё это можно формализовать, но это повлечет такую цепь действий, что ни о скорости , ни о читабельности уже не придётся говорить ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 18:36 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
llemingпотому что там на символ или один или два байта Вообще от 1 до 4 (изначально было до 6) https://ru.wikipedia.org/wiki/UTF-8 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 18:58 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадя, вадя...ну как можно повторно использовать всё написанное... ОК. Тема закрыта. Твой код прекрасен в смысле абсолютного соответствия этой теме про строки. Вы просто счастливо нашли друг друга. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 20:11 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
программу нужно писать на одном языке В мире есть два основных алфавита: кириллица и латиница и они оба вместе прекрасно умещаются в 1 байт. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 21:27 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene New, Если судить по численности, то 2 основных это латиница и китайские иероглифы ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 21:40 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene Newпрограмму нужно писать на одном языке В мире есть два основных алфавита: кириллица и латиница и они оба вместе прекрасно умещаются в 1 байт. Тебя круто занесло браток. Через сотню страниц мы будем обсуждать расовые теории и Адольфа Алоизовича. Как модератор я предлагаю на этом тезисе поставить точку и не развивать эту тему более. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 22:02 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewКстати, в UI приложениях этот ваш сборщик мусора бесит больше долгих операций по нажатию кнопки. Пользователь может понять, почему ему приходится ждать, когда он что-то приказал сделать, нажав на кнопку. Но когда он не делает ничего, а программа начинает вдруг шуршать диском и зависать - это реально бесит. 1. GC физически не может "шуршать диском" 2. Нормально, сборщик мусора отрабатывает десятые доли секунды. Если больше - то программист/админ/дефолтные установки криворукие. Собственна концепция GC, тут не при чем. Судя по всему. то, что Вы называете "начинает вдруг шуршать диском и зависать" - явно проблемы ОС. Криворукие драйвера (обработка прерываний, "зависать") + swap (шуршать диском), хотя, возможно. что и swap не при чем. Новые ОС больно умные. И антивирусы и дифрагментаторы и индексация и журнал диска.... в общем "шуршать диском" могут по 100500 причинам Java, конечно, тут тоже виновата, но __косвенно__. Обычна Java-приложения достаточно много памяти жрет. Если запущены еще и другие приложения и памяти не хватает, то возможно что память в swap и вытеснилась. Но GC тут виноват сильно косвенно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2018, 13:15 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene Newпрограмму нужно писать на одном языке В мире есть два основных алфавита: кириллица и латиница и они оба вместе прекрасно умещаются в 1 байт.Какой толстый троллинг! Жаль, что рассчитан на школьников, не знающих про численность китайцев и индийцев. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2018, 14:26 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev"шуршать диском" могут по 100500 причинам +1)) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2018, 14:58 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
еще кто-то шуршит диском во времена ssd по 20 баксов ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2018, 15:14 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
mayton Xml не является базой данных по определению. Это я вам говорю как бывший DBA. По какому определению? Как я понимаю, база данных - это просто какой-то набор данных. Ни ACID, ни реляционный язык запросов не имеют к этому отношения. XML, конечно, это формат, но, судя по контексту, имелись в виду файлы формата XML. И, что касается XML, для него придуман XQuery. Довольно занятная и очень мощная штука (сопоставимо с SQL). Но если не XQuery, а, скажем, хождение по DOM'у - это подобно dBase/FoxPro/Clipper, тоже СУБД, где набор DBF-ок - тоже база данных. Для небольшого количества крошечных XML-ок траты времени на разбор не должны иметь большого значения. Для большого количества больших можно использовать Oracle/DB2/MS SQL - там оптимизированный формат хранения, индексы, XQuery, SQL/XML. Конечно, с каким-нибудь JSON'ом иметь дело может быть приятнее, но принципиальной разницы нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2018, 13:30 |
|
|
start [/forum/topic.php?all=1&fid=59&tid=2121729]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
320ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 432ms |
0 / 0 |