JVM internals - what does the JVM do? — Ian Rogers

User avatar
rzen
Уже с Приветом
Posts: 24375
Joined: 18 Nov 2003 16:42

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by rzen »

crypto5 wrote:
valchkou wrote:
M. Ridcully wrote:Ё-моё, геттеры-сеттеры.
Я Java не знаю, в-принципе): нельзя из функции несколько значений вернуть.
вернуть List или HashMap или другой класс с кучей значений
Меня больше всего в джаве бесит отсутствие type inference и лямбд. А так со всем остальным можно жить.
лямбды будут в восьмой джаве, type inference (для дженериков) уже есть в седьмой джаве.
Don't code today what you can't debug tomorrow.
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by crypto5 »

rzen wrote:
crypto5 wrote:
valchkou wrote:
M. Ridcully wrote:Ё-моё, геттеры-сеттеры.
Я Java не знаю, в-принципе): нельзя из функции несколько значений вернуть.
вернуть List или HashMap или другой класс с кучей значений
Меня больше всего в джаве бесит отсутствие type inference и лямбд. А так со всем остальным можно жить.
лямбды будут в восьмой джаве, type inference (для дженериков) уже есть в седьмой джаве.
Это очень ограниченный type inference, в скала например оно работает для вызова метода типа:
val res = methodCall()
в джаве такого нету.
In vino Veritas!
User avatar
rzen
Уже с Приветом
Posts: 24375
Joined: 18 Nov 2003 16:42

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by rzen »

нету. и не будет.
Don't code today what you can't debug tomorrow.
User avatar
Montchik
Уже с Приветом
Posts: 2119
Joined: 27 Dec 1999 10:01
Location: Воронеж -> Naperville, IL

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Montchik »

Интеррапт wrote:
Montchik wrote:Не вкурсе я, ибо не использовал. Но имхо выглядит сыровато
Ну вам виднее :mrgreen:
На самом деле какая там еще документация нужна? Показан код с lombok и показан аналогичный vanilla Java код, который генерится, с комментариями автора. Если кто-то не сможет в таком разобраться - ну так значит ему этот фреймворк и не нужен.
Montchik wrote:а когда это до ума доведут, в саму Java уже могут быть включены основные фичи.
Так вы расскажите, что там до ума доводить то нужно? :) Веб сайт красивее переделать? А так все хорошо работает - новые фичи добавляет, баги для новых фич оперативно фиксят.
А насчет, что в Джаву будут включены такие фичи, то ждите, ждите. Учитывая, что Java 8 выйдет только через год и никаких конкретных планов по поводу Java 9 нет (и еще не факт, что туда такое добавят), то ждать вам как минимум года 3.
Действительно, че там документировать-то! Кому надо - в исходниках разберуца, а не осилят значит фреймворк не для них. :mrgreen:
Удачи с lombokom и прочим авангардом программизма! Она вам приходится. :fr:
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Интеррапт »

Montchik wrote:Удачи с lombokom и прочим авангардом программизма! Она вам приходится. :fr:
OMG. Да есть там документация :mrgreen: Или вы кроме заглавной странички с видео дальше не открывали?
Ну что тут может быть непонятно?
http://projectlombok.org/features/GetterSetter.html
За 30 секунд все становится понятно - для чего и как.

или им нужно было это размазать на 20 страниц, чтобы заслужить звание хорошей документации?
User avatar
Flying Hen
Уже с Приветом
Posts: 1377
Joined: 14 May 2003 20:37
Location: NY, USA

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Flying Hen »

Почему бы им просто не добавить в язык необязательный оператор delete? Те кому надо будут его испльзовать, всех остальных удовлетворит GC.
User avatar
rzen
Уже с Приветом
Posts: 24375
Joined: 18 Nov 2003 16:42

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by rzen »

Flying Hen wrote:Почему бы им просто не добавить в язык необязательный оператор delete? Те кому надо будут его испльзовать, всех остальных удовлетворит GC.
на двух стульях не усидеть, тут я с ними согласен.
Don't code today what you can't debug tomorrow.
User avatar
rzen
Уже с Приветом
Posts: 24375
Joined: 18 Nov 2003 16:42

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by rzen »

