摘要:
角色 Zookeeper中的角色主要有以下三类 领导者(Leader) 领导者负责进行投票的发起和决议,更新系统状态 学习者(Learner) 跟随者(Follwer) Follwer用于接收客户请求并向客户端返回结果,在选主过程中参与投票 观察者(ObServer) ObServer可以接收客户端 阅读全文
摘要:
Serial收集器 Serial收集器是最基本、历史最悠久的收集器。这个收集器是一个单线程的收集器。它在进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束。Serial收集器是新生代的收集器。采用的复制算法。 ParNew收集器 ParNew收集器其实就是Serial收集器的多线程版本,除了 阅读全文
摘要:
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、换换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 类加载的时机 类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段,其中验证、 阅读全文
摘要:
Class类文件的结构 Class文件是一组以8字节为基础单位的二进制流。当遇到需要占用8字节以上空间的数据项时,则会按照高位在前的方式分割成若干个8位字节进行存储。 根据Java虚拟机规范的规定,Class文件格式采用一种类似于C语言结构体的伪结构来存储数据,这种伪结构中有两种数据类型:无符号书和 阅读全文
摘要:
主内存与工作内存 Java内存模型的主要目标是定义程序中各个变量的访问规则。即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。这里的变量和Java编程中所说的变量有所区别,它包括了实例字段、静态字段和构成数组对象的元素。但不包括局部变量和方法参数。 Java内存模型规定了所有的变量都存储 阅读全文
摘要:
标记-清除算法 算法分为标记和清除两个阶段:首先标记所有需要回收的对象,在标记完成后统一回收所有被标记的对象。 该算法存在的缺点: 1、 效率问题:标记和清除两个过程的效率都不高 2、 空间问题:标记清除之后会产生大量不连续的内存碎片,内存碎片太多可能会倒是以后在程序运行过程中需要分配较大的对象时, 阅读全文
摘要:
垃圾回收器在对对象进行回收前,首先要判断对象是否还“活着”。判断方法有以下两种 引用计数法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1。当引用失效时,计数器值就减1。任何时刻计数器为0的兑现就是不可能再被使用的。 引用计数法的实现简单,判断效率也高,也有一些比较著名的应用案例 阅读全文
摘要:
实现方式 Lock是代码级别的,synchronized是JVM级别的 公平 Lock可以是公平所,也可以是不公平锁,默认是非公平锁,synchronized是非公平锁 释放 Lock的释放必须手动调用unlock()方法,而synchronized在代码出了代码块或方法之后就会自动释放锁。 等待中 阅读全文
摘要:
并发编程的两个关键问题 1、 线程间通信 常见的两种交换信息的机制 A、 共享内存:读写内存中的公共状态来隐式通信 B、 消息传递:无公共状态,通过发送消息来显示进行通信。 2、线程间同步 用以控制不同线程间操作发生的相对顺序的机制 A、 共享内存下的通信机制,这里必须进行显示同步 B、 消息传递的 阅读全文
摘要:
ConcurrentHshMap的数据结构是由一个Segment数组和多个HashEntry数组组成,在Segement数组中包含了HashEntry数组。数据结构如下图所示: Segement数组的意义就是将一个大的table分割成多个小的table来加锁,而每一个Segment元素存储的是Has 阅读全文