作为开发工程师你也许会在日瑺编程中被Java的启动性能和内存耗费所震惊,继而对Java语言产生怀疑;或许在使用虚拟机遇见内存溢出等一系列异常时头疼万分 困扰于为什麼会出现各种问题。
和语言朝夕相处的开发者们提及代码的详细运行过程也难免会一时语塞。这都是由于Java虚拟机封装得太好,让使用者几乎感觉不到它的存在虽然这种"一次编写,到处运行"优势颇多但是却也让我们忽略了学习Java虚拟机的必要。
熟知Java虚拟机的工作原理可以大幅提升日常编程的效率对寻常Bug的修复更是轻而易举。同时这也是Java技术的重要组成成分之一,实现技术进阶必不可缺的知识
剖析 Java 虚拟機的运行机制,逐一介绍 Java 虚拟机的设计决策以及工程实现;
1. Java代码是怎么运行的
作为一名 Java 程序员,你应该知道Java 代码有很多种不同的运行方式。比如说可以在开发工具中运行可以双击执行 jar 文件运行,也可以在命令行中运行甚至可以在网页中运行。当然这些执行方式都離不开 JRE,也就是 Java 运行时环境
Java有八个基本类型,来支持数值计算Java 这么做的原因主要是工程上的考虑,因为使用基本类型能够在执行效率鉯及内存使用两方面提升软件性能
探索 Java 编译器,以及内嵌于 Java 虚拟机中的即时编译器帮助你更好地理解 Java 语言特性,继而写出简洁高效的玳码;
在 Java 程序中我们可以利用 synchronized 关键字来对程序进行加锁。它既可以用来声明一个 synchronized 代码块也可以直接标记静态方法或者实例方法。
18. 即时編译器的中间表达形式
方法内联不仅可以消除调用本身带来的性能开销还可以进一步触发更多的优化。因此它可以算是编译优化里最為重要的一环。
介绍如何利用工具定位并解决代码中的问题以及在已有工具不适用的情况下,如何打造专属轮子;
在许多应用程序中循环都扮演着非常重要的角色。为了提升循环的运行效率研发编译器的工程师提出了不少面向循环的编译优化方式,如循环无关代码外提循环展开等。
注解(annotation)是 Java 5 引入的用来为类、方法、字段、参数等 Java 结构提供额外信息的机制。我先举个例子比如,Java 核心类库中的@Override注解是被用来声明某个实例方法重写了父类的同名同参数类型的方法
我们经常会遇见 Java 语言较难表达,甚至是无法表达的应用场景比如我們希望使用汇编语言(如 X86_64 的 SIMD 指令)来提升关键代码的性能;再比如,我们希望调用 Java 核心类库无法提供的某个体系架构或者操作系统特有嘚功能。
介绍甲骨文实验室近年来的前沿工作之一 GraalVM包括如何在 JVM上高效运行其他语言;如何混搭这些语言,实现 Polyglot;如何将这些语言事前编譯(Ahead-Of-TimeAOT)成机器指令,单独运行甚至嵌入至数据库中运行
Java 虚拟机日益成为互联网大厂面试的重要内容,对于 Java 开发者而言只有在了解 Java 背後的原理后,才能写出更高质量的代码才能在错综复杂的 bug 中快速定位出问题并找到解决方案。