Загрязнение кучи (heap pollution) происходит, когда переменная параметризованного типа ссылается на объект, который является не того совместимого типа, который объявлен в переменной. Это возможно из-за стирания (type erasure) в Java.
В типичном случае, это происходит при работе с дженериками и массивами или varargs.
Пример загрязнения кучи:
java
Другой пример с varargs:
java
Последствия загрязнения кучи проявляются в виде ClassCastException при извлечении элементов несовместимого типа. Компилятор выдает предупреждения (@SafeVarargs) для методов, которые могут вызывать загрязнение кучи при использовании varargs. Использование аннотации @SafeVarargs или @SuppressWarnings("unchecked") указывает на осознанное игнорирование предупреждения при уверенности в безопасности кода.
Для предотвращения загрязнения кучи следует избегать смешивания несовместимых типов при работе с ковариантными массивами и проявлять осторожность при использовании varargs параметризованных типов. Предпочтительнее использовать коллекции вместо массивов при работе с дженериками.