Flying Hen wrote:Почему бы им просто не добавить в язык необязательный оператор delete? Те кому надо будут его испльзовать, всех остальных удовлетворит GC.
на двух стульях не усидеть, тут я с ними согласен.
Don't code today what you can't debug tomorrow.
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Интеррапт »

Flying Hen wrote:Почему бы им просто не добавить в язык необязательный оператор delete? Те кому надо будут его испльзовать, всех остальных удовлетворит GC.
Каким образом вы предлагаете это осуществить? Для этого придется, чтобы delete не только освобождал память, но и осуществлял dereference всех возможных ссылок, которые могут указывать на этот обьект. Т.е. каждый раз при вызове delete, нужно пробегаться по ссылкам и сбрасывать их. Будет ли это оптимательней по сравнению с обычным GC? Я, лично, очень сомневаюсь. Не считая того, что это сделает код очень error-prone по причине, что ссылки вдруг могут начать просто исчезать (попробуйте попрограммировать на Java cо сплошными weak references).
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Интеррапт »

Мне лично ObjectiveC-шный ARC нравится больше, чем GC :)
User avatar
rzen
Уже с Приветом
Posts: 24375
Joined: 18 Nov 2003 16:42

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by rzen »

а мне нравился (нынче неосуществимый) вариант управления памятью от турбопаскаля, вернее в турбовижене они его реализовали. управление памятью по сути делалось так (уж не серчайте если по памяти что напутаю). объект при инициализации эвристически заказывал сколько ему потребуется памяти, получал его в куче, и больше о памяти не беспокоился. если не хватило—прога падала. но таких неугадываний случалось _исключительно_ мало. ценой такой роскоши был некоторый перерасход памяти. но это малая цена за отсутствие головной боли с управлением памятью :-)
Don't code today what you can't debug tomorrow.
User avatar
Montchik
Уже с Приветом
Posts: 2119
Joined: 27 Dec 1999 10:01
Location: Воронеж -> Naperville, IL

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Montchik »

rzen wrote:а мне нравился (нынче неосуществимый) вариант управления памятью от турбопаскаля, вернее в турбовижене они его реализовали. управление памятью по сути делалось так (уж не серчайте если по памяти что напутаю). объект при инициализации эвристически заказывал сколько ему потребуется памяти, получал его в куче, и больше о памяти не беспокоился. если не хватило—прога падала. но таких неугадываний случалось _исключительно_ мало. ценой такой роскоши был некоторый перерасход памяти. но это малая цена за отсутствие головной боли с управлением памятью :-)
А как объект отдавал память назад в кучу?
User avatar
dotcom
Уже с Приветом
Posts: 9035
Joined: 25 Oct 2011 19:02
Location: SVO->ORD->SFO

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by dotcom »

Вобще лучше всего пока гибридный подход к памяти сделан в D. Там есть GC, есть возможность давать ему подсказки, можно исподьзовать malloc/free, если приспичит. Игровые конторы стали любить язык все больше и больше. Кармак активно вот следит за развитием языка. Недавно зарелизили OpenGL обертку. Т.е. похоже, что язык игростроителям нужен.
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Интеррапт »

dotcom wrote:Вобще лучше всего пока гибридный подход к памяти сделан в D. Там есть GC, есть возможность давать ему подсказки, можно исподьзовать malloc/free, если приспичит.
Ну так это и в C# можно делать, в unsafe контексте.
User avatar
rzen
Уже с Приветом
Posts: 24375
Joined: 18 Nov 2003 16:42

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by rzen »

