包装类型
    • Float 和 Double 不会有缓存,其他包装类都有缓存。
    • Integer 是唯一一个可以修改缓存范围的包装类,在 VM optons 加入参
    数:-XX:AutoBoxCacheMax=666 即修改缓存最大值为 666 。
    Short 类型 -1 之后转换成了 Int 类型
    image.png
    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.内存值设定的过小。