不懂这些JVM知识,真不敢说是大数据开发!

目录

今天下班,到家已经9点半了。

每天回来,都会和爸妈、媳妇、孩子温馨一会。

10点15,打开电脑,还有3个小时时间。

给大家分享点大数据开发重要的知识。

大数据开发都要熟悉JVM

JVM,相信大家都很熟悉。

这似乎是Java开发工程师的专利。

不过,

很多Java开发也只是停留在书本、理论的层面。

因为,可能很多传统的Java开发把程序部署在一台32GB的服务器上,

从来都没看过OOM,唯一一次OOM,还被运维一次性重启解决了。

但对于大数据开发,

每个人都应该熟悉JVM

理由很简单:

  1. Hadoop、Spark、Flink等都运行在JVM上
  2. 大数据需要处理的数据量更大,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!

选择从来都是一件非常苦难的事情!

大家吃中饭点餐的时候就知道了!

上一篇:STM32F103、FreeModbus从站设计(6)-让串口和Modbus初始化的参数同步起来


下一篇:docker镜像管理基础