资料内容:
1, java堆,分新生代老年代,新生代有Eden,from surviver,tosurviver 三个空间,堆被所有线程共。 eden 内存不足时,发生一次minorGc,会把from survivor和eden的对象复制到to survivor,这次的to survivor就变成了下次的from survivor,经过多次minor GC,默认15次,达到次数的对象会从survivor进行老年代。1次new如果新生代装不下,则直接进入老年代。
2 , HashMap和 HashTable是使用数组+链表结构实现,根据Hash和table长度计算数组的下标index做操作, hashMap默认数组长度为16, hashMap对null值的key都放在table[0]的位置,table[index]形成1个链表,当然在新版jdk中链表节点数>8会变成红黑树结构。hashMap达到最大数量会扩容,扩容table长度变为2倍,每个元素(table中)但重新计算index放到新的table中。
3,堆的年轻代和老年代。
堆的年轻代大则老年代小,GC少,但是每次时间会比较长。年轻代小则老年代大,会缩短每次GC的时间,但是次数频繁。可以让老年代尽量缓存常用对象,JVM默认年轻代和老年代的大小比例为1:2,。观察峰值老年代内存,不影响full Gc,加大老年代可调1:1,但是要给老年代预留三分之一的空间。减少使用全局变量和大对象﹐调整新生代,老年代到
最合适。