Тест производительности на Java VM против .NET CLR

Хорошее ole USING :

SELECT Name, lastName, address, p.conID, postNum, region FROM people p
INNER JOIN countries USING (conID);

37
задан informatik01 30 May 2015 в 22:32
поделиться

6 ответов

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

Однако, что касается языка, в C # действительно есть несколько более низкоуровневых конструкций, чем в Java, что допускает большую оптимизацию.

Такие конструкции, как:

  • Типы значений, определяемые пользователем. Быстро выделяется, никаких накладных расходов на память (что составляет 12 байтов на ссылочный тип как в CLR, так и в JVM, если я правильно помню). Полезно для вещей, которые естественным образом выражаются в виде значений, например векторов и матриц. Итак, математические операции. Объедините это с ref и out , чтобы избежать чрезмерного копирования этих типов с большими значениями.

  • Небезопасные блоки кода, которые позволяют немного более "близкую к металлу" оптимизацию. Например, в то время как CLR и JVM могут избежать проверки границ массива в некоторых ситуациях, во многих случаях они не могут, и каждый доступ к массиву требует проверки, находится ли индекс по-прежнему в границах массива. Использование небезопасного кода позволяет вам напрямую обращаться к памяти массива с помощью указателей и обходить любые проверки границ. Это может означать значительную экономию. А на очень низком уровне есть также stackalloc , который позволяет размещать массивы непосредственно в стеке, тогда как обычный массив размещается в куче, что медленнее, но также удобнее. Лично я не знаю каких-либо практических приложений stackalloc .

  • Истинные дженерики, в отличие от дженериков Java со стиранием типов, избегают ненужного преобразования типов и упаковки. Но если это проблема вашей Java-программы, это можно легко решить с помощью дополнительной работы (переключение, например, с ArrayList на пользовательский тип, который внутренне использует буфер int [] .)

Это все кажется предвзято относящимся к C #, и я действительно думаю, что C # имеет более качественные языковые конструкции низкого уровня, которые могут помочь с производительностью. Однако я сомневаюсь, что эти различия действительно имеют значение (и они могут даже не применяться в вашем случае, использование указателей ничего не даст вам, если все, что вы делаете, это доступ к базе данных, где Java может быть быстрее), если выбор мешает вам каким-либо другим способом (например, кросс-платформенный). Выбирайте правильность, платформу, которая соответствует вашим требованиям, а не незначительные различия в производительности.

к пользовательскому типу, который внутренне использует буфер int [] .)

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

к пользовательскому типу, который внутренне использует буфер int [] .)

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

использование указателей ничего не даст вам, если все, что вы делаете, это доступ к базе данных, где Java может быть быстрее), если выбор мешает вам каким-либо другим способом (например, переходить на кросс-платформу). Выбирайте правильность, платформу, которая соответствует вашим требованиям, а не незначительные различия в производительности.

использование указателей ничего не даст вам, если все, что вы делаете, это доступ к базе данных, где Java может быть быстрее), если выбор мешает вам каким-либо другим способом (например, переходить на кросс-платформу). Выбирайте правильность, платформу, которая соответствует вашим требованиям, а не незначительные различия в производительности.

35
ответ дан 27 November 2019 в 03:51
поделиться

К вашему сведению, вам конкретно не разрешается использовать код .NET framework для любой формы тестирования производительности без предварительного обращения в Microsoft и получения их одобрения.

Если вы действительно хотите опубликовать что-то, я подумал, что я дала бы вам знать.

По памяти MS сделала кое-что из книжного магазина, зоомагазина, что Java сделала первой, чтобы продемонстрировать, как их программное обеспечение может работать более эффективно с той же задачей. Я пытаюсь придумать это.

.NET Pet Store

1
ответ дан 27 November 2019 в 03:51
поделиться

Да, есть тестовая игра, она хороша исчерпывающий и позволяет сравнивать множество разных вещей.

http://shootout.alioth.debian.org/

Единственное, что он использует моно вместо визуальной студии, но разница в производительности между ними сейчас очень мала .

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

1
ответ дан 27 November 2019 в 03:51
поделиться

Я также подумал, что даст лучшую производительность. Но понятия не имею, как я могу провести тест производительности для этого.

Итак, хороший вопрос - надеюсь, мы все получим здесь какое-то руководство.

Я полагаю, что это эталонное тестирование должно быть подходом эталонного тестирования «со скидкой» (легко установить и запустить 1 разработчиком)?

У кого-нибудь есть такая информация, было бы здорово. Меня часто просят оценить технологии самостоятельно в короткие сроки.

Отличный bunn_online!

1
ответ дан 27 November 2019 в 03:51
поделиться

Тесты ... Практически все можно проверить с помощью теста, который соответствует вашим потребностям.
Кроме Чака Норриса. Чак Норрис будет медленнее и быстрее Х, если он того пожелает.

Еще один момент. Допустим, вы пришли к выводу, что Java быстрее. Означает ли это, что через 2 года он все еще будет быстрее?

Если Java на 5% быстрее, а .NET на 10% легче работать, что бы вы выбрали?
Есть много факторов, и производительность - лишь один из них. И если различия небольшие (я думаю, что они есть), то, вероятно, не самое главное.

Если вы не создаете что-то, что очень важно для производительности.

1
ответ дан 27 November 2019 в 03:51
поделиться

убедительное сравнение производительности между Java VM и .Net CLR - несбыточная мечта. Вы всегда можете провести тест производительности, в результате которого один будет выглядеть лучше другого, поскольку разработка сложной системы всегда предполагает компромиссы. Если сузить тип бенчмарков до скорости выполнения и памяти, можно найти статьи вроде этой: http://www.codeproject.com/KB/dotnet/RuntimePerformance.aspx это далеко не конец дискуссии.

3
ответ дан 27 November 2019 в 03:51
поделиться
Другие вопросы по тегам:

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