1、HashMap 源码解读(TreeMap. LinkedHashMap)
hashmap 允许空值和空key, 非线程安全的,不保证存储顺序
初始容量和负载因子(0.75)
结构化改变,增加或者删除必须是同步的, 单纯的改变值不需要同步
获取遍历器的时候,多线程的结构的改变,不是通过遍历器的remove方法的结构改变,都是在遍历器的时候 抛出异常,但是这个不能保证,只能是测试使用
根据hashcode排序,相同comparable的根据comparable排序
treeNode是正常节点的2倍 .
树节点往往是根节点, iterator.remove才可能不是根节点,但是可以根据treenode.root恢复
容量必须是2的倍数,默认为16,最大为2^30
一个桶的元素>=8 就从list 变为 tree,<=6就从tree变为list
桶数量到64的时候里面的桶才会被树形化
4*8的元素在同一个节点的时候,会被重新更新size大小
hashBinNode hashCode是key和value的异或
2、heap 和 stack 的区别
stack: 先进后出
函数调用栈,有结构,查询快,线程独占的,存储引用和基本类型
heap:
先进先出,没有结构,查询慢,线程共享的,存储数值,等待垃圾回收
方法区, 存储static唯一变量, 被所有线程共享
java内存模型--JMM(Java Memory Model)
http://www.cnblogs.com/lewis0077/p/5143268.html
在并发编程中,多个线程之间采取什么机制进行通信(信息交换),什么机制进行数据的同步?
在Java语言中,采用的是共享内存模型来实现多线程之间的信息交换和数据同步的。
线程之间通过共享程序公共的状态,通过读-写内存中公共状态的方式来进行隐式的通信。同步指的是程序在控制多个线程之间执行程序的相对顺序的机制,在共享内存模型中,同步是显式的,程序员必须显式指定某个方法/代码块需要在多线程之间互斥执行。
Java的内存结构,也就是运行时的数据区域:
Java虚拟机在执行Java程序的过程中,会把它管理的内存划分为几个不同的数据区域,这些区域都有各自的用途、创建时间、销毁时间。
Java运行时数据区分为下面几个内存区域:
1.PC寄存器/程序计数器:
严格来说是一个数据结构,用于保存