Categories
  • Java platform
  •   Encyclosphere.org ENCYCLOREADER
      supported by EncyclosphereKSF

    Heap pollution

    From Handwiki - Reading time: 2 min

    In the Java programming language, heap pollution is a situation that arises when a variable of a parameterized type refers to an object that is not of that parameterized type.[1] This situation is normally detected during compilation and indicated with an unchecked warning.[1] Later, during runtime heap pollution will often cause a ClassCastException.[2]

    Heap pollution in Java can occur when type arguments and variables are not reified at run-time. As a result, different parameterized types are implemented by the same class or interface at run time. All invocations of a given generic type declaration share a single run-time implementation. This results in the possibility of heap pollution.[2]

    Under certain conditions, a variable of a parameterized type may refer to an object that is not of that parameterized type. The variable will always refer to an object that is an instance of a class that implements the parameterized type.

    Heap Pollution in a non-varargs context

    public class HeapPollutionDemo
    {
        public static void main(String[] args)
        {
            Set s = new TreeSet<Integer>();
            Set<String> ss = s;              // unchecked warning
            s.add(new Integer(42));          // another unchecked warning
            Iterator<String> iter = ss.iterator();
    
            while (iter.hasNext())
            {
                String str = iter.next();    // ClassCastException thrown
                System.out.println(str);
            }
        }
    }
    

    Further reading

    References




    This article is licensed under CC BY-SA 3.0.
    Original source: https://handwiki.org/wiki/Heap pollution
    Status: article is cached
    Encyclosphere.org EncycloReader is supported by the EncyclosphereKSF