jvm简单介绍和使⽤jdk的jvisualvm查看
年轻代和⽼年代
jvm的堆内存被分为2部分:年轻代和⽼年代
年轻代:
这⾥是所有新对象产⽣的地⽅.当年轻代内存空间被⽤完的时候就会触发垃圾回收.这个垃圾回收叫做Minor(年轻的) GC.年轻代被分为3个部分------Enden(终点)区和2个Survivor(幸存)区.
1. ⼤多数新建的对象都位于Eden区
2. 当Eden区满了就会Minor GC将不再被其他对象引⽤的对象进⾏销毁,然后把存活下来的对象移动到⼀个survior区.
3. 如果这个survior区也满了就会再次Minor GC
,并将剩下存活的对象转移到另⼀个survivor区.这样在⼀段时间内总会有⼀个空闲的survivor区.
4. 经过多次GC周期后,仍然存活下来的对象会被转移到⽼年代内存空间.通常这是在年轻代有资格提升
到⽼年代前通过设定年龄阈值来完
成的.
⽼年代:
⽼年代内存⾥包含了长期存活的对象和经过多次Minor GC后依然存活下来的对象,通产会在⽼年代内存被沾满的时候进⾏来回收.
GC种类
⽼年代GC-----Major GC
⽼年代的垃圾回收叫做Major GC,Major GC通常是跟full GC等价的,收集整个GC堆.
分代GC
Young GC :只收集年轻代的GC
Old GC: 只收集年⽼代的GC (只有CMS的concurrent collection是这个模式)
Mixed GC :收集整个young gen以及部分的old gen的GC(只有G1有这个模式)
Full GC
Full GC定义就很明确,就是针对整个新⽣代,⽼年代,元空间(metaspace,java8以上版本取代perm gen)的全局范围的GC.
使⽤JDK⾃带的jvisualvm分析jvm
⾸先肯定要安装jdk环境的,这⾥就不说怎么安装了.
直接cmd命令⾏中敲jvisualvm就出来了.(我是windows环境mac也是⼀样的)
⾄于左边哪个pid才是⾃⼰的java进程呢,我是wondows,可以在cmd中使⽤netstat -ano | findstr "你的tomcat端⼝"到那个pid,然后双击后,点击监视就可以查看信息了
同时jvisualvm还可以安装插件,⽐如visual gc
在⼯具插件中安装visual gc,直接下⼀步下⼀步安装完
然后关闭当前的标签,重新双击左边对应的pid进程,会发现多出来⼀个visual gc的标签,通过这个插件就可以很形象的看到⽼年代,年轻代及年轻代中的Eden区和2个survior区了
jdk怎么使用
点击file然后open head dump,就是打开之前dump下来的那个⽂件
打开之后是这样的
问题它都帮我们分析出来了