С помощью этого метода:оптимизация памяти пустой переменной длины
public void args(Class... methodArgsTypes) {
if (methodArgsTypes.length == 0) {
methodArgsTypes = NO_PARAMETERS; // public static Class[0] array
}
this.methodArgsTypes = methodArgsTypes;
}
когда метод вызывается без аргументов args()
, то Class[0]
создается. Поскольку значение methodArgsTypes
сохраняется в течение всего срока действия приложения (когда вы удаляете блок if
выше), имеет ли смысл иметь блок if
, как указано выше? Целью этого является предотвращение создания большого количества пустых массивов в памяти и сохранение ссылки только на один публичный статический пустой массив. Следовательно, меньше памяти.
Будет ли это иметь смысл?
Сколько из этих массивов нулевой длины создано во время жизни приложения? – wero
Это может быть много. Большинство методов не содержат аргументов, которые сканируются в этом прецеденте. – igr
Трудно сказать общий эффект без бенчмаркинга и измерения. К счастью для вас, это буквально трехстрочное изменение - почему бы просто не попробовать и не посмотреть? Кроме того, если вы вызываете это действительно как vararg (а не с явным 'Class []', который вы передаете vararg), вы можете создать простую перегрузку, которая использует NO_PARAMTERS const: 'public void args() { Args (NO_PARAMETERS); } '. – yshavit