2018年5月15日
摘要: volatile内存语义 + 结果可见性。对于volatile的读写都是看成直接对mem的读写,而不是对本地cache的读写。 volatile语义的实现。 + 禁止编译器的相关重排序 + 禁止CPU指令重排序 这两步需同时保证,否则无法保证volatile语义。对于编译器所禁止的指令重排序: + 阅读全文
posted @ 2018-05-15 10:34 还好可以改名字 阅读(678) 评论(0) 推荐(0) 编辑
  2018年5月4日
摘要: 背景 为什么JDK5要引入泛型,泛型保证参数类型一致性。什么叫类型一致? 假设有继承关系,A list; list.add(new C()); list.add(new D()); list.add(new B());//compile ERROR 并没有破坏list的类型一致性,因为list被声明 阅读全文
posted @ 2018-05-04 09:46 还好可以改名字 阅读(4143) 评论(0) 推荐(0) 编辑
  2018年5月2日
摘要: 偏向锁 JVM默认开启偏向锁。在对象头中锁标志前一位用来标记偏向锁是否可用。 锁标记01表示偏向锁。 偏向锁释放 获得偏向锁的线程,在对象头中写有线程id,不会主动释放锁: 没有其他线程竞争,对象头中始终是获得锁的tid。 线程tid2竞争,此时objhead中仍存着tid1。JVM首先安全暂停ti 阅读全文
posted @ 2018-05-02 21:24 还好可以改名字 阅读(1633) 评论(0) 推荐(0) 编辑
  2018年4月24日
摘要: 程序的加载和链接是内核完成的吗 知道Linux有fork和exec系统调用,可以创建新进程和执行可执行的文件,fork就是内核自己数据结构的维护,可以理解,那么exec指定一个文件之后,怎么加载文件和动态链接? Interpreter 内核在执行ELF文件的时候,把执行文件映射到用户空间内存 在EL 阅读全文
posted @ 2018-04-24 23:22 还好可以改名字 阅读(357) 评论(0) 推荐(0) 编辑
  2018年4月12日
摘要: 指针是C语言中就有的,引用在Cpp中才有的特性。 一,指针int* a 这个语句的含义是分配空间。1,分配多大的空间?指针就是为了保存地址的,所以分配的空间大小是一个word(以32bitCPU为例,那么就是4个Byte)。不论指针指向的类型,指针都是保存的一个地址,double* a, Struc 阅读全文
posted @ 2018-04-12 22:08 还好可以改名字 阅读(370) 评论(0) 推荐(0) 编辑