Montchik wrote:
rzen wrote:а мне нравился (нынче неосуществимый) вариант управления памятью от турбопаскаля, вернее в турбовижене они его реализовали. управление памятью по сути делалось так (уж не серчайте если по памяти что напутаю). объект при инициализации эвристически заказывал сколько ему потребуется памяти, получал его в куче, и больше о памяти не беспокоился. если не хватило—прога падала. но таких неугадываний случалось _исключительно_ мало. ценой такой роскоши был некоторый перерасход памяти. но это малая цена за отсутствие головной боли с управлением памятью :-)
А как объект отдавал память назад в кучу?
ох ну ты как спросишь :-)

куча работала как стек, запрашиваешь память, куча "растёт", перед созданием очередной коллекции объектов отмечаешь текущее состояние кучи, создаёшь нужное количество объектов не перепроверяя доступную память, когда нужда в объектах пропадает, релизишь кучу (=все объекты одним махом). аналог пула молодых объектов в JVM но без собссно GC.

поскрипев мозгами смутно припоминаю что кажется была зона памяти если куча до неё дорастала то возникало нефатальное исключение ООМ. но только в том случае если создаваемый объект не был больше чем эта зона. если больше то каюк.
Don't code today what you can't debug tomorrow.
User avatar
Flash-04
Уже с Приветом
Posts: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Flash-04 »

rzen wrote:если не хватило—прога падала
ну ни хренасе...
Not everyone believes what I believe but my beliefs do not require them to.
User avatar
rzen
Уже с Приветом
Posts: 24375
Joined: 18 Nov 2003 16:42

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by rzen »

Flash-04 wrote:
rzen wrote:если не хватило—прога падала
ну ни хренасе...
времена были такие, досовские. прога падала и всю систему за собой тянула. в те времена ctrl-alt-del не вызывало окошко для логина, а ребутило систему без лишних вопросов :umnik1:
Don't code today what you can't debug tomorrow.
User avatar
Flying Hen
Уже с Приветом
Posts: 1377
Joined: 14 May 2003 20:37
Location: NY, USA

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Flying Hen »

Интеррапт wrote: Каким образом вы предлагаете это осуществить? Для этого придется, чтобы delete не только освобождал память, но и осуществлял dereference всех возможных ссылок, которые могут указывать на этот обьект. Т.е. каждый раз при вызове delete, нужно пробегаться по ссылкам и сбрасывать их. Будет ли это оптимательней по сравнению с обычным GC? Я, лично, очень сомневаюсь. Не считая того, что это сделает код очень error-prone по причине, что ссылки вдруг могут начать просто исчезать (попробуйте попрограммировать на Java cо сплошными weak references).
Например, сделать так: delete обнуляет только текущую ссылку. Если больше ссылок на объект нет, то память возвращается в пул. Если ссылки есть, то выкидывается exception. Это даст возможность грамотным девелоперам держать память под контролем, если это критично.

Если подход с авто GC не работает, то какой смысл упорствовать? А то получается как у M$, дядя Бил за вас обо всем подумал, расслабьтесь и получайте удовольствие. Агащаз.
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by crypto5 »

Flying Hen wrote:
Интеррапт wrote: Каким образом вы предлагаете это осуществить? Для этого придется, чтобы delete не только освобождал память, но и осуществлял dereference всех возможных ссылок, которые могут указывать на этот обьект. Т.е. каждый раз при вызове delete, нужно пробегаться по ссылкам и сбрасывать их. Будет ли это оптимательней по сравнению с обычным GC? Я, лично, очень сомневаюсь. Не считая того, что это сделает код очень error-prone по причине, что ссылки вдруг могут начать просто исчезать (попробуйте попрограммировать на Java cо сплошными weak references).
Например, сделать так: delete обнуляет только текущую ссылку. Если больше ссылок на объект нет, то память возвращается в пул. Если ссылки есть, то выкидывается exception. Это даст возможность грамотным девелоперам держать память под контролем, если это критично.

Если подход с авто GC не работает, то какой смысл упорствовать? А то получается как у M$, дядя Бил за вас обо всем подумал, расслабьтесь и получайте удовольствие. Агащаз.
Если умело пользоваться escape analysis то можно тоже создавать удалять обьекты в обход ГЦ. Ну и в чем вообще проблема с ГЦ? 95%(а наверное и больше) типичных джава application с гарбадж коллектором проблем не бывает. Если проблемы возникают есть прозрачные способы его тюнит которые покрывают еще процента 4, а если вы попали в оставшийся процент, то может действительно стоит воспользоваться более системным языком(c++)?
In vino Veritas!
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Интеррапт »

