Как уменьшить количество объектов, созданных в Scala?

m программирование приложения для компьютерной графики в Scala, которое использует класс RGB для возврата цвета в точке изображения. Как вы можете себе представить, функция, которая возвращает объект RGB цвета, вызывается много раз.

class RGB(val red: Int, val green: Int, val blue: Int) { }

Есть функция getPixelRGB, которая часто используется следующим образом

val color:RGB = getPixelRGB(image, x, y)

Проблема в том, что я могу вызывать эту функцию миллион раз, что, как я полагаю, сгенерирует миллион уникальных экземпляров объектов RGB, что является очень непривлекательной ситуацией. У меня есть некоторые мысли по этому поводу:

getPixelRGB может потенциально создать бесконечное количество объектов, если его вызывать бесконечное количество раз, но это не обязательно должно быть бесконечное количество объектов, поскольку существует только максимум 255 * 255 * 255 возможных комбинаций, которые могут быть созданы для RGB. Итак, количество созданных объектов »должен" быть конечным. Эту функцию можно настроить так, чтобы она использовала пул объектов, в котором она должна возвращать тот же цвет, что и некоторое время, прежде чем она могла бы вернуть тот же экземпляр объекта пула для этого цвета.

Я мог бы закодировать этот RGB как Int. Int будет иметь меньшую нагрузку на память, чем обычный объект Scala / Java, объекты Java будут иметь дополнительную нагрузку на память. Поскольку тип Scala Int имеет ширину 4 байта, первые 3 байта могут хранить значение RGB. Я полагаю, что только возврат Int, а не RGB из метода getPixelRGB, потребует меньше памяти. Однако, как сделать это, все еще имея убеждение класса RGB?

Предположительно, и они являются недолговечными объектами, и я прочитал, что сборщик мусора должен быстро повторно запросить их. Однако я'Я все еще беспокоюсь об этом. Откуда ГК знает, что яЯ выбрасываю это быстро? Так запутанно.

Итак, в общем, мой вопрос, как сделать этот getPixelRGB более дружественным к памяти? также я должен даже волноваться об этом?

Ответы на вопрос(5)

Ваш ответ на вопрос