El lenguaje de programación Java y la plataforma Java ha sido criticada por elecciones de diseño en el lenguaje y la plataforma, incluyendo la implementación de generics, programación orientada a objetos forzada, la administración de números sin signo, la implementación aritmética de punto flotante, y una historia de vulnerabilidades de seguridad en la implementación Java VM, HotSpot. Además, el software escrito en Java, especialmente sus versiones tempranas, ha sido criticado por su rendimiento comparado al software escrito en otros lenguajes de programación. Desarrolladores también han remarcado que hay diferencias en varias implementaciones de Java que tienen que ser tomadas en cuenta cuándo se está escribiendo complejos programas de Java que tiene que ser utilizado a través de estas implementaciones.[1]
Cuando la programación genérica fue añadida a Java 5.0, ya había un marco grande de clases (muchos del cual era ya deprecated), así que generics estuvo escogido para ser implementado utilizando tipo erasure para permitir la compatibilidad de migración y re-uso de estas clases existentes. Esto limitó las características que podría ser provistas por esta adición cuando comparado a otros lenguajes.[2][3]