为什么我们要学习Java虚拟机?
程序员之间的语言之争又未尝不是如此。写系统语言的鄙视托管语言低下的执行效率;写托管语言的则取笑系统语言需要手动管理内存;写动态语言的不屑于静态语言那冗余的类型系统;写静态语言的则嘲讽动态语言里面各种光怪陆离的运行时错误。
Java 作为应用最广的语言,自然吸引了不少的攻击,而身为 Java 程序员的你,或许在口水战中落了下风,忿忿于没有足够的知识武装自己;又或许想要深入学习 Java 语言,却又无从下手。甚至是在实践中被 Java 的启动性能、内存耗费所震惊,因此对 Java 语言本身产生了种种的怀疑与顾虑。
别担心,我就是来解答你对 Java 的种种疑虑的。“知其然”也要“知其所以然”,学习 Java 虚拟机的本质,更多是了解 Java 程序是如何被执行且优化的。这样一来,你才可以从内部入手,达到高效编程的目的。与此同时,你也可以为学习更深层级、更为核心的 Java 技术打好基础。
我相信在不少程序员的观念里,Java 虚拟机是透明的。在大家看来,我们仅需知道 Java 核心类库,以及第三方类库里 API 的用法,便可以专注于实现具体业务,并且依赖 Java 虚拟机自动执行乃至优化我们的应用程序。那么,我们还需要了解 Java 虚拟机吗?
我认为是非常有必要的。如果我们把核心类库的 API 比做数学公式的话,那么 Java 虚拟机的知识就好比公式的推导过程。掌握数学公式固然可以应付考试,但是了解背后的推导过程更加有助于记忆和理解。并且,在遇到那些没法套公式的情况下,我们也能知道如何解决。
具体来说,了解 Java 虚拟机有如下(但不限于)好处。
首先,Java 虚拟机提供了许多配置参数,用于满足不同应用场景下,对程序性能的需求。学习 Java 虚拟机,你可以针对自己的应用,最优化匹配运行参数。(你可以用下面这个例子看一下自己虚拟机的参数列表。)
举例来说,macOS 上的 Java 10 共有近千个配置参数:$ java -XX:+PrintFlagsFinal -XX:+UnlockDiagnosticVMOptions -version | wc -l
java version "10" 2018-03-20
Java(TM) SE Runtime Environment 18.3 (build 10+46)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10+46, mixed mode)812
其次,Java 虚拟机本身是一种工程产品,在实现过程中自然存在不少局限性。学习 Java 虚拟机,可以更好地规避它在使用中的 Bug,也可以更快地识别出 Java 虚拟机中的错误,
再次,Java 虚拟机拥有当前最前沿、最成熟的垃圾回收算法实现,以及即时编译器实现。学习 Java 虚拟机,我们可以了解背后的设计决策,今后再遇到其他代码托管技术也能触类旁通。
最后,Java 虚拟机发展到了今天,已经脱离 Java 语言,形成了一套相对独立的、高性能的执行方案。除了 Java 外,Scala、Clojure、Groovy,以及时下热门的 Kotlin,这些语言都可以运行在 Java 虚拟机之上。学习 Java 虚拟机,便可以了解这些语言的通用机制,甚至于让这些语言共享生态系统。
这里顺便说明一下,Graal 编译器是 Java 10 正式引入的实验性即时编译器,在国内同行口中被戏称为“甲骨文黑科技”。当然,在我看来,我们的工作同样也是分析应用程序的性能瓶颈,寻找优化空间,只不过我们的优化方式对自动化、通用性有更高的要求。
为什么我们要学习Java虚拟机?相关推荐
- 学习Java虚拟机的正确的姿势?
为什么要学习Java虚拟机 多线程和虚拟机.实际工作中,大部分程序员可能几乎不用,但这两项技能是你面试所谓高级工程师的敲门砖,也是你在机会到来的时候能否顶上去的弹药库.很多人,把这两部看的太高深,望而 ...
- #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
作者:Gavin 开篇 作为一个年近三十的老Java码农,不可避免地要学习Java虚拟机方面的知识,突闻<深入理解Java虚拟机:JVM高级特性与最佳实践>出了第3版,喜极而泣,提笔临表. ...
- 写给Java程序员的Java虚拟机学习指南
大家好,我是极客时间<深入拆解Java虚拟机>作者.Oracle Labs高级研究员郑雨迪.有幸借这个专题的机会,能和大家分享为何Java工程师要学Java虚拟机?如何掌握Java虚拟机? ...
- 除了《深入理解 Java 虚拟机》,还可以看怎么系统学习 Java 虚拟机?
作为一名优秀的 Java 开发程序员,以及想那些想要学习 Java 更深层一点的知识的同学,对 JVM 的熟悉与熟练使用是必不可缺的核心技能了,也是每个 Java 程序员应该要做到的. 深入学习 JV ...
- Java进阶高级程序员必备:深入浅出springboot+深入Java虚拟机
收集了2份文档资料:深入浅出springboot和深入Java虚拟机,希望能对想要进阶的小伙伴有所帮助 深入浅出springboot Spring Boot是一个微服务架构的框架,那么为什么要使用Sp ...
- Java虚拟机的内存空间有几种!
Java虚拟机的内存空间有几种? (1)问题分析: JVM(虚拟机)的内存划分 不同的数据使用的是哪一块内存空间 (2)核心答案讲解: Java虚拟机有那几块内存空间: 1)栈内存:方法运行时所进入的 ...
- java虚拟机_一文彻底读懂Java虚拟机!(JVM)
提到Java虚拟机(JVM),可能大部分人的第一印象是"难",但当让我们真正走入"JVM世界"的时候,会发现其实问题并不像我们想象中的那么复杂.唯一真正令我们恐 ...
- java虚拟机_Oracle独家:Java虚拟机学习指南
大家好,我是极客时间<深入拆解 Java 虚拟机>作者.Oracle Labs 高级研究员郑雨迪.有幸借这个专题的机会,能和大家分享为何 Java 工程师要学 Java 虚拟机?如何掌握 ...
- java虚拟机内存监控_深入理解JVM虚拟机9:JVM监控工具与诊断实践
本文转自: https://juejin.im/post/59e6c1f26fb9a0451c397a8c 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到 ...
最新文章
- 关于istringstream用法的一个坑
- numpy中的matrix矩阵处理
- 01需求工程-软件建模与分析阅读笔记
- 第一阶段:Java基础之控制结构
- 微型统计分析系统README
- linux下实现内存监视,shell脚本来监视Linux上的内存使用情况
- 一直在构建工作空间_智能工作空间让Dropbox拥有无限扩展潜力
- nioqrc oracle,程序停在 readnocancel () from -lib-tls-libpthread.so.0
- Sysbench压测
- spring @component的作用详细介绍
- ICON素材|装饰图标设计的技巧
- Win8 64位系统最简单的adb安装方法
- TongWeb基本使用
- XRD测试常见问题及解答(一)
- Ubuntu 设置桥接网络
- Ubuntu 10.10 无线网络已经禁用” “wiress is disabled” 解决方法
- 电影天堂React Native 客户端V2.0发布
- esp寄存器与ebp寄存器介绍
- Xshell入门必看
- 很干净的4句话,终生受用