Java >> Java tutorial >  >> JVM

JVM-lager til statiske medlemmer

1. Oversigt

I vores daglige arbejde er vi ofte ligeglade med JVM's interne hukommelsesallokering.

Men kendskab til det grundlæggende i JVM-hukommelsesmodellen er nyttigt for ydeevneoptimering og forbedring af kodekvaliteten .

I denne artikel vil vi udforske JVM-lagring for de statiske metoder og medlemmer.

2. JVM's hukommelsesklassifikation

Før vi går i dybden med hukommelsesallokering for de statiske medlemmer, skal vi genopfriske vores forståelse af JVM's hukommelsesstruktur.

2.1. Heap Memory

Heap-hukommelse er runtime-dataområdet, der deles mellem alle JVM-tråde for at allokere hukommelse til alle klasseforekomster og arrays.

Java klassificerer heap-hukommelse i to kategorier – Young Generation og Old Generation.

JVM adskiller internt den unge generation i Eden og Survivor Space. På samme måde er Tenured Space det officielle navn på den gamle generation.

Et objekts livscyklus i heap-hukommelsen styres af et automatisk hukommelsesstyringssystem kendt som en skraldeopsamler.

Derfor kan affaldsopsamleren automatisk enten deallokere et objekt eller flytte det i de forskellige sektioner af heap-hukommelsen (ung til gammel generation).

2.2. Ikke-heap-hukommelse

Non-heap-hukommelse består primært af et metodeområde, der gemmer klassestrukturer, felter, metodedata og koden til metoder/konstruktører .

I lighed med Heap-hukommelsen har alle JVM-tråde adgang til metodeområdet.

Metodeområdet, også kendt som Permanent Generation (PermGen), betragtes logisk som en del af Heap-hukommelsen, selvom de mere simple implementeringer af JVM måske vælger ikke at samle det af affald.

Men Java 8 fjerner PermGen-rummet og introducerer et nyt indbygget hukommelsesrum ved navn Metaspace .

2.3. Cachehukommelse

JVM'en reserverer cachehukommelsesområdet til kompilering og lagring af native kode, såsom JVM interne strukturer og native kode produceret af JIT compileren.

3. Opbevaring af statiske medlemmer før Java 8

Før Java 8 gemmer PermGen statiske medlemmer som statiske metoder og statiske variable. Derudover gemmer PermGen også interne strenge.

Med andre ord, PermGen space gemmer variablerne og deres tekniske værdier, som kan være primitiver eller referencer.

4. Opbevaring af statiske medlemmer fra Java 8 og videre

Som vi allerede har diskuteret, er PermGen plads erstattet med Metaspace i Java 8, hvilket resulterer i en ændring for hukommelsesallokering af de statiske medlemmer.

Siden Java 8 gemmer Metaspace kun klassens metadata, og heap memory holder de statiske medlemmer . Desuden giver heap-hukommelsen også opbevaring til interne strenge.

5. Konklusion

I denne korte artikel udforskede vi JVM-lagring for statiske medlemmer.

Først tog vi et hurtigt kig på JVM's hukommelsesmodel. Derefter diskuterede vi JVM-lagring for statiske medlemmer før og efter Java 8.

Kort sagt ved vi, at de statiske medlemmer var en del af PermGen før Java 8 . Men siden Java 8 er de en del af heap-hukommelsen .


Java tag