浅谈对Java泛型的理解
Java中的泛型泛型的作用在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是本身就是一个安全隐患。那么泛型的好处就是在编译的时候能够检查类型安全,并且所有的强制转换都是自动和隐式的。
泛型的好处不言而喻,从Go语言就可以看到泛型能够为我们的编码工作带来很大的便利。Java中使用泛型也很简单,会用集合类就会用泛型了。
泛型的创建使用泛型很简单,困难的是如何编写一段泛型代码,让使用者能够方便的使用,就像集合类一样。创建简单的泛型也并不困难,包含一些尖括号,例如<T>,<T,R>即可。
泛型在Class上的创建1234567891011121314151617public class Printer<T> { T thing2Print; public void print() { System.out ...
CatDFS Introduction
CatDFSCatDFS是一个使用Golang实现轻量级的开源分布式文件系统。它参考了《The Google File System》以及HDFS的设计并进行了改进和取舍。
作为一个分布式文件系统,CatDFS主要具备以下特点:
文件操作——上传文件(add),下载文件(get),移动文件(move),删除文件(remove),获取文件信息(stat),打印目录(list),重命名(rename),未来还将会支持追加写入(append)。
高可靠性——文件以多副本的放置策略存储于不同的chunkserver中,副本数可以作为参数调整。
高可用性——存储元数据的master多节点部署,并采用raft分布式共识算法保证元数据一致性。只要master节点可用数量超过一半,系统就仍能正常运作,不存在单点故障。
缩容管理——当chunkserver故障时,系统会执行缩容操作,将数据节点上存储的文件根据策略转移至其他chunkserver上,确保不会丢失副本。
扩容管理——用户可以随时新增chunkserver,系统会根据策略将其他chunkserver上的文件转移过来。
负载均衡——在用户 ...
垃圾收集原理
垃圾收集器与内存分配策略
Java与C++之间有一堵由动态内存分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人想出来。
概述垃圾收集需要考虑三件事情:
哪些内存需要回收?
什么时候回收?
如何回收?
Java内存运行时区域分为五个部分,其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭。栈中的栈帧随着方法的进入和退出执行出栈和入栈。这几个区域的内存分配和回收都具备确定性,不需要考虑如何回收。
而堆和方法区这两个区域则有着很显著的不确定性,只有处于运行期间,才能知道程序会创建哪些对象,创建多少个对象,这部分内存的分配和回收是动态的。
对象存活与死亡可达性分析算法这个算法的基本思路就是通过一系列称为GC Roots的根对象作为起始节点集,根据引用关系向下搜索。
固定可作为GC Roots的对象包括:
在虚拟机栈中引用的对象,譬如各个线程被调用的方法堆栈中使用到的参数、局部变量和临时变量。
在方法区中类静态属性引用的对象,譬如Java类的引用类型静态变量。
在方法区中常量引用的对象,譬如字符串常量池里的引用。
在本地方法栈中JNI引用的对象
Java虚拟机 ...