堆:jvm最大的一块内存区域
- 堆空间组成?
老年代
新生代:幸存区 to from; 伊甸园区 Eden
永久代--方法区
结构如下图:自己多画几次就清楚了

image.png
注意! 方法区别名非堆,所以严格意义不属于堆了,已经淘汰的永久代和新的元空间是方法区的具体实现方式,这就是它们间的关系
jvm配置调优策略:
关于堆和非堆,
G1垃圾回收器:jdk8 被Oracle官方号称“全功能的垃圾回收器”,虽然当前和另两个垃圾回收器并存,但是推荐优选G1
理由:
- jdk9以及以后版本 告警CMS不推荐 日后HotSpot会让其推出舞台
- jkd9以及以后版本 G1为默认 代替Parallel
- HotSpot开发团队正在G1不断优化,有更加先进的回收思路 比如Mixed GC不再局限于哪个分区,而是整个内存哪个地方垃圾多,收益大;采用Region分区 效率更高 等等;
所以建议把使用G1作为一个好习惯,要主动贴合使用新的发展技术
几种GC:
FULL GC:整个java堆垃圾回收
Minor GC:整个新生代
Major GC:整个老年代
CMS:并发标记扫描 基于标记-清除算法
目标:响应时间最短,GC单次执行时间最短为目标;比如网站服务应用需要快速响应用户;
Parallel垃圾回收器:看重jvm吞吐量,
吞吐量=(用户代码执行时间)/(用户代码执行时间+垃圾回收用时)
类似于 物理的计算有用功的效率,只是从功变成了时间单位;真正有效的用户时间比例;