三:JVM学习-内存分配以及回收策略
java技术体系中所提倡的自动内存管理最后可以归结为自动化解决两个问题:给对象分配内存以及回收分配给对象的内存,关于回收内存,上一篇已经说了很多JVM内部的垃圾收集器体系以及他运行的垃圾收集算法,现在我们在探讨一下给对象分配内存的时候需要注意的事项。 对象的内存分配,大的讲,就是在java heap上分配,对象主要分配在新生代的Eden空间上,如果启用了本地线程缓冲分配,那么将按照线程优先在TLAB上分配,少数情况也可能直接分配在老年代。但是分配的原则不是百分之百固定的,还要取决你采用的那种垃圾收集器的二组合,以及虚拟机中内存设置的相关参数。 1:对象优先在Eden上分配 大多数情况下,对象在新生代Eden区域中进行分配,档Eden区域中没有足够的空间进行分配的时候,发起一次Minor GC 注意提到的Minor GC和Full GC Minor GC:这就是新生代的GC,指的是新生的垃圾收集动作,由于java对象大多具有朝生夕死的特性,所以Minor GC非常频繁,一般回收速度也比较快。 Full GC:指的是发生在老年代的GC,又被称作Major GC,出现了Major GC,经常会伴随这至少一次的Minor GC,但这也不是绝对的,一般来说Major GC的速度会比Minor GC慢十倍以上。 2:大对象直接进入老年代