#java #object #memory #vector #floating-point
#java #объект #память #вектор #с плавающей запятой
Вопрос:
В настоящее время я работаю над некоторым кодом для своих элементов графического интерфейса, и во время работы над кодом для определения того, находится ли мышь внутри элемента, у меня возникла мысль об эффективности не только сейчас, но и в будущем. В настоящее время я использую Vector2f как для измерений, так и для положения из-за простоты передачи их в функции и из функций с вызовами таких функций, как getDimensions, которые просто возвращают Vector2f и так далее. Однако мой вопрос заключается в том, расточительно ли я использую векторы в целом и Vector2f в частности. Лучше ли иметь два поплавка внутри моих объектов для x и y и два для ширины и высоты или иметь два вектора, один для положения и один для размеров.
Основная проблема заключается в том, что создание векторных объектов занимает больше места, чем просто использование примитивных float. Я посмотрел на источник классов Vector2f и 3f в поисках идей, и они кажутся очень легкими, но, поскольку я очень мало знаю о том, сколько памяти занимают разные объекты и как все это определяется, я бы попросил тех, кто мог бы намного легче понять проблему.
Заранее благодарю вас за любые ответы!
Комментарии:
1. Вы пробовали какие-либо измерения?
2. Предположим, у вас есть 1000 элементов GUI (что уже много), и у каждого есть 2 экземпляра Vector2f. Объект имеет 8 байт служебных данных. Это означает, что в общей сложности 1000 * 2 * 8 байты накладных расходов. 16 КБ памяти — это абсолютно ничего.
3. Я никогда не пытался проводить какие-либо измерения и понятия не имею, как это сделать 358, но если бы я это сделал, это было бы первое, что я бы сделал, так что спасибо! И JB спасибо за информацию. Такие вещи, как накладные расходы, — это то, чего я не знал, и причина, по которой я спросил здесь!
Ответ №1:
Общий ответ: придерживайтесь объектов, поскольку они делают ваш код читаемым.
Если вам действительно нужно сэкономить память, прочитайте Обзор методов экономии памяти в Java (автор Михаил Воронцов). Массивы потребляют 12 байт плюс их длина, умноженная на размер их элемента . Обертки занимают 12 байт дополнительно к базовому типу.
В вашем случае:
- Vector2f: 16 байт
- float[2]: 16 байт
- 2 поплавка: 8 байт
Комментарии:
1. Большое вам спасибо за ссылку, а также за информацию, особенно за совет придерживаться объектов. Полезно знать, что это не будет иметь большого значения.