摘要:   Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑排列在Class文件中,中间没有添加任何分隔符,这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据,没有空隙。当遇到需要占用8位字节以上的数据项时,会按照高位在前的方式分割成若干个8 阅读全文
posted @ 2019-07-23 01:19 O'Neal 阅读(432) 评论(1) 推荐(0)
摘要:    类加载机制 :虚拟机把描述类的数据从class文件加载到内存,并对数据进行验证、准备、解析、初始化,最终形成可以被虚拟机直接使用的Java类型。验证、准备、解析这3个过程统称为 连接 。 类加载过程 1. 启动虚拟机   虚拟机通过引导类加载器创建一个初 阅读全文
posted @ 2019-07-22 15:59 O'Neal 阅读(267) 评论(0) 推荐(0)
摘要: 异常   Java虚拟机异常使用Throwable或其子类的实例来表示,抛异常本质上是程序控制权的一种即时的、非局部的转换,即从抛出的地方转换至处理异常的地方。   导致异常的原因 执行了athrow字节码指令。 虚拟机同步检测到程序发生了非正常的执行情况,这 阅读全文
posted @ 2019-07-22 00:31 O'Neal 阅读(288) 评论(0) 推荐(0)
摘要:   栈帧是Java虚拟机栈的结构,每个栈帧都有自己的局部变量表、操作数栈、动态链接和方法返回地址等信息,还允许携带与JVM实现相关的附加信息,如,对程序调试提供支持的信息。 1 局部变量表   局部变量表存储基本数据类型(8种)、对象引用、returnAddr 阅读全文
posted @ 2019-07-21 07:40 O'Neal 阅读(646) 评论(1) 推荐(0)
摘要:   Java虚拟机采用可达性分析算法来判断对象是否可以回收。可达性分析算法通过一系列的GC Roots对象作为起始点,向下搜索走过的路径称引用链,当一个对象到GC Roots没有任何的引用链时,证明对象是不可用的。 Java中,可作为GC Roots的对象: 虚拟机栈中引用的对象 阅读全文
posted @ 2019-07-21 00:22 O'Neal 阅读(241) 评论(0) 推荐(0)
摘要: 运行时数据区   1. 程序计数器 (Program Counter)   每个线程独占自己的程序计数器。如果当前执行的方式不是native的,那程序计数器保存JVM正在执行的字节码指令的地址,如果是native的,那程序计数器的值是undefined。 &e 阅读全文
posted @ 2019-07-20 21:16 O'Neal 阅读(335) 评论(0) 推荐(1)
摘要: 写入流程   Kafka 服务端通过 的`handle() ApiKeys handle() PRODUCE`类型,表示有生产者客户端发送了消息,之后将消息传递给副本管理器处理。   副本管理器会将消息追加到分区 leader 副本的日志文件中,然而实际上并不 阅读全文
posted @ 2019-07-19 00:25 O'Neal 阅读(1690) 评论(0) 推荐(0)
摘要:   Kafka 服务端通过 的主函数 方法启动。 类提供读取配置文件、启动/停止服务的方法。而启动/停止服务最终调用的是 的`startup/shutdown`方法。 启动流程 1. 启动 zk 客户端。 2. 启动动态配置。 3. 启动调度线程池。 4. 启动日志管理器的后台线 阅读全文
posted @ 2019-07-18 00:18 O'Neal 阅读(655) 评论(0) 推荐(0)
摘要: 消费组和消费者 1. 消费组和消费者是一对多的关系。 2. 同一个消费组的消费者可以消费多个分区,且是独占的。 3. 消费者的分区分配策略由接口 定义,内置三种分配策略 、`RoundRobinAssignor StickyAssignor`,支持自定义策略。 4. 不同消费组可以消费相同的分区,互 阅读全文
posted @ 2019-07-17 00:34 O'Neal 阅读(654) 评论(0) 推荐(0)
摘要: 1 KafkaConsumer 构造器 1. 初始化参数配置。 2. 初始化消费者网络客户端 。 3. 初始化消费者协调器 4. 初始化拉取器 2 订阅主题 1. 调用订阅方法 会将订阅信息记录到 ,多次订阅会覆盖旧数据。 2. 如果元数据缓存 不包含订阅的主题,则设置 ,标识需要更新元数据。 3 阅读全文
posted @ 2019-07-06 00:18 O'Neal 阅读(917) 评论(0) 推荐(0)