老年代为新生代做担保1.
准备在新生代进行minorGC时,首先检查“老年代“最大连续空间区域的大小是否大于新生代所有对象的大小。
2.
如果老年代能装下所有新生代对象,minorGC没有风险,然后进行minorGC。
3.
如果老年代无法装下,则虚拟机会先查看-XX:HandlePromotionFailure参数的设置值是否允许担保失败
(HandlePromotion Failure),如果允许,垃圾收集器则进行一次预测:根据以往minorGC过后存活对象的平均
数来预测这次minorGC后存活对象的平均数。
4.
GC垃圾回收器
串行垃圾回收器,为单线程环境设计,只能使用一个单独的线程进行垃圾回收,冻结所有应用程序,会产生较长
的停顿。
1.
并行垃圾回收器,jvm默认的垃圾回收器,它采用的是多线程回收垃圾,也会冻结其他应用程序。一般新生代采
用的是并行,老年代采用的是串行比较稳定。
2.
并发标记扫描垃圾回收器 CMS,以获取最短回收停顿为目标的收集器,主要用在一些互联网网站,B/S系统的服
务端上,重视服务的响应速度的。它是基于标记清除算法的,所以会产生大量空间碎片。
3.
G1垃圾回收器,会优先选择第一块垃圾最多的区域,使用标记整理算法,不会产生空间碎片。而且还可以预测
停顿的时间。
4.
集合
集合和数组的区别:
集合的长度是可变的,而数组的长度是不可变的
1.
数组存储的数据可以是基本数据类型,也可以是引用数据类型,而集合只能存储引用数据类型。
2.
数组存储的元素必须是同一个数据类型。而集合可以存储不同的数据类型。
3.
常用的集合类:
Map接口和Collection接口是所有集合的父接口
1.
Collection 接口的子接口有 Set 和 List
2.
Set 接口主要的实现类是:HashSet TreeSet LinkedHashSet等
3.
List 接口主要的实现类是:ArrayList LinkList Vector 等
4.
Map 接口实现的类主要有:HashMap,TreeMap Hashtable ConcurrentHashMap 等
5.
ArrayList:
ArrayLsit底层的数据结构是数组,就是我们对他的所有操作底层都是基于数组的,而它本质上就是一个
elementData动态数组,它区别于数组的地方在于能自动拓展大小,grow()方法,因为本质是数组,所以在数据
的通过下标查询方面会很快,时间复杂度是O(1),而通过for循环来遍历时,性能并不快,O(n).
1.
ArrayList在插入删除方面会很慢,因为arraylist底层时数组结构,数组不支持动态扩容,所以ArrayList 的扩容机
2.