In Java, un Semaphore
è implementato interamente in Java. Ciò significa che non ci sono risorse native da ripulire una volta che non è più necessario. Può essere ripulito come normali oggetti Java.
In Java, è necessario Closeable
dove c'è una risorsa nativa che è associata all'oggetto Java su heap. per esempio. file Stream o socket. Queste risorse esterne sono più costose e limitate degli oggetti nell'heap e potrebbero esaurirsi molto tempo prima che un GC venga attivato e le abbia ripulite.
Nota: un GC non è sufficiente per ripulire queste risorse, anche il thread in background che li chiude deve essere eseguito per liberare tali risorse. In HotSpot / JVM c'è un thread di Finalizer che chiude queste risorse e se alcune sono lente a chiudersi può portare alla carenza di risorse.