今天下班,到家已经9点半了。
每天回来,都会和爸妈、媳妇、孩子温馨一会。
10点15,打开电脑,还有3个小时时间。
给大家分享点大数据开发重要的知识。
大数据开发都要熟悉JVM
JVM,相信大家都很熟悉。
这似乎是Java开发工程师的专利。
不过,
很多Java开发也只是停留在书本、理论的层面。
因为,可能很多传统的Java开发把程序部署在一台32GB的服务器上,
从来都没看过OOM,唯一一次OOM,还被运维一次性重启解决了。
但对于大数据开发,
每个人都应该熟悉JVM。
理由很简单:
- Hadoop、Spark、Flink等都运行在JVM上
- 大数据需要处理的数据量更大,OOM太太太常见了
19年、20年,我面试了很多人。
每次几乎都会问一问JVM。
因为大家也都清楚,
主要是真正做到大一点规模的大数据项目,
不可能没有见过OOM异常,不调整JVM参数的。
我发现,
当我问到JVM,
大家对它的理解,仅仅是停留在了解大体的结构上。
更有甚者,
连每个结构的作用都说不清楚。
很多开发都有一颗学习JVM的心,
但大多都抓不住重点。
更多人的,都是把书买回来,随便翻了翻,然后扔回书柜里。
最后,千万不要忘了给书柜拍个照片。
发个朋友圈告诉所有人,这看着很牛x的样子!
学习JVM最重要的是:
- 理解JVM的内存结构
- Class字节码与Class Loader
- 理解JVM的各种GC算法、运行机制
- 理解每个JVM调优参数的意义
篇幅原因,我无法一次性把所有内容介绍完。
本次重点讲解JVM的内存结构与基本调参。
后续,我们再陆续完善其他内容。
[注] 本篇以目前应用最广泛的JDK 8为例子。
Hotspot虚拟机
简介
大家都在说JVM,
但提到JVM,就一定要说一说 HotSpot——Java HotSpot Performance Engin。
HotSpot就是Java虚拟机的一种实现。
历史
其实Sun从1999年,1.3版本发布的JDK就包含了HotSpot。
Java HotSpot虚拟机是Java SE的一个核心组件,我们经常所看到的class字节码,就是由它来执行的。
它是基于名为Longtalk的语言构建的,而最初是由一个名为Animorphic(LongView Technologies)的公司开发。
这个公司是由Sun的两位技术人员成立的。
他们基于Selt Virtual Machine开发了Longview虚拟机。
1997年,Sun收购了Animorphic。
Sun收购Animorphic之后,Sun决定为Java虚拟机编写一个新的JIT编译器。
新的编译器,产生了一个新的名称:HotSpot。
HotSpot用C++语言编写。
2007年,Sun估计它大概包含了25W行的源代码。
HotSpot能够在运行Java字节码时,会连续分析程序的性能,并找到经常执行的热点,然后进行优化。
HotSpot JVM在某些BenchMark测试中,比一些C和C++代码性能更好。
HotSpot提供了以下几个非常重要的组件:
- Java ClassLoader
- Java字节码解释器
- Client和Server虚拟机,它们针对各自的场景进行了优化
- 若干个GC
- 一组运行时库
人机工程学
第一次看到官网上的人机工程学(Ergonomics)还蛮意外的!
因为之前听说的更多的是人体工程学这个名字。例如:座椅呀、鼠标等等。
其实是一回事。
这门科学是研究:
人和机器、环境相互作用并合理结合,使设计的机器和环境系统适合人的生理或心理等特点。
简单来说,
就是设计一样东西,让人身心愉悦。
Oracle官网在介绍HotSpot时,在开篇就提到了人机工程学,可以看出来,这一款JVM注重了用户的使用。
而不仅仅是面对“冰冷”的机器。
默认选择
HotSpot人机工程学体现在用户对JVM、GC调优过程。HotSpot JVM为GC、Heap大小、JIT提供了依赖于平台的默认配置。
Don't let me choose!
选择从来都是一件非常苦难的事情!
大家吃中饭点餐的时候就知道了!