JVM调优

2019-05-10  本文已影响0人  万物归于简

JVM内存结构

image.png image.png

每起一个线程,都会在栈内存中开辟一块专属于该线程的空间,该线程每调用一个方法就会启动一个栈帧

方法区在JDK8中改名叫永久区,存放Class文件,静态变量,常量,常量池等。

堆内存

image.png

大小比例: eden:s1:s2 = 8:1:1 ,new:old = 1:3 或者 3: 8
这些比例可以配置的

  1. 新创建(new)的对象如果特别大,则直接放入老年代区(tenured),否则放入eden区
  2. 当进行gc时,将eden区和s1中的垃圾清理后,将s1整个复制到s2中,eden区存活的对象也复制到s2;下次gc时进行清理后,将s2整个复制到s1,并且eden区存活的对象复制到s2,如此反复
  3. 若有对象一直在s1和s2中反复移动,到达一定次数后,则从新生代移动到老年代

对象的分配

image.png

对象分配的过程:

  1. 创建对象时,若对象很小,则直接在分配在线程的栈空间的栈帧中(方法调用),好处是当方法结束或线程结束,则对象的内存可直接回收,不需要垃圾收集器进行回收
  2. 若线程栈帧中分配不下,则会在线程本地缓存分配,即TLAB
  3. 若线程本地缓存放不下,且对象特别大,则放入老年代,否则放入eden区

垃圾

image.png

Java采用正向可达的算法

image.png image.png image.png image.png image.png

新生代采用复制算法:存活对象少,效率高
老年代采用标记压缩算法:

JVM参数

image.png image.png image.png image.png image.png

垃圾收集器

image.png
上一篇 下一篇

猜你喜欢

热点阅读