`
文章列表
上篇文章我们学习了 Class 文件的结构,现在来看下虚拟机是如何加载 Class 文件的?以及Class 文件中的信息进入到虚拟机后会发生什么样的变化? 虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和 ...
本章内容是如何规划 Kafka 服务器的相关内容. 1.操作系统选型 linux 效率优于 windows. 因为 I/O 模型和网络传输效率(sendfile). 2.磁盘规划 1.性价比 JBID 优于 RAID 2.使用机械盘完全可以满足 Kafka 集群的使用,SSD 更好. 3.磁盘容量规划 1.新增消息数 2.消息留存时间 3.平均消息大小 4.副本数 5.是否启用压缩 4.内存规划 1.尽量分配跟多的内存给操作系统的 page cache. 2.不要为 broker 设置过大的堆内存,最好不超过 6GB. 3.page cache 大小至少要大于一个日志段的大小. ...
我们都知道 *.java 源代码经过编译器编译后会生成 *.class 文件,方法体中的代码会存放在方法表中 Code 属性中(接口和抽象类除外,没有 Code 属性). Code 属性的结构: attribute_name_index -> UTF8(Code) attribute_length info{     max_stack     max_locals     code_length     code     LineNumberTable     LocalVariableTable     ... } java 编译器编译后的字节码指令就存放在 code 中. ...
我们知道,java 语言一次编写,到处运行,那它是如何做到的了?早在java语言设计之初,设计者就考虑到了这方面的事,他们将java规范拆分为java语言规范和java虚拟机规范,而虚拟机只和class文件进行绑定,所以不管是java语言,还是c语言,只要有编译器把*.java或*.c文件编译成*.class文件即可,然后class文件运行在 java虚拟机上就可以运行了. 那下面说下 class 的文件结构 任何一个class文件都对应唯一的一个类或接口,但是类或接口不一定要定义在 class 文件中. Class 文件是一组以 8 字节为基础单位的二进制流,各个数据项严格按照顺序紧密排列 ...
首先我们需要知道的是 Java 对象是包含三部分数据的: 1.对象头 2.实例数据 3.对齐填充(可能没有,因为 java 中规定对象的起始地址必须是 8 bytes 的正数倍) 对于普通对象而言,对象头中包括 mark word(8 bytes)、kclass(没有开启压缩的时候是 8 bytes,开启压缩了的话,就是 4 bytes),如果是数组类型的对象话,这里还有一个数组长度字段,4字节. 在 JDK6 64位 23 update+ 之后都默认开启了指针压缩功能. 现在验证 java 对象占几个字节. public class Person {     int age; } 我 ...
1.jps 查看java 虚拟机进程 2.jstat 查看类加载情况 jstat -class 1111 查看编译情况 jstat -compile 1111 查看 gc 情况 jstat -gc 1111 查看堆内存情况 jstat -gccapacity 1111 3.jinfo 查看 java 配置信息 jinfo 1111 4.jmap 生成堆转储存快照 jmap 1111 5.jhat 查看 jmap 生成的堆转储存快照 6.jstack 查看栈转储存快照 jstack 1111 jConsole & VisualVM 是可视化的工具. —————————— ...
Kafka 设计之初是为了解决 Linkedin 公司数据管道(datapipe)问题. KafkaProducer 的工作逻辑:将消息封装成 ProducerRecord 对象,然后使用KafkaProducer.send 将消息发送出去. 事实上,其拿到消息后会通过序列化,根据本地缓存的元数据,确定目标分区,最后写入缓冲区. KafkaProducer 专门有一个 Selector I/O 线程,负责将缓存区的消息分批次发送给 Kafka broker. 新版设计优点: 1.发送过程被分成了两个线程,即:主线程和 Selector 线程. 2.发送完全是异步的,并提供回调机制, ...
Kafka 的核心功能是高性能的消息发送和高性能的消息消费. 在设计一个消息引擎系统的时候需要考虑两件事: 1.消息设计:消息必须是语义清晰的,且格式应当具备通用性. 2.传输协议设计:消息要能够在不同的系统间传输. 3.消息引擎范型:比如消息队列,发布/订阅. 消息队列模式:消息被一个生产者生产出来,放到消息队列中,消费者从指定位置消费消息,一旦消息消费完成,则从队列中移除该消息,所以,生产者和消费者是一一对应的. 发布/订阅模式:这种模式中有 topic 的概念(类似于盛装消息的容器),消费者订阅该主题,生产者生产消息,发送到主题上,然后所有订阅了该主题的消费者都能收到消息. K ...
3.内存间的交互操作 看到这块,小伙伴是否有这么一个疑问?不同的工作内存缓存了主内存中相同的数据,那么是否有类似于 MESI 这样的协议来保证数据一致性了? 我们先来看下内存间的交互操作吧. 内存间的交互是数据从主 ...
要写一个词法分析,首先是要对一段 sql 进行解析,然后将其解析为一个一个的 token. 每个 token 是都特定含义的,固定义 token 结构如下: /** * token for sql. */ public final class SQLToken {     // 可能称为类型更合适些, 用于标识解析出来的 token 的类型.     // 比如 select, insert, 字符串, id 等.     private final int value;     // token 在 sql 中的偏移量     private final int offset;     ...
目前在网上看到有如下两种获取 connection 的办法: 第一种: //3.创建Driver对象 Driver driver = (Driver)Class.forName(driverName).newInstance(); Properties info = new Properties(); //driver的connect方法中需要一个Properties型的参数 info.put("user", user); info.put("password", password); //4.使用driver的connect方法获取数据库连接 Co ...
首先说明下事务的四种隔离级别:读未提交、读已提交、可重复读、可串行化. 而且,在事务的并发操作中,可能出现脏读、不可重复读、幻读等. 读未提交:一个事务可以读取另一个事务没有提交的数据(**脏读**). 读已提交:一个事务只能读取到另一个事务提交的数据(可以解决脏读,但是一个事务中出现了**更新操作**,会导致数据不可重复读) 可重复读:开始事务后,不再允许修改数据(可以解决不可重复读的问题,但是**可能出现幻读**,比如说新增一条数据). 可串行化:事务串行化执行,可以避免脏读、不可重读读和幻读. 隔离级别的设置只对当前连接有效,对于使用MYSQL命令窗口而言,一个窗口就相当于一个 ...
说明:这个模块的功能是缓存调用结果,但是我有一个疑问,比如说开始调用的时候,返回结果列表中只有一条数据,另一个进程插入了一条数据,那么下一次调用缓存的那个方法时,那是返回一条结果,还是两条结果了? Cache 接口定义了两个方法,put 和 get. public interface Cache {     /**      * API to store value against a key      * @param key  Unique identifier for the object being store.      * @param value Value getting ...
说明:本篇文章是在阅读《深入理解Java虚拟机》过程中的一些笔记和分析,由于本人能力有限,如果有书写错误的地方,欢迎各位大佬批评指正!我们互相交流,学习,共同进步! 该项目的地址:https://github.com/xiaoheng1/jvm-read 1.JDK的命令行工具 我们常用的工具是 java.exe 和 javac.exe 这两个,但是不知道你们有没有注意到 bin 目录下的工具其实不止这两个. 例如 xjc.exe、 wsimport.exe、wsgen.exe 等. 这些工具非常的小巧,大部分都稳定在 27KB 左右,并非 JDK 开发团队为了炫耀编程水平,故意把它们制作 ...
Configuration 接口分析 /** * 配置中心接口, */ public interface Configuration {     /**      * 根据给定的 key 返回对应的值.      *      * @param key The configuration key.      * @return The associated string.      */     default String getString(String key) {         return convert(String.class, key, null);     }     ...
Global site tag (gtag.js) - Google Analytics