随笔分类 - java
摘要:本文重点介绍JVM运行时数据区的整体概况,其中堆和方法区等比较复杂的会在GC的部分学习。另外本文还学习了JVM的指令集,涉及到的常用的一些指令,通过查看JVM规范手册,还确定每一个是如何使用,并与运行时数据区进行对应。运行时数据区,自增的字节码指令执行,局部变量表,栈帧,this,iadd,invoke指令
阅读全文
摘要:Java的内存模型,即JMM。依托于操作系统的存储结构,JVM作为虚拟机相当于操作系统之上的一个软件。因此,本文先介绍了操作系统层面的存储结构、硬件级的数据一致性问题以及相对应的一些策略等的知识,这里面也涉及到指令乱序执行的问题,给出了验证的代码。然后结合JVM对于软件层面的一些内存屏障的实现,例如volatile、synchronized关键字。最后是比较重要的java的对象和内存的关系,包括了类的创建过程以及在内存中的排布状态细节,这里包括了通过java代理的使用来观察对象的大小等实际代码的操作。
阅读全文
摘要:类在JVM的生命周期包括加载、链接和初始化。也就是loading、linking和initializing。前一篇博文已经介绍了Class文件和类加载器的内容,本文主要介绍另外的linking和initializing。同时也会记录分析一个关键性问题,就是静态变量和成员变量对于赋默认值和赋初始值的区别,这个区别会导致一些问题,为了避免这些问题,会用到volatile关键字。
java,jvm,linking,verification,preparation,resolution,initializing,volatile。
阅读全文
摘要:
JVM 是Java的基石,Java从业者需要了解。JVM不是一个新的知识,网上文章很多,本篇的不同之处在于参考一手资料、内容经过反复推敲。本文将会有筛选地研究JVM的精华部分,至少达到准系统架构师够用的程度。本篇主要分享学习Java Class文件以及类加载器CLassLoader的知识。
阅读全文

摘要:
Netty是目前最高效便捷的NIO框架。Netty可提供更加高可用、更好健壮性的稳定大规模连接的IO通道。任何一款区块链早期的技术产品,都是从联盟链开始演进,因为联盟链降低了很多原教旨的难度。回到BFT-SMaRt,它的网络连接分为节点之间的连接,节点与客户端之间的连接。节点之间的连接,我们在[BFT-SMaRt:用Java做节点间的可靠信道](https://www.cnblogs.com/Evsward/p/bft-serverConn.html)一文中详细分析了在共识逻辑之前节点之间能够做到的连接准备。那么,本文将继续探索在BFT-SMaRt项目中,节点与客户端之间的连接是如何实现的。
阅读全文

摘要:
信道的可靠是BFT的前提。(参见两军问题)
本文通过跟踪BFT-SMaRt通信层源码,研究节点间可靠信道的实现原理。本文涉及区块链方面的内容较少,重点研究使用Java语言建立可靠网络通道的技术,请选择性阅读。
通信层系统,是分布式网络中获得可靠且认证的点对点通道的保证。BFT-SMaRt的安全通信是基于SSL/TLS标准。
节点之间建立互为信任的Socket IO连接,实现点对点的消息处理。
节点与客户端之间建立健壮性、可用性更高的Netty NIO连接,实现大规模的消息处理。
本文主要介绍第一种情况:在BFT-SMaRt中,作为服务端的节点之间的连接构建方法。
阅读全文

摘要:
区块链的分布式网络需要解决的拜占庭问题,在此就不多介绍了。在此之前,PBFT、POW、POS以及DPOS,这些拜占庭容错类的算法由于研究人员的学术或者性能需求,大多是由Go语言或C++写成。这对于拥有广大群众基础的Java从业者是不友好的,也是区块链大规模商业化的阻力。因此,BFT-SMaRt最大的优势或者特色就是**使用了Java语言实现,同时可靠、模块化、接口灵活**。
阅读全文

摘要:就像新IO为java带来的革新那样,让我们也开启一段新的程序人生。 关键字:NIO,BIO,伪IO,AIO,多路复用选择器,通道,缓冲区,jdk研究,回调函数,高并发 java.nio 概述 历史背景 在java nio出现之前,java网络IO是只有输入输出流操作的基于同步阻塞的Socket编程,
阅读全文
摘要:关键字:互联网协议,网络分层,socket,TCP/IP协议,jdk源码,多线程,线程池,ExecutorService 本文的主要目的是面向程序员,所以涉及到程序编码上面比较多的是TCP/IP协议以及Socket协议,这里会重点介绍,而在学习这两个协议之前,对于整个互联网的运行原理要了解熟悉,所以
阅读全文
摘要:正则表达式 关键字:正则表达式,Pattern,Matcher,字符串方法,split,replace 前文书立下了一个flag,这里要把它完成,就是正则表达式,它是一个工具,是很早就存在于标准Unix工具集之中的,例如sed和awk。然而不经常使用Unix系统的程序员们依然能够在JavaScrip
阅读全文
摘要:关键字:IO基础,JUnit生命周期,字节流,字符流,字符编码,对象流,序列化,反序列化 Java I/O 流是一组有顺序的,有起点和终点的字节集合。是对设备文件间数据传输的总称和抽象。 在IO中涉及的设备文件包括文件、控制台、网络链接等,这其中又根据流的方向可以将两端的设备文件分为数据源对象和接收
阅读全文
摘要:关键字:提供者模式,设计模式,github,gerrit,源码学习,jenkins,国际化,maven高级,maven插件 本篇文章的源码展示部分由于长度问题不会全部粘贴展示,或许只是直接提及,需要了解的朋友请 "fork in github" ,文中会给出源码地址。 源码的研究策略 从这篇文章开始
阅读全文
摘要:掌握Java的泛型,这一篇文章足够了。 关键字:泛型,Iterable接口,斐波那契数列,匿名内部类,枚举,反射,可变参数列表,Set 一般类和方法,要么只能使用基础类型,要么是自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的限制会对代码的束缚很大。 Java中,当你将一个基类作为一个方法
阅读全文