Мне нужно создать пространственный эффективный 2D-массив для большого количества 8-битных значений. Я начал писать свой класс, используя несколько слоев абстракции и дженериков для повторного использования кода. Как только я добрался до реализации конкретного класса, мне пришло в голову, что я не могу передать примитивный тип как общий аргумент класса, и мне пришлось бы использовать класс-оболочку. Потому что я обеспокоен экономией пространства, мне нужно знать: , что разница эффективности пространства междуByte
массивом с помощью класса-оболочки по сравнению с примитивнойbyte
массива?Сравнение эффективности использования пространства байтов/байтов Java
ответ
Да, примитивы являются легкими по сравнению с соответствующими объектами класса Wrapper.
Вы можете прочитать об этом здесь: Primitives vs Wrappers
Спасибо, Гиораш, я пытался это сделать одновременно. Мне все еще нужно знать, как создавать ссылки на этом сайте! – IndoKnight
Просто нажмите на значок земли, вставьте свою ссылку, подтвердите и заполните описание между скобками – giorashc
@INdoknight см. FAQ для этого. –
Наблюдать этот другой вопрос: Wrappers of primitive types in arraylist vs arrays
Большая проблема с двойным против Double, что последние добавляют некоторое количество служебной памяти - 8 байтов на объект на 32-битной JVM Sun, возможно, более или менее на других. Затем вам понадобится еще 4 байта (8 на 64-разрядной JVM) для обращения к объекту.
Таким образом, если предположить, что у вас есть 1,000,000 объекты, различия заключаются в следующем:
двойной [1000000]
8 байт на запись; всего = 8000000 байт
Двойной [1000000]
16 байт на экземпляр объекта + 4 байта в качестве ссылки; всего = 20 000 000 байт
Независимо от того, зависит ли это от вашего приложения. Если вы не исчерпали память, предположите, что это не имеет значения.
Accroding к http://www.javamex.com/tutorials/memory/object_memory_usage.shtml
байт [] размер ~ = 12 + длина
Байт [] размер ~ = 12 + 20 * длина (20 = 16 + 4 размер 1 объекта Байт + 4 байта)
поэтому, байт [] может занимать в 20 раз больше памяти, чем байт []. Это на самом деле максимум, это зависит от того, как вы создаете байт. новый байт всегда является новым объектом, Byte.valueOf всегда является кешированным экземпляром. Это также зависит от CPU, для x64 каждая ссылка занимает 8 байтов.
Я не знаю, кэшируются ли объекты Byte или просто целые числа, но даже если бы они не были такими, я бы подумал, что для любого размера 'Byte' array можно использовать статический' Byte [256] 'для хранения экземпляр каждого значения; накладные расходы для этого будут фиксированы в ~ 4096 байт, каждый массив 'Byte []', в котором используются кэшированные экземпляры, обычно занимает 4 байта на запись. – supercat
Это 4 байта для каждой ссылки на объект Byte, который равен 16 байтам. Что касается кеширования, это зависит от того, как вы его создаете. новый байт всегда является новым объектом. –
@Evgeniy Dorofeev: Ссылка содержит 8 байтов на 64-битной JVM без сжатых ООП. – maaartinus
- 1. Сравнение эффективности
- 2. Java - Сравнение эффективности двух алгоритмов O (n)
- 3. Сравнение эффективности алгоритма сортировки
- 4. Сравнение эффективности запросов
- 5. Java Рекурсивный анализ эффективности
- 6. F # Сравнение эффективности функции сглаживания
- 7. Расчет эффективности использования газа
- 8. Пространства имен C++, сравнение с пакетами Java
- 9. сравнение эффективности Java с точки зрения распределения памяти
- 10. сравнение эффективности алгоритмов кластеризации в quickminer
- 11. сравнение эффективности алгоритма различных биномиальных коэффициентов
- 12. Элегантность против эффективности | java
- 13. повышение эффективности метода java
- 14. Запуск Java в среде использования рабочего пространства?
- 15. Сравнение строк без использования String.compareTo в Java
- 16. Влияние эффективности использования оператора в модульном тесте
- 17. Влияние эффективности использования «break» внутри «for-loop»
- 18. Каковы последствия эффективности использования «Использование» на sqlConnections
- 19. Condense JSON для эффективности использования полосы пропускания
- 20. Влияние эффективности использования поля NTEXT в SSIS
- 21. Влияние эффективности использования соединений на разные схемы
- 22. Улучшение эффективности сита кода эратосфена в java
- 23. Последствия эффективности анонимного класса Java
- 24. Измерение эффективности рефакторинга Java-метода
- 25. Схема эффективности эффективности
- 26. Анализ эффективности использования протобовых строителей в качестве общего объекта данных
- 27. сравнение использования libtomcrypt
- 28. Эффективность Эффективности Эффективности Файла iOS
- 29. Вопросы эффективности
- 30. Почему сравнение обычно считается основной операцией при оценке эффективности алгоритма?
но зачем использовать дженерики по 8-битным значениям? Какова цель разных типов, если вы явно сохраняете 8-битные значения? – giorashc
@giorashc Возможно, я захочу позже хранить 'объекты' или' ints' одним и тем же уникальным способом. В настоящее время я храню 8-битные значения. 2D-массив представляет собой конкретную реализацию хранилища, но управление доступом к структуре данных уникально. –