Flying Hen wrote:Например, сделать так: delete обнуляет только текущую ссылку. Если больше ссылок на объект нет, то память возвращается в пул. Если ссылки есть, то выкидывается exception. Это даст возможность грамотным девелоперам держать память под контролем, если это критично.
Круто :) Не хотел бы я под такой платформой программировать. Какой смысл обнулять текущую ссылку вообще? (обычно рекомендуют ссылки обнулять, чтобы код было легче отлаживать), но как раз с текущей ссылкой особых проблем нет, вы ей сделали уже delete и знаете, что ее использовать не нужно. Зачем ее обнулять? А вот со всеми остальными ссылками...

Т.е., по вашему, вот такой код должен exception выкидывать?

Code: Select all

String s1 = new String("hello world");
String s = s1;
delete s1;
До такого даже в низкоуровневых языках не додумались :)
Flying Hen wrote:Если подход с авто GC не работает, то какой смысл упорствовать? А то получается как у M$, дядя Бил за вас обо всем подумал, расслабьтесь и получайте удовольствие. Агащаз.
Почему подход с GC не работает? В большинстве случаев работает. И при чем здесь дядя Бил или Sun? Не хотите работать в managed environment никто вам не мешает из этих языков native код вызывать или даже просто писать свои программы на Asm, C, C++.
User avatar
Flash-04
Уже с Приветом
Posts: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Flash-04 »

rzen wrote:времена были такие, досовские. прога падала и всю систему за собой тянула. в те времена ctrl-alt-del не вызывало окошко для логина, а ребутило систему без лишних вопросов :umnik1:
вот не надо, я ведь когда-то и на "Turbo C" писал ;)
Not everyone believes what I believe but my beliefs do not require them to.
User avatar
rzen
Уже с Приветом
Posts: 24375
Joined: 18 Nov 2003 16:42

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by rzen »

Flash-04 wrote:
rzen wrote:времена были такие, досовские. прога падала и всю систему за собой тянула. в те времена ctrl-alt-del не вызывало окошко для логина, а ребутило систему без лишних вопросов :umnik1:
вот не надо, я ведь когда-то и на "Turbo C" писал ;)
чего не надо? трёхкнопочый ребут был насущной реальностью :pain1:
Don't code today what you can't debug tomorrow.
User avatar
Flash-04
Уже с Приветом
Posts: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Flash-04 »

я к тому что принцип "failing gracefully" был известен и тогда 8)
Not everyone believes what I believe but my beliefs do not require them to.
User avatar
rzen
Уже с Приветом
Posts: 24375
Joined: 18 Nov 2003 16:42

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by rzen »

Flash-04 wrote:я к тому что принцип "failing gracefully" был известен и тогда 8)
принцип то был известен, я не спорю :-)
Don't code today what you can't debug tomorrow.
User avatar
dotcom
Уже с Приветом
Posts: 9035
Joined: 25 Oct 2011 19:02
Location: SVO->ORD->SFO

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by dotcom »

Интеррапт wrote: Почему подход с GC не работает? В большинстве случаев работает. И при чем здесь дядя Бил или Sun? Не хотите работать в managed environment никто вам не мешает из этих языков native код вызывать или даже просто писать свои программы на Asm, C, C++.
Опять же, оно все хорошо только на словах, а когда дело доходит до практики, то кошмар нафиг. JNI например в ICS поменял правила игры. Падает с ошибками, что ошибки компиляции в STL покажутся сказкой. Хорошо, что сами ошибки уникальны и легко гуглятся. :D Но вобще вся эта дребедень с локальным и глобальным контекстами сделана ровно для того, чтобы убить любое желание писать нативный код.

Return to “Вопросы и новости IT”