Java OutOfMemoryError: comportamiento extraño

El siguiente programa (prog1) arroja el error OutOfMemoryError. Con razón Pero si agrego sysout debajo de la línea 5 (prog2), no arrojará un error. ¿Alguna razón para este extraño comportamiento?

prog1:

public static void main(String[] args) {
    List<String> myList = new ArrayList<>();     
    try {
        while (true) {
            myList.add("My String"); //5
            }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

prog2:

public static void main(String[] args) {
    List<String> myList = new ArrayList<>();        
    try {
        while (true) {
            myList.add("My String");
            System.out.println(myList);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Respuesta 1

¿Cómo se puede hacer esto en iText? Tengo un PDF con una firma de un cliente. Necesito agregar una respuesta ocsp a los atributos sin firmar. Sé cómo cambiar la firma en sí usando org.bouncycastle ...

Tengo el requisito de escribir un mensaje en el MQ y si falla por algún motivo, tengo que escribir ese mensaje en el archivo de texto. Tengo que seguir agregando los mensajes a este archivo de texto hasta que ...

Estoy tratando de invocar un método usando el método de reflexión mi = TestInterface.class.getMethod ("TestMethod", java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang. Object []. Class); ...

Tengo dicho elemento <xsd: element name = "Car" type = "carType" /> <xsd: complexType name = "carType"> <xsd: complexContent> <xsd: extension base = "basicType"> & ...