JVM Introduce
1. JVM The architecture of ( Memory model )

The green ones are private to threads , The orange ones are shared by threads
2. Class loader
Responsible for .class File loaded into memory , And convert the data structure in the file to the data structure in the method area , Generate a Class object

2.1 Classloader classification
- Self starting class loader .
Bootstrap ClassLoaderClass loader . Responsible for loadingjdkMy own bag .%JAVA_HOME%/lib/rt.jar%namely JDK Source code- Use
C++To write - Class loaders that directly obtain classes loaded by the loader appear in the program
null
- Extend the classloader .
Extension ClassLoader. Responsible for loadingjdkExtended packages- For future expansion
%JAVA_HOME/lib/ext/*.jar%
- Application class loader or system class loader .
AppClassLoader or SystemClassLOader- Loader for loading custom classes
CLASSPATHUnder the path
- Custom class loaders
- By implementing
ClassLoaderAbstract class implementation
- By implementing
2.2 Parent delegate mechanism
When the application class loader gets a class loading request , This class load request will not be processed immediately , Instead, delegate the request to his parent loader to load , If the parent loader cannot handle the class load request , It's passed on to the child loader . The class loader of this class can be loaded by passing instructions one level at a time .
This mechanism is also known as Sandbox security mechanism . Prevent developers from being aware of JDK Load to destroy

2.3 Break the parental delegation mechanism
- Custom class loaders , rewrite
loadClassMethod - Using the thread context class loader
2.4 Java Virtual machine entry file
sun.misc.Launcher class
3. Execution Engine
The execution engine is responsible for executing interpretation commands , Leave it to the operating system for specific execution
4. Local interface
4.1 native Method
native Method means Java Operations that cannot be handled by the level , Local function library can only be called through local interface (C function library )
4.2 Native Interface
A set of interface for calling function library
5. Native Method Stack
In the load native Method time , It will be carried out C Function library method , Put it in this stack area to execute
6. Program counter
Every thread has a program counter , The main function is to store code instructions , It's like an implementation plan .
Multiple pointers are maintained internally , These pointers point to the method bytecode in the method area . The execution engine gets the next instruction to execute from the program counter .
Because of the small space , It is a line number indicator of the code executed by the current thread /
Not trigger OOM
7. Method area
The area of runtime memory shared by threads , Store the structure information of each class ( One Class object ), Include : Field , Method , Construction method , Runtime constant pool .
although JVM The specification describes the method area as a logical part of the heap , But it also has an alias called Non-Heap( Non heap ), The purpose is to separate it from the pile
There are mainly : Permanent generation or meta space . There is GC
Due to the direct use of physical memory in meta space , So the default maximum meta space size is 1/4 Physical memory size
8. Java Stack
Mainly responsible for the implementation of various methods , Threads are private , With the death of threads , There's no garbage collection problem . The eight data types and instance references allocate memory in the stack memory of the function .
The default size is 512~1024K, adopt -Xss1024k Parameters change
8.1 Stack and queue data structures
Stack FILO: First in, then out
queue FIFO: fifo
8.2 Stored data
- The local variable
Local Variable. Include the formal parameters and return values of the method - Stack operation
Operand Stack. Including a variety of stack and stack out operations - Stack frame data
Frame Data. It's like one method after another . In stack space , Methods are called stack frames
8.3 Execute the process
The unit of execution in the stack is the stack frame , Stack frames are methods .
- First of all, will
mainMethod stack , Become a stack frame - Then we call other methods , That is to press the stack again
- A list of local variables for this method is stored in the stack frame , The stack of operands 、 Dynamic links 、 Method export, etc
- The size of the stack and JVM The realization of , Usually in
256K~756K

9. Method area , Stack , The relationship of heaps

10. Heap Pile up
10.1 Heap memory structure
The default initial size is physical memory 1/64, The default maximum size is 1/4. In actual production, these two values are usually set to the same , To avoid the space expansion calculation after the garbage collector completes garbage collection , Waste resources .
Out of heap memory : Memory objects are allocated in Java Memory outside the virtual machine's heap , This memory is directly managed by the operating system ( Not virtual machines ), The result of this is to reduce the impact of garbage collection on the application to a certain extent . Use undisclosed Unsafe and NIO It's a bag ByteBuffer To create out of heap memory .
The default out of heap memory size is , adopt -XX:MaxDirectMemorySize= The size of the memory outside the execution heap
10.1.1 JDK1.7

Logically divided into three areas :
- New Area
Young Generation Space.- Eden
Eden Space - Survival zone
Survivor 0 Space - Survival zone
Survivor 1 Space
- Eden
- Retirement area
Tenure Generation Space - The permanent zone
Permanent Space( Method area )
On the physical level, it's divided into two areas :
- New Area
- Old age area
10.1.1.1 Heap memory GC The process

There are three steps in the main process :
-
When
EdenWhen it's full, set off once light GC(Minor GC), There is no object of death , Age+1, Store infromArea -
When
EdenTrigger again when full againGC, No dead objects are placed intoArea , And thenfromAll objects that are not dead in the area are placed intoArea , Age+1. And then every time GC It's going to start oncefromandtoIn exchange for , Which area is empty and that area isto -
When
survivorWhen the area is full , Trigger again GC, When the age of the object is equal to15When , The object will be moved into the old age areaMaxTenuringThresholdThis parameter is used to set when the age is to move in
-
Trigger once when the old age zone is full
Full GC, If the elderly area can no longer store objects, report directlyOOM
Be careful : every time GC Will give the age of the surviving object +1
10.1.2 JDK1.8
and 1.7 comparison , It's just to replace forever with Meta space . The storage of meta space is built in Physical memory , instead of JVM in .
This kind of treatment , It can make the size of meta space no longer affected by the memory size of virtual machine , It is controlled by the space currently available in the system .
The ratio of the size of the new and old areas is 1:2, adopt -XX:NewRatio=n Set the ratio of the new generation to the old generation ,n Represents the proportion of the elderly area .
Eden Space and Survivor Space The default ratio between is 8:1, adopt -XX:SurvivorRatio Set the ratio of Eden to survivor
The logical level is layered :
- New Area
Young Generation Space- Eden
Eden Space - Survival zone
Survivor 0 Space - Survival zone
Survivor 1 Space
- Eden
- Old age area
Tenure Generation Space - Meta space ( Method area )
Physical stratification :
- New Area He occupied the pile 1/3
- Old age area He occupied the pile 2/3
10.2 Heap parameter tuning

10.2.1 Common heap parameters
| Parameters | effect |
|---|---|
| -Xms | Set the initial heap size , Default to physical memory 1/64 |
| -Xmx | Set maximum heap size , Default to physical memory 1/4 |
| -XX:+PrintGCDetails | Output detailed GC journal |
simulation OOM
// Set the maximum heap memory to 10m
//-Xms10m -Xmx10m -XX:+PrintGCDetails

Let's analyze it in detail GC What does the process do ,GC What do you think of the log
name :GC Used to occupy ->GC Then occupy ( Total occupancy )
//GC Allocation failed
GC (Allocation Failure)
[PSYoungGen: 1585K->504K(2560K)] 1585K->664K(9728K), 0.0009663 secs] //[ The new generation , Used to occupy -> Thread occupancy ( All free )] Heap usage size -> The heap is now the size of ( Total size )
[Times: user=0.00 sys=0.00, real=0.00 secs]
[Full GC (Allocation Failure)
[PSYoungGen: 0K->0K(2560K)]
[ParOldGen: 590K->573K(7168K)] 590K->573K(9728K),
[Metaspace: 3115K->3115K(1056768K)], 0.0049775 secs]
[Times: user=0.00 sys=0.00, real=0.01 secs]
11. Garbage collection algorithm
11.1 Garbage collection type
- Ordinary GC(
minor GC) It happened in the new area , Very frequent - overall situation GC
major GCGarbage collection in the old days , oncemajor GCOften accompanied at least onceMinor GC
11.2 Garbage collection algorithm classification
11.2.1 Reference counting
The main idea : Every time there is an object reference, add one to the object , When the reference to this object is zero , It triggers garbage collection . Generally not used
shortcoming :
- Every time you create a new object, you need to add a counter , More wasteful
- Circular references are more difficult to handle
11.2.2 Copy algorithm
The main idea : Make a direct copy of the object , Put it in other areas
advantage : No memory fragmentation
shortcoming : It takes up a lot of space
Use scenarios : The replication of the new area is performed by the replication algorithm . When Minor Gc in the future , A copy of the surviving object will be placed in to District
11.2.3 Tag clearing algorithm
The main idea : Traverse all references from the reference root node , Mark all objects that need to be cleaned up , And then clean up . Two steps to complete
shortcoming : During garbage collection, the whole code will be interrupted . Memory fragmentation will occur
11.2.4 Marking algorithm
The main idea : It's the same as the tag removal algorithm , Finally, a step is added to organize , Will defragment memory . Three steps to complete
shortcoming : Low efficiency , Need to move object .
11.3 Comparison of major garbage collection algorithms
11.3.1 Memory efficiency
Copy algorithm > Mark removal method > Mark up
11.3.2 Memory neatness
Copy algorithm = Mark up > Mark removal method
11.3.3 Memory utilization
Mark up = Mark removal method > Copy algorithm
11.3.4 Optimal algorithm
Using different algorithms through scenarios , To achieve the best purpose
The younger generation : Because the object's lifetime is , The mortality rate is high , So the replication algorithm is generally used
Old age : Large area , The survival rate is high , Generally, a hybrid algorithm of mark clearing and mark sorting is used .
The old age is generally realized by Mark clearing or the mixture of mark clearing and mark finishing . With hotspot Medium CMS Take the recycler for example ,CMS Is based on Mark-Sweep Realized , For the recovery efficiency of the image is very high , And for debris ,CMS The adoption is based on Mark-Compact Algorithm Serial Old As a compensation measure, the recycler : When memory recycling is not good ( Caused by debris Concurrent Mode Failure when ), Will adopt Serial Old perform Full GC In order to achieve the old generation of memory arrangement .
11.3.5 GCRoots
When we mentioned the mark removal algorithm above , A noun is mentioned , The root node references . So what is a root node reference ?
The root node reference also becomes GCRoots, It refers to the root node of the object traversal by garbage collection algorithm . That is, from this object to traverse down , Mark the object that needs to be recycled .
The process of garbage collection labeling is : With GCRoots Objects start to search down , If an object arrives GCRoots When there is no chain of references connected , Indicates that this object is not available .
It's from GCRoots Traversal , What can be traversed is not garbage , What is not traversed is garbage , Determine death
11.3.5.1 Reachable objects and unreachable objects
Accessibility object refers to , At the top of the object link reference is a GCRoot quote
An unreachable object means , At the top level of the object link reference is not a GCRoot quote

Popular explanation : Reachable objects are objects that have a attribution , This attribution has a term called GCRoot, Non reachable objects are those objects that don't belong .
11.3.5.2 What reference can be used as GCRoots
- Local variable references in the stack
- Static attribute reference in meta space
- Constant references in meta spaces
- Local method stack
nativeThe method of decoration
To put it bluntly , It's all the references exposed to developers
12. Garbage collector
The garbage collector is based on GC algorithmic .
There are four main types of garbage collectors , But there are seven ways to use it
12.1 Four garbage collectors
12.1.1 Serial garbage collector (Serial)
Single thread garbage collection , At this point, all other threads are suspended
adopt -XX:+UseSerialGC
12.1.2 Parallel garbage collector (Parallel)
Multithreading for garbage collection , At this point, all other threads are suspended
12.1.3 Concurrent garbage collector (CMS)
GC Thread and user thread run simultaneously
12.1.4 G1 Garbage collector
Partition garbage collection . Physically, there's no distinction between a new area and a retirement area , Divide heap memory into 1024 Small region, Every space occupied is in 2~32M, every last region It could be Eden Space、Survivor01 Space、Survivor02 Space and Old District .
The whole use of the mark collation algorithm , Local use of replication algorithm . By means of replication algorithm GC After the object from a region To the other region transfer , As for the memory fragmentation problem , Through the overall tagging algorithm , Avoid the birth of memory fragmentation
In the garbage collection, directly to a region To recycle , The saved objects are copied to TO District or Old District .
Logically, the heap has four zones , The size of each zone varies , Distribute on demand . It is divided into Eden Space,Survivor01 Space,Old and Humongous. among Humongous Used to store magnified objects , It's usually continuous storage , When because of continuity region When it's not enough , Will trigger Full GC Clean up the surroundings Region To save and enlarge objects
G1 Heap memory diagram

G1 Garbage collection

There's a big object , Three region Cannot be stored , Conduct FullGC

Execute the process
- Initial marker .GC Multithreading , Mark
GCRoots - Concurrent Tags . User threads and GC Threads are running at the same time .GC Thread traversal
GCRootsAll objects of , marked - Re label . Fix objects marked by concurrent tags , Because the user program calls again , And objects that need to be unmarked .GC Threads
- Screening and recovery . Clean up marked objects .GC Threads
- The user thread continues to run

12.1.4.1 Case study
- Initial marker . It's triggered by a large object G1

- Concurrent Tags

- Re label 、 Filter clean up and large objects
Full GC

12.1.4.2 G1 Common parameters
-XX:+UseG1GC Turn on GC
-XX:G1HeapRegionSize=n : Set up G1 The size of the area . The value is 2 The power of , The scope is 1M To 32M. The goal is based on the smallest Java The heap size is divided into about 2048 Regions
-XX:MaxGCPauseMillis=n : Maximum pause time , It's a soft target ,JVM Will try to ( But there's no guarantee ) The pause time is less than this time
-XX:InitiatingHeapOccupancyPercent=n Trigger when the heap is occupied GC, The default is 45
-XX:ConcGCThreads=n Concurrent GC Number of threads used
-XX:G1ReservePercent=n Set the percentage of memory reserved as free space , To reduce the risk of target space overflow , The default value is 10%
12.2 Common parameters
DefNew Default New Generation // Serial garbage collector , The new generation is called
Tenured Old // Serial garbage collector , It was called in the old days
ParNew Parallel New Generation // The next generation of parallel garbage collectors , The new generation is called
PSYongGen Parallel Scavenge // New and old generation garbage collectors , It's called
ParOldGen Parallel Old Generation // New and old generation garbage collectors , It's called
12.3 The new generation of garbage collectors

The picture above shows all kinds of garbage collectors that can be used in new and old areas , Let's explain one by one
12.3.1 Serial GC(Serial/Serial Coping)
The new generation Use Serial Coping Garbage collector use Copy algorithm
Old age area By default Serial Old Garbage collector , Use Mark clearing algorithm and mark sorting algorithm
adopt -XX:+UseSerialGC Set up

12.3.2 parallel GC(ParNew)
New Area Use ParNew Garbage collector , Using the replication algorithm
Old age area Use Serial Old Garbage collector ( This is not recommended ), Use the mark clearing algorithm and the mark collation algorithm
adopt -XX:+UseParNewGC start-up

12.3.3 Parallel recycling GC(Parallel/Parallel Scavenge)
The new generation Using parallel garbage collection
Old age Using parallel garbage collection .Java1.8 The default garbage collector used in
A problem :Parallel and Parallel Scavenge The difference between collectors ?
Parallel Scavenge The collector is similar to ParNew It's also a new generation of garbage collector , Using the replication algorithm , It is also a parallel multithreaded garbage collector , Commonly known as throughput first collector .
parallel Scavenge It's an adaptive collector , The virtual opportunity collects performance monitoring information according to the current system operation , Dynamically adjust these parameters to provide the most appropriate Teton time or maximum throughput
His focus is :
Controllable throughput . throughput = Run user code time /( Run user code time + Garbage collection time ),
meanwhile , When the new generation chooses to be Parallel Scavenge When , By default, the old age zone will be activated to use parallel garbage collection
adopt -XX:UseParallelGC perhaps -XX:UseParallelOldGC The two will activate each other

-XX:ParallelGCThreads=n Indicates how many to start GC Threads
cpu>8 when N=5 perhaps 8
cpu<8 when N= The actual number
12.4 Old garbage collector
12.4.1 Serial garbage collector (Serial Old/Serial MSC)
Serial Old yes Serial Old generation version of garbage collector , It's a single threaded collector , Use Marking algorithm , Running on the Client The old generation garbage collection algorithm in
And the new generation of Serial GC Related to
12.4.2 Parallel recycling (Parallel Old/Parallel MSC)
Parallel Old/ use Marking algorithm Realization
And the new generation of Parallel Scavenge GC Related to
12.4.3 Concurrent tag removal GC
CMS The collector (Concurrent Mark Sweep Concurrent tag removal ): A collector that aims to obtain the shortest recovery pause time
Suitable for Internet sites or B/S On the server of the system , Pay attention to the response speed of the server
CMS Very suitable for heaps with large memory 、CPU More core server applications , It's also G1 Prior to the advent of the preferred collector for large applications
When marking ,GC Thread running ; When cleared, run with the user thread
adopt -XX:+UseConcMarkSweepGC Command on
coordination In the new district pallellal New GC The recycler uses
When CMS because CPU When the pressure is too high to use SerialGC As a backup collector

12.4.3.1 CMS Execution process
- Initial marker (
CMS initial mark). Traverse to find all theGCRoots.GCThreads execute , User thread pause - Concurrent Tags (
CMS concurrent mark) Traverse with the user threadGCRoots, Mark the objects that need to be cleared - Re label (
CMS remark). Fix marking period , Fix objects that do not need to be recycled because the user program continues to run - Concurrent elimination (
CMS concurrent sweep) Clear all marked objects with user threads

12.4.3.2 Advantages and disadvantages
advantage :
- Concurrent collection low pause
shortcoming :
- Concurrent execution , Yes CPU There's a lot of pressure on resources
- Using mark clearing algorithm will lead to a large number of memory fragments
12.5 Garbage collector summary
| Parameters (-XX:+……) | The new generation of garbage collectors | New generation algorithm | Old garbage collector | Old age algorithms |
|---|---|---|---|---|
| UseSerialGC | SerialGC | Copy algorithm | Serial Old GC | Mark whole |
| UseParNewGC | Parallel New GC | Copy algorithm | Serial Old GC | Mark whole |
| UseParllelGC | Parallel Scavenge GC | Copy algorithm | Parallel GC | Mark whole |
| UseConcMarkSweepGC | Parallel New GC | Copy algorithm | CMS and Serial Old GC | Standard definition |
| UseG1GC | Mark the whole | Local copy |
General logic of garbage collection algorithm

12.6 CMS and G1 The difference between
- G1 Does not cause memory fragmentation
- G1 Precise control of memory , It can collect garbage accurately . By setup GC Processing time to collect the most garbage area
13. JMM
java Memory model . It's a norm .
When a thread is manipulating variables , First copy a copy from physical memory to your working memory ( Stack memory ), Write to physical memory after updating
characteristic :
- Atomicity
- visibility
- Orderliness

For more original articles and tutorials, please pay attention to The official account of the same name @MakerStack

