Все проблемы с производительностью должны решаться в первую очередь путем профилирования (как для времени, так и для использования памяти / объектов).Не оптимизируйте вещи, которые не влияют на производительность вашего кода.С этим предупреждением существуют некоторые общие практические правила (которые все должны быть проверены профилированием!)
1) Когда я должен использовать многомерные массивы вместо вложенных коллекций?
Если вам не нужно динамическое определение размера коллекций и вам не нужно передавать данные в то, что требует коллекции, тогда многомерные массивы (собственно массивы) могут быть быстрее.
2) Векторы и списки массивов - действительно ли разница в производительности?
Да.Многие методы в векторе синхронизированы, что дорого.Если вы не многопоточны, тогда избегайте Vector.Даже если это так, детализация синхронизации обычно неправильна, и вам лучше обеспечить безопасность потоков самостоятельно.
3) Делайте API-интерфейсы коллекций подобными коллекциям Google, трюкам Java (например, отражению и приведению)и другие распространенные идиомы разработчика Java, как правило, замедляют JVM, когда он находится под большой нагрузкой?
Отражение медленное;сборка мусора идет медленно.Все, что вы можете сделать, чтобы избежать этого, ускорит процесс.
4) Замедляют ли примитивы или обычные объекты (например, Double против Double) JVM при выполнении большого количества вычислений?
Да.Автобокс / распаковка может очень быстро создать огромное количество мусора.Все это нужно собрать, что также замедлит вашу программу.
5) Существуют ли другие важные рекомендации для работы с большими коллекциями в программах Java, которые должны быть высокопроизводительными?
Предпочитать переменные локального метода доступу к полю.Вы можете найти много других рекомендаций, выполнив поиск в Интернете.Но главное - это профиль.
Редактировать: Здесь есть хорошая коллекция подсказок по производительности здесь .