
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
简单和明了,Storm让大数据分析变得轻松加愉快。当今世界,公司的日常运营经常会生成TB级别的数据。数据来源囊括了互联网装置可以捕获的任何类型数据,网站、社交媒体、交易型商业数据以及其它商业环境中创建的数据。考虑到数据的生成量,实时处理成为了许多机构需要面对的首要挑战。我们经常用的一个非常有效的开源实时计算工具就是Storm ——Twitter开发,通常被比作“实时的Hadoop”。
前面的理论知识是解决问题的基础,经验是催化剂,数据是原料,工具是手段。其中数据包括线程快照、运行日志、GC日志、堆快照、异常堆栈等。下面介绍一下工具。 命令行工具 bin目录中,JDk为我们提供了强大稳定的工具集合,他们都是lib/tool.jar类库的包装。主要有jps : 显示所有虚拟机进程。类似UNIX的ps命令。如果启动了多个虚拟机,通过该命令查询LVMID
垃圾回收: 垃圾回收面临着三个问题:回收什么、什么时候回收、怎么回收。 哪些对象已经不再被需要了,就需要被回收。引用计数法:教科书式解释,每个对象维护对它的引用的个数。但是主流虚拟机不适用,因为难解决循环引用。可达性分析算法:主流适用的算法。虚拟机选定一些GCRoot对象,如果一个对象和GCRoot对象间没有引用链,则这个对象是无用的、可以回收的。可以作为GCRoo
线程安全 为了深入讨论,不把线程安全当做非真即假的概念,我们把它分为5个层次。不可变:不可变的数据是线程安全的。例如前面提到的final,被final修饰的基础数据类型,被正确构造后,就是不可变的,亦为线程安全的。如果是一个对象,需要保证他的行为不会对状态产生印象,例如String、Integer、Long、Double等,内部值是final的,所以不可变。绝对线程安全:一个
上一篇简单描述的类文件结构只是一种被编译器编译后的一个通用描述。在运行时,虚拟机需要将类文件加载到内存,校验、解析、初始化等一些列操作后,生成可使用的Java类。这一系列过程就是虚拟机的类加载机制。 c++在运行前就有一个链接的过程,而java类型的加载、链接、初始化都是在运行期动态完成的,虽然会慢点,但是提高了灵活性。例如:接口在运行时才知道具体实现;可以运行时从远端下载一段代码运行。
内存区域: 与c++的由人为的内存管理相比,Java将内存交给了虚拟机来管理。 根据虚拟机规范,内存分为几个区域: 堆:线程共享区域。规范定义存放真正的对象和数组的内存区域。虚拟机大多采用分代收集算法,可以分为新生代老年代。新生代可分为Eden、From Survivor、To Survivor。线程分配角度,可能划分出线程私有的缓冲区域。如果堆内存不够分
Java技术体系包括:Java程序设计语言Java虚拟机Class文件格式Java API类库第三方库 按照领域划分:Java Card:支持小内存设备的程序J2ME : 移动终端的平台J2SE : 桌面及应用平台J2EE:多级架构的企业级平台 虚拟机有多种实现,在符合规范的前提下,提供了额外的一些优化和功能。使用最为广泛的是HotSpo
在上一篇class文件和执行引擎这部分中,用户能参与的部分不是太多。class格式、加载、链接、解释执行都是虚拟机规定的,能通过程序操作的有:类加载器和字节码生成。下面看看几个相关的精彩案例:Tomcat的加载器架构 java web服务器通常有多个自定义类,来解决这些问题不同web项目间的类库隔离不同web项目间类库的共享java编写的服务器本身和项目类库间的隔
执行引擎是最重要的一部分,概念模型的总体外观是一致的:输入自己吗,过程是字节码解析的等效过程,输出结果。不同的虚拟机有不同的具体实现,大体有解释执行和编译执行两种选择。运行时栈帧结构: 栈桢在虚拟机栈中,是支持方法调用和执行的结构。存储局部变量表、操作数栈、动态链接和方法返回地址等。在编译时,需要多大的局部表量表,多深的操作数栈都确定了,所以需要多大内存也确定了。只有处于栈顶
摘要 本文在上篇文章基础上,更加深入讲解了Kafka的HA机制,主要阐述了HA相关各种场景,如Broker failover,Controller failover,Topic创建/删除,Broker启动,Follower从Leader fetch数据等详细处理过程。同时介绍了Kafka提供的与Replication相关的工具,如重新分配Partition等。BrokerF