LINUX.ORG.RU

openjdk и флаги компилятора

 ,


0

1

Кто-нибудь пробовал скомпилировать openjdk с оптимизацией по размеру (-os). Памяти меньше будет кушать? Или размер ява-объектов не зависит от того, как компилировали jdk?

P.S. Я не нищеброд, у меня 16 GB RAM

★★★★★

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

om-nom-nimouse ★★
()
Ответ на: комментарий от om-nom-nimouse

Не важно, какого размера код (файл .class), а важно, сколько памяти будут занимать объекты, когда они создадутся. Ну, может, создается 100500 стандартных java-объектов, каждый из которых будет меньше занимать (хотя, сомнительно, т.к. размеры по крайней мере стандартных типов типа Integer не зависят от компилятора).

michwill ★★★★★
() автор топика

Очень сомнительно, размер объекта и так достаточно мал и оптимизирован.

maloi ★★★★★
()
Ответ на: комментарий от michwill

Поясню ещё раз: то, с какими параметрами создавать объекты при загрузке байт-кода, определяется логикой VJM, а не клчами, с которыми она была откомпилирована. Эти ключи влияют только на размер кода самой VJM.

om-nom-nimouse ★★
()

Размер зависит от параметров запуска самой программы. Для экономии смотрите -client (безопасно) или -Xmx (может упасть если переборщить)

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

Для экономии смотрите -client (безопасно) или -Xmx (может упасть если переборщить)

вы переотмечали, похоже, дорогой мой.

maloi ★★★★★
()
Ответ на: комментарий от vertexua

1) -client ничего не далает в 64-х битной яве

2) -client никак не влияет на размер одного объекта, меньше памяти он жрет за счет более простого jit-компилятора.

3) -Xmx никак не влияет на размер одного объекта, это просто ограничение на количество используемой памяти.

итого первая опция никак не влияет на размер, занятый объектами - только на размер, занятый кодом, вторая - не влияет на размер объектов, которые в данный момент используются программой, влияет только на размер объектов, не собранных GC (потому что именно его и ограничивает)

maloi ★★★★★
()
Ответ на: комментарий от maloi

-client ничего не далает в 64-х битной яве

Ну тогда ничего и не поделаешь

-client никак не влияет на размер одного объекта, меньше памяти он жрет за счет более простого jit-компилятора.

-Xmx никак не влияет на размер одного объекта, это просто ограничение на количество используемой памяти.

Верно, никогда и не говорил ничего о одном обьекте. Просто java разгуляется на меньшем поле

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

На самом деле, она у меня одинаково разгуливается на разных -Xmx. Просто если его значение слишком мало, падает.

В общем, ничего не поделаешь - это ява

michwill ★★★★★
() автор топика
Ответ на: комментарий от michwill

Если она обьективно не влезла, то упала. А если mx большой, то она просто дольше будет не собирать мусор. Сжать можно много софта по настоящему за счет более частого gc

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 1)
Ответ на: комментарий от vertexua

А, так вот почему у меня нет разницы - я принудительно вызываю gc в определенные моменты, когда кучи мусора должны образовываться...

michwill ★★★★★
() автор топика

На 64х битных системах можно менять размер используемых указателей с помощью опции -XX:+UseCompressedOops.

nerh
()
Ответ на: комментарий от vertexua

Не делайте так

А чем чревато? Ну, кроме потери производительности (это происходит в среднем раз в 20 минут, так что вроде не страшно)

michwill ★★★★★
() автор топика
Ответ на: комментарий от michwill

full gc достаточно дорогостоящее удовольствие. А если у вас обычный билд openjdk, то gc там и так работает и собирает (по крайней мере должен) все без вашего вмешаетльства.

nerh
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.