包装类型
• Float 和 Double 不会有缓存,其他包装类都有缓存。
• Integer 是唯一一个可以修改缓存范围的包装类,在 VM optons 加入参
数:-XX:AutoBoxCacheMax=666 即修改缓存最大值为 666 。
Short 类型 -1 之后转换成了 Int 类型
Integer.valueOf(10) 则会使用缓存池中的对象。
default 同包 protect同包及子类
clone()方法 浅拷贝 对象里的引用类型指向同一个
深拷贝 实现cloneAble接口 重写clone()方法
java1.8 接口 方法前加default 可以有默认实现
基类是Throwable类,两大子类分别是
Error 虚拟机异常 内存溢出、系统崩溃
Exception
RuntimeException(运行时异常): 程序运行过程中出现错误,才会被检查的异常。例如:类型错误转换,数组下标访问越界,空指针异常、找不到指定类等等。
CheckedException(检查异常):非运行时异常都是检查异常,编译器会强制检查并通过try-catch块来对其捕获,或者在方法头声明该异常,交给调用者处理。IOException
string + 反编译后可以看到 是用stringBuilder ,每次拼接都会创建一个stringBuilder对象,占用资源
stringBuffer append、insert等方法加了同步锁,包装线程安全
arrayList
new 一个空参 ArrayList 的时候,系统内部使用了一个 new Object[0]数组
add
第一次添加的时候会将当前elementData数组的长度变为10
如果当前的数组已使用空间(size)加1之后 大于数组长度,则增大数组容量,扩大为原来的1.5倍
System.arraycopy新建一个数组,把旧数组的值复制到新数组
add(int index, E element)方法
指定位置后面的数组元素全部重新移动,即往后移动一位。
remove
循环遍历所有对象,得到对象所在索引位置,先将index后面的元素往前面移动一位(调用System.arraycooy实现),然后将最后一个元素置空
AQS
https://blog.csdn.net/mulinsen77/article/details/84583716
队列是先进先出,而堆栈是先进后出
内存泄漏就是内存申请后,用完没有释放,造成可用内存越来越少。
数据库连接、网络连接、io连接未关闭
内存溢出指用户实际的数据长度超过了申请的内存空间大小
1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据;
2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;
3.代码中存在死循环或循环产生过多重复的对象实体;
4.内存值设定的过小。