Быстрый вопрос об оптимизации Java

Поместите достаточно бизнес-логики в базе данных, чтобы гарантировать, что данные последовательны и корректны.

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

9
задан Pascal Cuoq 3 October 2009 в 21:56
поделиться

3 ответа

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

Длинный ответ: не будет, потому что он не может знать, быстрее ли битовый сдвиг, чем умножение на платформе, код в конечном итоге будет Бег. Таким образом, вопрос скорее должен заключаться в том, заменит ли конкретная виртуальная машина умножение битовым сдвигом, и, вероятно, так оно и будет. Я немного поэкспериментировал с этим, чтобы оптимизировать блок кода, и интересно, что Sun ' s Hotspot показывает здесь разное поведение, в зависимости от того, работает ли программа на AMD или на процессоре Intel (по крайней мере, с процессорами, которые я тестировал). В любом случае умножение со степенью двойки заменяется битовым сдвигом, но для умножения со степенью двойки +/- 1 (3, 5, 7, 9, 15, 17, ...) Hotspot будет генерировать битовый сдвиг и сложение или вычитание для процессоров Intel, а для процессоров AMD - умножение, поскольку процессор AMD выполняет умножение намного быстрее, чем процессор Intel. Конечно, возможно, что это поведение различается между разными моделями ЦП от каждого поставщика.

Если вам интересно знать, что на самом деле делает виртуальная машина, будет весьма полезно получить отладочную сборку jdk7 и разрешить дамп ассемблера. код, сгенерированный компилятором Hotspot.

в зависимости от того, работает ли программа на AMD или на процессоре Intel (по крайней мере, с процессорами, которые я тестировал). В любом случае умножение со степенью двойки заменяется битовым сдвигом, но для умножения со степенью двойки +/- 1 (3, 5, 7, 9, 15, 17, ...) Hotspot будет генерировать битовый сдвиг и сложение или вычитание для процессоров Intel, а для процессоров AMD - умножение, поскольку процессор AMD выполняет умножение намного быстрее, чем процессор Intel. Конечно, возможно, что это поведение различается между разными моделями ЦП от каждого производителя.

Если вам интересно знать, что на самом деле делает виртуальная машина, будет весьма полезно получить отладочную сборку jdk7 и разрешить дампы ассемблера. код, сгенерированный компилятором Hotspot.

в зависимости от того, работает ли программа на AMD или на процессоре Intel (по крайней мере, с процессорами, которые я тестировал). В любом случае умножение со степенью двойки заменяется битовым сдвигом, но для умножения со степенью двойки +/- 1 (3, 5, 7, 9, 15, 17, ...) Hotspot будет генерировать битовый сдвиг и сложение или вычитание для процессоров Intel, а для процессоров AMD - умножение, поскольку процессор AMD выполняет умножение намного быстрее, чем процессор Intel. Конечно, возможно, что это поведение различается между разными моделями ЦП от каждого производителя.

Если вам интересно знать, что на самом деле делает виртуальная машина, будет весьма полезно получить отладочную сборку jdk7 и разрешить дампы ассемблера. код, сгенерированный компилятором Hotspot.

умножение со степенью двойки заменяется битовым сдвигом, но для умножений со степенью двойки +/- 1 (3, 5, 7, 9, 15, 17, ...) Hotspot будет генерировать битовый сдвиг и сложение или вычитание для процессоров Intel при генерации умножения для процессоров AMD, поскольку процессор AMD выполняет умножение намного быстрее, чем процессор Intel. Конечно, возможно, что это поведение различается между разными моделями ЦП от каждого поставщика.

Если вам интересно знать, что на самом деле делает виртуальная машина, будет весьма полезно получить отладочную сборку jdk7 и разрешить дамп ассемблера. код, сгенерированный компилятором Hotspot.

умножение со степенью двойки заменяется битовым сдвигом, но для умножений со степенью двойки +/- 1 (3, 5, 7, 9, 15, 17, ...) Hotspot будет генерировать битовый сдвиг и сложение или вычитание для процессоров Intel при генерации умножения для процессоров AMD, поскольку процессор AMD выполняет умножение намного быстрее, чем процессор Intel. Конечно, возможно, что это поведение различается между разными моделями ЦП от каждого поставщика.

Если вам интересно знать, что на самом деле делает виртуальная машина, будет весьма полезно получить отладочную сборку jdk7 и разрешить дамп ассемблера. код, сгенерированный компилятором Hotspot.

Hotspot будет генерировать битовый сдвиг и сложение или вычитание для процессоров Intel, а для процессоров AMD - умножение, поскольку процессор AMD выполняет умножение намного быстрее, чем процессор Intel. Конечно, возможно, что это поведение различается между разными моделями ЦП от каждого поставщика.

Если вам интересно знать, что на самом деле делает виртуальная машина, будет весьма полезно получить отладочную сборку jdk7 и разрешить дамп ассемблера. код, сгенерированный компилятором Hotspot.

Hotspot будет генерировать битовый сдвиг и сложение или вычитание для процессоров Intel, в то же время генерируя умножение для процессоров AMD, поскольку процессор AMD выполняет умножение намного быстрее, чем процессор Intel. Конечно, возможно, что это поведение различается между разными моделями ЦП от каждого поставщика.

Если вам интересно знать, что на самом деле делает виртуальная машина, будет весьма полезно получить отладочную сборку jdk7 и разрешить дамп ассемблера. код, сгенерированный компилятором Hotspot.

35
ответ дан 4 December 2019 в 06:05
поделиться

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

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

9
ответ дан 4 December 2019 в 06:05
поделиться

В общем, вы не можете перехитрить JVM, если нет чего-то очень высокого , о котором вы знаете, что не может быть выведено автоматически. Обычно это означает, что доступен лучший алгоритм, чем тот, который используется в настоящее время, вместо того, чтобы вручную настраивать ваш источник. Вы можете использовать профилировщик jvisualvm, доступный в последней версии Java 6 JDK, чтобы исследовать вашу программу и увидеть, где находятся узкие места.

Например, затраты на создание новых объектов вместо повторного использования старых резко уменьшились за последние 10 лет, поэтому вы не должны следовать никаким старым советам по настройке вашей java-программы, не проверив, работает ли она до сих пор.

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

4
ответ дан 4 December 2019 в 06:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: