Что лучше часто использовать в объектах: Vector2f или 2 с плавающей точкой

#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. Большое вам спасибо за ссылку, а также за информацию, особенно за совет придерживаться объектов. Полезно знать, что это не будет иметь большого значения.