Android专题Java专题JVM篇

Android开发:JVM,为何成为面试中频频出现的高热考点

2020-10-28  本文已影响0人  千夜零一

1、JVM与Java与Android应用的关系

  JVM,其中VM,即Virtual Machine,虚拟机;JVM中的J,即Java,合起来称为:Java虚拟机。
  Java语言,从认识这门语言之初,我们就被灌输着这样的概念:Java语言是一门跨平台的语言。java语言相对于C语言,就是多了JVM。
  Android应用,很多app都采用java语言来实现,当然现在也多了Kotlin语言。java里,我们只需要关心业务逻辑代码,而不用关心内存分配、内存回收、如何与操作系统进行交互等问题,为什么?因为我们在IDE中做的,AndroidStudio也好、Eclipse也好,都是如此。


2、为什么JVM如此受欢迎,现如今的面试题中为何屡见不鲜?

  JVM越来越受欢迎,是因为它封装了底层结构,让开发者不用关心底层,屏蔽了硬件和操作系统层面的操作。懂得 JVM 内存结构,工作机制,是设计高扩展性应用和优化性能的基础,阻碍程序运行的永远是我们对硬件使用的效率,对硬件使用效率的高低决定了我们程序执行的效率。
  换句话说,如果你想要你的应用优化到极致,快的飞起,流畅到飞起,与JVM打交道做性能优化,是最本质的优化方案!
  这也是为何各大厂都频频在面试中提到JVM的原因。因为优化做得好,就能超过同行,电商平台竞争尤其激烈!


3、真正从底层了解JVM是什么

  JVM已经超脱于Java。众所周知,java是一门跨平台的语言,而JVM则恰恰相反,是一门跨语言的平台。
java:跨平台的语言。


JVM:跨语言的平台。

  从java角度来看,我们需要将Java代码先编译再运行,java代码编译之后生成的并不是计算机可识别的二进制文件,而是一种特殊的.class标准字节码文件,这种.class文件只有JVM才能识别,而这个Java虚拟机担当着解释器的角色,它会在程序运行时将编译后的class文件解释成计算机可识别的二进制数据后再执行,这就是java语言底层的实现原理。
  从Android角度来看,如果采用Java语言来写,Java代码编译之后生成的class文件,这种class文件则交由Android中的ART(一种移动优化版的虚拟机)。如果采用Kotlin语言来写,只是换了一种编译方式,还是生成与java同样的class文件然后通过JVM进行解释运行在计算机上。这也是为何kotlin可以用来进行Android应用开发的原因。


4、JVM可以解决什么问题?


5、JVM于java进程之间的关系

  我们都知道一个程序的运行基本单位是进程,一个进程的基本单位是线程。java程序本质是跑在JVM上的,严格来讲,是跑在一个JVM的实例上的。一个JVM实例其实就是JVM跑起来的进程,两者合起来称作:一个java进程。


6、JVM与进程之间的关系

  每个运行的程序对应一个JVM实例。每个java程序都运行在一个单独的JVM实例上,互不影响,因此所一个java程序的多个线程,共享对内存(new创建的实例存放在堆区)。
  总的来说,操作系统的执行单元是进程,每一个JVM实例就是一个进程(对应我们的应用程序),而在该实例上运行的主程序是一个主线程(对应我们应用的进程),该程序下还存在很多线程。一个JVM实例对应一个Runtime(运行时数据区)对象,我们可以从该Runtime对象中获取一些参数,比如堆内存的初始值和最大值。


7、JVM的组成部分


8、大厂自己定制的JVM:Taobao JVM

  这是阿里自己开发的基于OpenJDK定制的JVM。目前应用于天猫、淘宝,全面替代 Oracle 官方 JVM。

  特点:
  1. 提出了 GCIH 技术,把生命周期较长的对象放到堆外了,提高了 GC 效率,降低了 GC 频率
  2. GCIH 中的对象可以在多个 JVM 实例中相互共享
  3. 使用 crc32 指令降低 JNI 开销
  4. 针对大数据场景的 ZenGC

9、学好JVM的好处

  JVM 是最终承载我们代码的地方,你的服务运行的好不好,卡不卡不都看 JVM 的反馈。另外,当然是为了满足面试需求了!

上一篇 下一篇

猜你喜欢

热点阅读