一、GC分代假设绝大多数对象的生命周期都很短,存活时间短暂。所以GC算法首先关注的便是这些短命对象。对于负载不高的应用来讲,也不会发生fullGC的现象。这点提醒咱们,应尽量使对象生命周期缩短。有些程序员会尽量地减小new对象的次数,尝试减少堆的分配开销,减小内存碎片,但短命对象的建立在JVM中比咱们想象的性能要好,并且对象建立的速率越高,那么GC也会越快被触发!所以,吝啬new的使用是个不明智的选择。程序员
二、Java容器的一个特色就是能够动态扩展,因此一般咱们都不会去考虑初始大小的设置,不够了反正会自动扩容呗。可是扩容不意味着没有代价,甚至是很高的代价。对于不断增加的结构来讲,通过若干次扩容,会存在大量无用的老数组,而回收这些数组的压力,全都会加在GC身上。容器的扩容并非等到容器满了才扩容,而是有必定的比例。在Google Guava框架中咱们能够经过传入预估的大小,剩下的由Guava解决。算法
三、对于对象池,惟一合适的场景就是当池中的每一个对象的建立开销很大时,缓存复用才有意义。即便你真的须要实现一个对象池,也请使用成熟的开源框架,例如Apache Commons Pool。另外,使用JDK的ThreadPoolExecutor做为线程池,不要重复造轮子。数组