¿Cómo se implementa ThreadLocal de Java bajo el capó?

¿Cómo se implementa ThreadLocal? ¿Está implementado en Java (usando algún mapa concurrente de ThreadID al objeto), o usa algún gancho JVM para hacerlo de manera más eficiente?