14. cmsG1
jvm
SerialParNewParallel Scavenge
Serial OldParallel OldCMS
G1[]
Serial + Serial Old; ParNew + CMS; Parallel Scavenge + Parallel Old
Parallel
ConcurrentCPU
jdkjava -XX:+PrintCommandLineFlags -version
JDK7u4JDK7uJDK8-XX:+UseParallelGCXX:+UseParallelOldGCjdk8
Parallel Scavenge() + Parallel OldPS + PO
SerialCPUClientCPUSerial
Serial OldSerial-ClientServerJDK 1.5Parallel ScavengeCMSConcurrentMode Failure
ParNewSerialSerialStop The WorldSerialServerSerialCMS
ParNewCPUSerialCPUSerialCPUGCCPUCPU-XXParallelGCThreads
ParNewParallel ScavengeCMS
Parallel ScavengeCMSParallel ScavengeThroughputCPUCPU=/+100199%CPUParallel Scavenge
Parallel Scavenge-XXMaxGCPauseMillis-XXGCTimeRatio
MaxGCPauseMillis0GC300MB500MB101005
70
GCTimeRatio010019GC5%1/1+19991%1/1+99
Parallel Scavenge-XX+UseAdaptiveSizePolicy-XmnEdenSurvivor-XXSurvivorRatio-XXPretenureSizeThresholdGCParallel ScavengeParNew
Parallel OldParallel Scavenge-JDK 1.6
CMSConcurrent Mark SweepJDK 1.5HotSpotConcurrent
CMSJDK 1.4.0Parallel Scavenge[1]JDK 1.5CMSParNewSerial
STWGC4
CMS initial markSTW
CMS concurrent markGC RootsTracing
CMS remarkSTW
CMS concurrent sweepGC
CMS3
CMSCPUCPU
CMSFloating GarbageConcurrent Mode FailureFull GCCMSCMSGCCMSCMSConcurrent Mode FailureSerial Old-XXCMSInitiatingOccupancyFractionConcurrent Mode Failure
CMSFullGCCMS-XX+UseCMSCompactAtFullCollectionCMSFullGC
G1Garbage-FirstGCG1
G1GC
G1
GCG1G1JavaJavaRegionRegion
CMSG1RegionG1GC
G1G1RegionRegionGarbage-First
soft real-timeG1G190%
G1(Region)512 Byte(Card)(Global Card Table)(RSet)
https://blog.csdn.net/fedorafrog/article/details/104503829/
G1RegionRemembered SetG1RegionRemembered SetReferenceWrite BarrierReferenceRegion
CardTableRegionRemembered SetGCRemembered Set
Remembered SetG1
Initial Marking:GC RootsTAMSNext Top at Mark Start
Region;
Concurrent Marking:GC Root;
Final Marking:Remembered Set LogsRemembered Set LogsRemembered Set
Live Data Counting and Evacuation:RegionGCSunRegion,STW;
G1OracleG1G1G1G1G1
CMSG1
remarkD
1.
2.
incremental updateCMS
SATB snapshot at the beginning> GCGCG1
satb satb
SATB write barrier BBAStop The World G1 Remark Stop The World CMSremark write barrier CMS remark CMS remark
http://www.javashuo.com/article/p-yjwwjukv-gk.html
G1SATBincremental update
incremental update
G1RSetSATBCard TableRSetRSetRSet
> >pushRSetSATBRSet
https://blog.csdn.net/fedorafrog/article/details/104503829/
15. JVM
-Xms:1/64
-XmxMaxHeapSize:1/480%
cpu
-XX:NewSize-Xns
-XX:MaxNewSize-Xmn
-XssStack Space,512K
-XX:NewRatio:3131/4
-XX:SurvivorRatio:EdenSurvivorSurvivor8Survivor :eden=2:8Survivor1/10
-XX:+HeapDumpOnOutOfMemoryError
-XX:MaxTenuringThreshold:0
-XX:OnOutOfMemoryErrorOOM-XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p%pid pid
-XX:PermSize-XX:MaxPermSize:Java8
-XX:MetaspaceSize-XX:MaxMetaspaceSize:Java8
-XX:+UseSerialGC:
-XX:+UseParallelGC:
-XX:+UseParalledlOldGC:
-XX:+UseConcMarkSweepGC:
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename
-XX:ParallelGCThreads=n:CPU
-XX:MaxGCPauseMillis=n:
-XX:GCTimeRatio=n:1/(1+n)
-XX:+CMSIncrementalMode:CPU
-XX:ParallelGCThreads=n:CPU
16. JVM
stop the worldjavafull gcSTW
mimor gcssurviorGC.
arthasjmapjmap -histoJmap
17. Object o = new Object()
16
markword8classpoint4Instance data128Padding416
markword8classpoint8Instance data16
18. HotSpot
javalength
https://www.jianshu.com/p/d42ac3ab41f7
MarkWordClass Pointer
MarkWord
328641612markword
:32bit/64bit32bit25bit4bit2bit1bit0
markOopsynchronized[synchronized]
ClassPointer:Class324648
Length:4
()
:doublelong
(Padding)
JVMHotSpot88
-XX:+UseCompressedOops JVMlasspointer
19.
Student s = new Student();
Student.class
s
s
20.
cpucpucpucpucpu() -
cpu(L1,L2,L3) CPUcpu
CPU
(Memory Barrier)
CPUCPUL1,L2,L3CPU
Load Barrier Store Barrier
:
(Store Barrier)
1.cpu
2./
volatile
volatilevolatile
volatile
,,,volatile
volatilevolatile++
volatilevolatilemesicpucpucpu
https://www.jianshu.com/p/76959115d486