Я программирую приложение компьютерной графики в 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?
-
Предположительно, и это короткие объекты, и я прочитал, что сборщик мусора должен повторно потребовать их быстро. Однако я все еще беспокоюсь об этом. Как GC знает, что я быстро выброшу его? Так запутанно.
Итак, в общем, мой вопрос заключается в том, как сделать этот getPixelRGB более дружественным к памяти? также я должен даже беспокоиться об этом?