关于jvm:JVM笔记-Java跨平台和JVM跨语言

40次阅读

共计 2320 个字符,预计需要花费 6 分钟才能阅读完成。

学习 JVM 的重要性

从下层应用程序到底层操作系统,到底有哪些货色?


平时开发的应用程序次要基于各种框架,譬如 Spring,SpringMVC,Mybatis, 而各种框架又是基于Java API 来实现的,Java API调用执行是在 JVM 上的,而 JVM 则是运行在操作系统上的,操作系统是在物理机器打交道的。

在框架上进行业务开发,或者学习框架如何应用,是大部分开发者的工作。然而实际上咱们不该执着于框架该如何应用, 而是应该往下走,个别最初遇到的问题都会到 JVM 和操作系统的问题。即便当初的 JVM 曾经很欠缺,帮开发者做了很多事,然而咱们不该以此为理由不去理解 JVM 的原理。架构师把开发者变成温室里的花朵和温水里的青蛙,如果有一天呈现以下问题,该怎么解决:

  • 运行零碎卡死,零碎无法访问,间接 OOM
  • 线上 GC(垃圾回收)有问题,须要 dump 内存,进行剖析。
  • 新我的项目上线,须要对系统进行评估,设置 JVM 的参数。
  • 面试时被问及理论我的项目中 JVM 参数调优。

简直所有的高级语言在交给机器 CPU 执行之前,都会经验 高级语言 –> 汇编语言 –> 机器指令 的过程,因为计算机是不会间接辨认高级语言的。理解高级语言如何转换成能被机器辨认的语言,是开发者必须把握的技能。

JavaC++ 多了动态内存调配以及垃圾回收技术,Java的虚拟机帮开发者做了垃圾收集,编译优化等一系列工作,外面的垃圾收集算法有哪些?怎么执行的?JIT编译器是怎么工作的?这些往往也是面试常谈的话题。懂得 JVM 的外部机构和工作机制,有利于设计高拓展的利用和疾速诊断运行时的问题。

如何学习 JVM

去官网找虚拟机标准(英文版):
https://www.oracle.com/cn/jav…

找到:Java Language and Virtual Machine Specifications:

关上之后是:https://docs.oracle.com/javas… , 也就是 Java 语言和虚拟机的标准。

能够抉择以下书籍,如果是初学,最好学周志明老师的深刻了解 Java 虚拟机,虚拟机标准会间接劝退:

  • Java 虚拟机标准(Java SE 8 版
  • 深刻了解 Java 虚拟机(JVM 高级个性与最佳实际)

Java标准只是规范,不同的版本标准不一样,同一个版本的标准在不同的虚拟机上有不一样的实现,初学者应该从最热门支流的 HotSpot 虚拟机开始, 也就是 Oracle 本人推出的 Java 虚拟机。

通过 cmd 能够看出,我装的 Java 环境应用的就是 64 位的 HotSpot 虚拟机:

如何真正搞懂 JVM?

在理解 JVM 标准和原理的状况下,本人手动实现一个繁难的 Java 虚拟机。对于大部分人来说,挺难的,然而世间万物,为之则不难,不为,则难。平步青云则难,步步为营则不难。

语言排行版,目前 Java 是第二名:
https://www.tiobe.com/tiobe-i…

世界上没有最好的编程语言,须要依照具体的应用场景来谈话。

Java 跨平台怎么了解?

Java 是一门跨平台语言,所谓跨平台就是,Java 源文件会被编译成为字节码文件,不论是 Windows,Linux 还是 Mac,都有其适配的 JVM,也就是字节码文件能够随便在这些 JVM 下来运行。

Write once,run anywhere.

其余的语言,例如 c 语言,编译成为机器码之后,因为底层的机器语言反对不一样,编译后的机器语言文件是不能够跨操作系统运行的。而 Java 则是把兼容的工作,交给了 JVM。不同的 JVM 负责去适配不同的操作系统。

所有的 Java 虚拟机都恪守 java 虚拟机的标准,语言编写者不须要思考兼容问题。

Java 虚拟机是 Java 平台的基石。它是技术的组成部分,负责硬件和操作系统的独立性,已编译代码的小尺寸以及爱护用户免受恶意程序攻打的能力。
Java 虚拟机是形象的计算机。像真正的计算机一样,它具备指令集并在运行时操作各种内存区域。应用虚拟机实现编程语言是相当广泛的。最出名的虚拟机可能是 UCSD Pascal 的 P 代码计算机。

JVM 跨语言怎么了解?

JVM是跨语言的平台,很多语言都能够编译成为恪守标准的字节码,这些字节码都能够在 Java 虚拟机上运行。Java 虚拟机不关怀这个字节码是不是来自于 Java 程序,只须要各个语言提供本人的编译器,字节码遵循字节码标准,比方字节码的结尾是CAFEBABY

将各种语言编译成为字节码文件的编译器,称之为前端编译器。而 Java 虚拟机中,也有编译器,比方即时编译器,此处称为后端编译器。

Java虚拟机要做到跨语言,目前来看应该是当下最弱小的虚拟机。然而并非一开始设计要跨语言。

跨语言的平台有利于什么?
因为有了跨语言平台,多语言混合编程就更加不便了,通过特定畛域的语言去解决特定畛域的问题。

比方并行处理应用 Clojure 语言编写,展现层应用 JRuby/Rails, 中间层用Java 编写,每一应用层都能够应用不同的语言编写,接口对于开发者是通明的。不同语言能够互相调用,就像是调用本人语言原生的 API 一样。它们都运行在同一个虚拟机上。

何为字节码?

字节码广义上是 java 语言编译而成,然而因为 JVM 是反对多种语言编译的字节码的,而字节码都是一个标准规范,因为咱们应该称其为 JVM 字节码。

不同的编译器,能够编译出雷同的字节码文件,字节码文件也能够在不同操作系统上的不同 JVM 中运行。

因而,Java虚拟机实际上和 Java 语言并非强制关联的关系,虚拟机只和二级制文件(Class文件)强关联。

【作者简介】
秦怀,公众号【秦怀杂货店】作者,技术之路不在一时,山高水长,纵使迟缓,驰而不息。这个世界心愿所有都很快,更快,然而我心愿本人能走好每一步,写好每一篇文章,期待和你们一起交换。

正文完
 0