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 ClassLoader
Class loader . Responsible for loadingjdk
My 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 loadingjdk
Extended packages- For future expansion
%JAVA_HOME/lib/ext/*.jar%
- Application class loader or system class loader .
AppClassLoader or SystemClassLOader
- Loader for loading custom classes
CLASSPATH
Under the path
- Custom class loaders
- By implementing
ClassLoader
Abstract 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
loadClass
Method - 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
main
Method 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
Eden
When it's full, set off once light GC(Minor GC
), There is no object of death , Age+1
, Store infrom
Area -
When
Eden
Trigger again when full againGC
, No dead objects are placed into
Area , And thenfrom
All objects that are not dead in the area are placed into
Area , Age+1
. And then every time GC It's going to start oncefrom
andto
In exchange for , Which area is empty and that area isto
-
When
survivor
When the area is full , Trigger again GC, When the age of the object is equal to15
When , The object will be moved into the old age areaMaxTenuringThreshold
This 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 GC
Garbage collection in the old days , oncemajor GC
Often 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
native
The 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
GCRoots
All 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
.GC
Threads 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