Skip to main contentdfsdf

Jason Zhao's List: Java 基础

  • Sep 10, 14

    "immutable : Java Glossary"

    • Java 语言中的泛型基本上完全在编译器中实现,由编译器执行类型检查和类型推断,然后生成普通的非泛型的字节码。这种实现技术称为 擦除(erasure)(编译器使用泛型类型信息保证类型安全,然后在生成字节码之前将其清除)
    • 泛型不是协变的

    2 more annotations...

      • $("strong").css('background-color','#fff').css('font-weight','normal').css('color','#4b4b4b')

    • 通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设

    23 more annotations...

    • 使用 Class.forName 载入指定的类,然后调用 getDeclaredMethods 来获取这个类中定义了的方法列表
    • 第一步是获得你想操作的类的 java.lang.Class 对象

    6 more annotations...

    • Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,并转换成 java.lang.Class类的一个实例。每个这样的实例用来表示一个 Java 类。通过此实例的 newInstance()方法就可以创建出该类的一个对象。
    • 引导类加载器

    8 more annotations...

    • HashMap不是线程安全的,因此如果在使用迭代器的过程中有其他线程修改了map,那么将抛出ConcurrentModificationException,这就是所谓fail-fast策略
    • 在迭代器初始化过程中会将这个值赋给迭代器的expectedModCount

    4 more annotations...

    • 当size>=容量*加载因子大于或等于table.length,容量扩大一倍
    • 1.根据key的hash值(hashCode()),到HashMap提供的hash方法里面加工一下(这里暂时这么理解)

       
      复制代码
       
          static int hash(int h) {         // This function ensures that hashCodes that differ only by         // constant multiples at each bit position have a bounded         // number of collisions (approximately 8 at default load factor).         h ^= (h >>> 20) ^ (h >>> 12);         return h ^ (h >>> 7) ^ (h >>> 4);     }
       
      复制代码
       

            这是一段神奇的代码~表示看不懂,你们可以深入研究。参数h为对象hashcode()方法返回值。

       

       

       

        2.取到加工后的hash码后然后根据indexFor()方法取到index(这里可以说是hash算法的核心,所有操作的基于它的。)

       
       
          static int indexFor(int h, int length) {         return h & (length-1);     }
      • Hash算法的核心!!看看就好==

    1 more annotation...

    • 当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题
    • 如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存

    11 more annotations...

    • 1、静态集合类引起内存泄露:
       像HashMap、Vector等的使用最容易出现内存泄露,这些静态变量的生命周期和应用程序一致,他们所引用的所有的对象Object也不能被释放,因为他们也将一直被Vector等引用着
      • 用WeakReference,比如WeakHashMap

    • 2、当集合里面的对象属性被修改后,再调用remove()方法时不起作用。
      • 如果集合中的元素类型重载了hashcode()方法,并且修改的属性影响了hashcode的值,这样remove()就不会起作用!

    5 more annotations...

    • 栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类 型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄
      • 栈:速度快、可共享、生存期确定、不灵活
        堆:动态分配大小、灵活、存取速度慢

    • 就是存在栈中的数据可以共享

    2 more annotations...

1 - 14 of 14
20 items/page
List Comments (0)