Определение набора основных правил для высокопроизводительных структур данных (java)

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

Однако в последнее время я обнаружил необходимость довести производительность Java до предела для некоторых алгоритмов, которые я использую.

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

Я ищу для общих правил, но в этом контексте также могут быть очень полезны ответы на следующие вопросы:

1) Когда мне следует использовать многомерные массивы вместо вложенных коллекций?

2) Векторы vs.ArrayLists - действительно ли разница в производительности?

3) Имеют ли API-интерфейсы коллекций, такие как коллекции Google, трюки Java (такие как отражение и приведение) и другие распространенные идиомы Java-разработчиков, замедляют работу JVM, когда она находится под большой нагрузкой?

4) Замедляют ли примитивы по сравнению с обычными объектами (например, двойные или двойные) JVM при выполнении большого количества вычислений?

5) Существуют ли другие важные рекомендации по работе с большими коллекциями в java-программах, которые должны быть высокопроизводительными?

  • Примечание: на данный момент я не использую многопоточность ... Я понимаю, что есть и другие ограничения, которые могут возникнуть, когда я начну распараллеливать.
11
задан Cœur 15 April 2017 в 16:25
поделиться