摘要: 一、讲解 HashMap在并发执行put的时候会引发死循环,会因为多线程会导致HashMap的entry链表形成环形数据结构,一旦形成环形数据结构Entry的next永远不为空,就会产生死循环获取entry。 HashTable容器使用synchronized来保证线程安全的,但是在线程竞争激烈的情 阅读全文
posted @ 2019-09-21 11:22 houstao 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 一、Vector与ArrayList区别 1、ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要将已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删 阅读全文
posted @ 2019-09-19 20:54 houstao 阅读(378) 评论(0) 推荐(0) 编辑
摘要: 1、Heap(Java7之前) 一个Jvm实例只存在一个堆内存,堆内存的大小是可以调节的。类加器读取了类文件后,需要把类、方法、常变量放到堆内存中,保存所有引用类型的真实信息以方便执行器执行。 堆内存逻辑上分为三部分:新生+养老+永久 新生区 新生区是类的诞生、成长、消亡的区域,一个类在这里产生,应 阅读全文
posted @ 2019-09-15 11:14 houstao 阅读(631) 评论(0) 推荐(0) 编辑
摘要: 1、Stack栈 栈也叫栈内存,主管Java程序的运行,是在线程创建时创建,它的生命期是跟随线程的生命期,线程结束栈内存也就释放,对于栈来说不存在垃圾回收问题,只要线程一结束该栈就Over,生命周期和线程一致,是线程私有的。8种基本类型的变量+对象的引用变量+实例方法都是在函数的栈内存种分配。 2、 阅读全文
posted @ 2019-09-13 22:00 houstao 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 1、Method Area 方法区 方法区是被所有的线程共享,所有字段和方法字节码,以及一些特殊方法如构造函数,接口代码也在此定义。简单说,所有定义的方法的信息都保存在该区域,此区属于共享区间。 静态变量+常量+类信息(构造方法/接口定义)+运行时常量池存在方法区中,但是实例变量存在堆内存中,和方法 阅读全文
posted @ 2019-09-12 10:19 houstao 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 1、PC寄存器 每个线程都有一个程序计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码(用来存储指向下一条指令的地址,也即将要执行的指令代码),由执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不记。 这块内存区域很小,它是当前线程所执行的字节码的行号指示器,字节码解释器通过改 阅读全文
posted @ 2019-09-12 09:45 houstao 阅读(396) 评论(0) 推荐(0) 编辑
摘要: 1、 Native Interface 本地接口 本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合C/C++程序,Java诞生的时候是C/C++横行的时候,要想立足,必须有调用C/C++程序,于是就在内存中专门开辟了一块区域处理标记为native的代码,它的具体做法是Native M 阅读全文
posted @ 2019-09-12 09:15 houstao 阅读(337) 评论(0) 推荐(0) 编辑
摘要: 1、JVM的体系机构 2、类加载器ClassLoader 负责加载class文件,class文件在文件开头有特定的文件标识(CA FE BE AN),并且ClassLoader只负责class文件的加载,至于它是否可运行,则由Execution Engine决定。 3、类加载器ClassLoader 阅读全文
posted @ 2019-09-11 21:00 houstao 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 1、首先看一下代码: 结果分析: 1、false 2、true 3、false 4、false 第1个是false的原因是因为使用的是==比较的引用类型 第2个结果是true的原因是因为String的源码中进行了equals的重写,源码如下: 3、第3个结果为false的原因是因为使用==判断的引用 阅读全文
posted @ 2019-09-11 16:29 houstao 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 1、Spout Spout最顶层抽象是ISpout接口。 Open()是初始化方法,为spout提供执行环境,执行器将运行此方法来初始化喷头 nextTuple()循环发射数据,通过收集器发出生成得数据 ack()成功处理tuple回调方法,确认处理特定元组 fail()处理失败tuple回调方法, 阅读全文
posted @ 2019-09-06 11:39 houstao 阅读(207) 评论(0) 推荐(0) 编辑