![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
qq_35516657
这个作者很懒,什么都没留下…
展开
-
关于jdk1.8的容器hashmap中的entrySet()函数实现。
因为没使用过这个函数就直接看hashmap的源码,所以我以为entrySet()函数返回的应该是个数组之类的东西。但是研究了半天也看不出来是这样实现的,下面贴出代码:public Set<Map.Entry<K,V>> entrySet() { Set<Map.Entry<K,V>> es; return (es = ...原创 2018-03-12 10:59:12 · 1461 阅读 · 0 评论 -
关于jdk1.8容器hashmap中的变量table加了transient修饰后如何序列化。Serializable
众所周知,transient修饰符的作用是使该变量在序列化的时候不会被储存。transient Node<K,V>[] table; 但是hashmap中的变量table是储存了容器中所有的元素,在序列化中不被储存,那么反序列化后hashmap对象中岂不是个空容器? 后来通过细想,table里存的只是引用,就算在序列化中储存到硬盘里,反序列化后table变量里的引用...原创 2018-03-12 11:13:24 · 1923 阅读 · 0 评论 -
《深入理解java虚拟机》笔记---------------------JVM内存区域
Java虚拟机运行时数据区域:1.程序计数器a) 类似于计算机组织原理中PC计数器。b) 线程私有。c) 唯一一个没有OOM的区域。2.Java虚拟机栈a) 线程私有。b) 相当于栈内存,每个元素为一个栈帧。3.本地方法栈a) 用于执行Native方法(所谓Native方法就是用C语言等较底层语言写的方法)。4.Java堆a) ...原创 2018-03-30 22:12:19 · 199 阅读 · 0 评论 -
《深入理解java虚拟机》笔记--------------------虚拟机字节码执行引擎
虚拟机字节码执行引擎:1. 栈帧a) 是虚拟机栈的栈元素。b) 每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。c) 栈帧需要的内存大小在编译时已经确定,不会受运行时的影响。d) 栈帧结构 i. 局部变量表1. 用于存放方法参数和方法内部定义的局部...原创 2018-03-30 22:17:49 · 151 阅读 · 0 评论 -
填坑关于线程在构造函数里中断后是否会形成竞态条件,看《Java并发编程实战》的一个疑问
在看《Java并发编程实战》一书的40页和41页时产生了一个疑问,作者说采用了不可变对象会使这个程序保持线程安全,但是我想了一下发现点问题。源代码我就懒得打出来了,照两张相吧现在假如有两个线程A和B,A线程先进行,当A线程访问到cache = new OneValueCache(i, factors);然后进入OneValueCache的构造函数,假如线程A在下面代码的第一句后中断了,像下面那样(...原创 2018-04-16 09:15:18 · 184 阅读 · 0 评论