Introduce some concepts about JVM.
Runtime data area
- Method area
class descriptor
class loaded once only,Class.forName("xxx")
shared by threads - Heap
objects and arrays
shared by threads - Java stack
each thread needs a stack
each process has one thread at least - Native method stack
native methods - Program counter register
JVM memory
- Heap
- Young
Eden space
Survivor-0 space
Survivor-1 space - Old
Old generation space
- Young
- Non-heap
Meta space
Code cache
Compressed class space
Monitors
jvisualvm
Open
1$> jvisualvm // open jvisualvmPlugin
Tools –> Plugins –> visual gc –> install
- jconsole
mem: heap and non-heap - jmap 123$> jmap -heap pid // show heap info$> jmap -permstat pid // show permnent space info$> jmap -clstats pid // show class loader info
Modify heap
Debug --> Debug Configurations --> Arguments --> VM arguments
`-Xms` --> set heap initial size (1/64 mem size)[`-Xms300m`]
`-Xmx` --> set heap max size (1/4 mem size)[`-Xmx300m`]
`-Xmn` --> set young space size (eden + s0 + s1)[`-Xmn150m`]
`-XX:NewSize` --> set young space size [`-XX:NewSize=150m`]
`-XX:MaxNewSize` --> set young space max size [`-XX:MaxNewSize=150m`]
`-XX:PermSize` --> set permnent space size [`-XX:PermSize=150m`]
`-XX:MaxPermSize` --> set permnent space max size [`-XX:MxPermSize=150m`]
---------
young space : old space = 1 : 2
eden : survivor = 3 : 1