jvm基础:
https://www.cnblogs.com/clamp7724/p/11750764.html
调优这方面- -其实除了架构师基本用不到,知道基本原理和简单的调优就可以了。。。
调优一般是调优
方法区 和 堆
方法区: 存放方法的信息(变量,常量,类信息,运行时常量池等)
堆(GC发生在这里): 存放对象实例
1.堆
1.1 新生代区
1.1.1 伊甸区 (西方神话人类起源地-。-)
1.1.2 survivor from (幸存者from区)
1.1.3 survivor to (幸存者to区)
1.2 老年代区
内存比例:
新生代:老年代 = 1 : 2
伊甸区:survivor from :survivor to = 8:1:1
GC机制: (survivor from 和 survivor to 直接写成from 和 to)
1. 一个对象实例A被声明后进入堆的新生代伊甸区
2. 根据GC策略(比如GC发现没有指向A的变量了,或者伊甸区满了等),A进入from区
3. from满了以后,触发Miner GC(轻GC),把from区的一部分幸存者数据放到 to区,2区互换(A还是在from区,只不过是之前的to区),清的to区(之前的老from区,没被复制到to区的都被清空了= =)。新来的开始进入新from区。
4. 新from区满了以后,重复以上步骤,15次(jvm默认次数)后, A还活着的话就会进入老年区。
6.当老年代区也满了以后,会产生full GC, jvm会停掉所有线程(STW: stop the world),开始全面清理垃圾。
如果A的占用空间非常大,为了防止过度频繁的轻GC(幸存者区会很快满。。。),会直接把A放到老年区。
GC的调优主要就是改变这几个区域的空间大小比例,还有GC策略,减少full GC
1区,2区 一般叫叫 from survivor 和 to survivor