程序员之间的语言之争又未尝不是如此。写系统语言的鄙视托管语言低下的执行效率;写托管语言的则取笑系统语言需要手动管理内存;写动态语言的不屑于静态语言那冗余的类型系统;写静态语言的则嘲讽动态语言里面各种光怪陆离的运行时错误。

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虚拟机?相关推荐

  1. 学习Java虚拟机的正确的姿势?

    为什么要学习Java虚拟机 多线程和虚拟机.实际工作中,大部分程序员可能几乎不用,但这两项技能是你面试所谓高级工程师的敲门砖,也是你在机会到来的时候能否顶上去的弹药库.很多人,把这两部看的太高深,望而 ...

  2. #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道

    作者:Gavin 开篇 作为一个年近三十的老Java码农,不可避免地要学习Java虚拟机方面的知识,突闻<深入理解Java虚拟机:JVM高级特性与最佳实践>出了第3版,喜极而泣,提笔临表. ...

  3. 写给Java程序员的Java虚拟机学习指南

    大家好,我是极客时间<深入拆解Java虚拟机>作者.Oracle Labs高级研究员郑雨迪.有幸借这个专题的机会,能和大家分享为何Java工程师要学Java虚拟机?如何掌握Java虚拟机? ...

  4. 除了《深入理解 Java 虚拟机》,还可以看怎么系统学习 Java 虚拟机?

    作为一名优秀的 Java 开发程序员,以及想那些想要学习 Java 更深层一点的知识的同学,对 JVM 的熟悉与熟练使用是必不可缺的核心技能了,也是每个 Java 程序员应该要做到的. 深入学习 JV ...

  5. Java进阶高级程序员必备:深入浅出springboot+深入Java虚拟机

    收集了2份文档资料:深入浅出springboot和深入Java虚拟机,希望能对想要进阶的小伙伴有所帮助 深入浅出springboot Spring Boot是一个微服务架构的框架,那么为什么要使用Sp ...

  6. Java虚拟机的内存空间有几种!

    Java虚拟机的内存空间有几种? (1)问题分析: JVM(虚拟机)的内存划分 不同的数据使用的是哪一块内存空间 (2)核心答案讲解: Java虚拟机有那几块内存空间: 1)栈内存:方法运行时所进入的 ...

  7. java虚拟机_一文彻底读懂Java虚拟机!(JVM)

    提到Java虚拟机(JVM),可能大部分人的第一印象是"难",但当让我们真正走入"JVM世界"的时候,会发现其实问题并不像我们想象中的那么复杂.唯一真正令我们恐 ...

  8. java虚拟机_Oracle独家:Java虚拟机学习指南

    大家好,我是极客时间<深入拆解 Java 虚拟机>作者.Oracle Labs 高级研究员郑雨迪.有幸借这个专题的机会,能和大家分享为何 Java 工程师要学 Java 虚拟机?如何掌握 ...

  9. java虚拟机内存监控_深入理解JVM虚拟机9:JVM监控工具与诊断实践

    本文转自: https://juejin.im/post/59e6c1f26fb9a0451c397a8c 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到 ...

最新文章

  1. 关于istringstream用法的一个坑
  2. numpy中的matrix矩阵处理
  3. 01需求工程-软件建模与分析阅读笔记
  4. 第一阶段:Java基础之控制结构
  5. 微型统计分析系统README
  6. linux下实现内存监视,shell脚本来监视Linux上的内存使用情况
  7. 一直在构建工作空间_智能工作空间让Dropbox拥有无限扩展潜力
  8. nioqrc oracle,程序停在 readnocancel () from -lib-tls-libpthread.so.0
  9. Sysbench压测
  10. spring @component的作用详细介绍
  11. ICON素材|装饰图标设计的技巧
  12. Win8 64位系统最简单的adb安装方法
  13. TongWeb基本使用
  14. XRD测试常见问题及解答(一)
  15. Ubuntu 设置桥接网络
  16. Ubuntu 10.10 无线网络已经禁用” “wiress is disabled” 解决方法
  17. 电影天堂React Native 客户端V2.0发布
  18. esp寄存器与ebp寄存器介绍
  19. Xshell入门必看
  20. 很干净的4句话,终生受用

热门文章

  1. node中异步IO的理解
  2. 1704班3组—高级软件测试作业—如何计算团队成员贡献分
  3. Linux下配置和安装VNCServer远程服务
  4. (转)一个华科研究生导师的肺腑之言
  5. 使用axis1.4生成webservice的客户端代码
  6. 【Tuxedo】Tuxedo入门
  7. 【JFreeChart】JFreeChart—输出折线图
  8. .NET Compact Framework下的单元测试
  9. SPSS学习系列之SPSS Statistics(简称SPSS)是什么?
  10. JSON解析---初识