Java >> Java tutorial >  >> Tag >> HashMap

keySet()-metoden i HashMap kunne være terser

Caching til en lokal variabel udføres for at forbedre ydeevnen. Den genererede bytekode er mindre, feltet læses én gang, og derfor kan en cache-miss kun forekomme én gang, og nogle andre ting.

Dette er en ganske avanceret optimering og bør kun udføres på meget ofte kørende stykker kode. Grunden til, at det blev anvendt her, er sandsynligvis fordi HashMap blev skrevet i Java 1.2, da JIT var meget grundlæggende, og derfor havde ting som disse en betydelig indflydelse.

I dette tilfælde er det også gjort for at understøtte multi-threaded adgang.HashMap er ikke synkroniseret, men den kan deles via sikker udgivelse, hvis den ikke ændres senere. Hvis to tråde udfører metoden samtidigt, kan der opstå en racetilstand:den første læste i if(keySet == null) kunne læse en nyere værdi skrevet af en anden tråd og den anden læses i return keySet; læs den ældre (null ) værdi. Brug af en lokal variabel sikrer, at if og return brug den samme reference, når den ikke er nul. Så den kan aldrig returnere null .


Java tag