java虚拟机——总章

image-20190107213747514


I’m not looking for somebody with some superhuman gifts
我并不渴求那些超人类的天赋
Some superhero
那种超级英雄
Some fairytale bliss
那些童话般的天赐之福
Just something I can turn to
只是一些我能力所能及的事情
Somebody I can kiss
吻到我爱的人就好
I want something just like this
我想要的不过是这些
something just like this
仅仅是这些而已

2019第一篇文章,java虚拟机系列文章总章,2019,遇见更好的自己!

一、jvm概念

概述

java虚拟机(英语:Java Virtual Machine,缩写为JVM),可以使计算机运行java程序或其他语言编写能被编译成java字节码的程序。java虚拟机实现由java虚拟机规范来要求。使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行,也就是“一次编译,到处运行”。

Wiki

A Java virtual machine (JVM) is a virtual machine that enables a computer to run Java programs as well as programs written in other languages that are also compiled to Java bytecode. The JVM is detailed by a specification that formally describes what is required of a JVM implementation. Having a specification ensures interoperability of Java programs across different implementations so that program authors using the Java Development Kit (JDK) need not worry about idiosyncrasies of the underlying hardware platform.

上面这个是我是找了下wiki和百度的解释,虽然也不难理解,但我决定还是作一下类比让大家更好明白点。

白话版

首先,作为一个后端开发程序员,大多数人应该都用过vmware这款虚拟机吧,他基本上也就干了个和java虚拟机类似的事。当软件工程师开发一个.exe文件,这东西正常来说只能在window运行,换成macos、linux就没啥用了,那咋整,现在弄个装windows的虚拟机,我这.exe文件都在虚拟机上运行,这样就不用管是macos,还是linux,还是windows,反正是只要你有这个虚拟机,我这个.exe就能运行,这样就平台无关了。

然后吧,虚拟机也有macos版、linux版,java虚拟机也类似有不同的平台的版本。虚拟机有vmware,virtualbox等等,但只要虚拟机有win系统都能运行不同的.exe文件,符合一定的规范,同样的java虚拟机也有根据规范实现不同的虚拟机,例如最常用的Sun Hotspot,IBM公司的IBM J9 VM等,虽然有不同的实现但都遵循java虚拟机规范。

所以,java虚拟机真的不是什么妖魔鬼怪,就和我们平时用的虚拟机一样。由于我们需要用java语言开发,所以深入了解java虚拟机就异常重要了。jvm帮助我们管理内存,进行垃圾回收,只有熟悉虚拟机原理才能更好的理解各种内存溢出异常,才能写出gc友好的代码,才能对虚拟机参数进行合适的优化。

二、学习重点

本系列文章主要针对如下几个知识点:

  1. jvm内存结构
  2. 垃圾回收机制
  3. 类加载机制

也就是《深入了解java虚拟机》中的第二部分和第三部分。这里主要以java7为主,但我会适当的与java8进行对比的。

image-20190107073338758

三、专有名词解释

罗列了一些我在学习jvm过程中遇到的一些名词。

JCP与JSR

JCPJava Community Process)成立于1998年,是使有兴趣的各方参与定义Java的特征和未来版本的正式过程。JCP使用JSR(Java规范请求,Java Specification Requests)作为正式规范文档,描述被提议加入到Java体系中的的规范和技术。JSR变为final状态前需要正式的公开审查,并由JCP Executive Committee投票决定。最终的JSR会提供一个参考实现,它是免费而且公开源代码的。在JCP官网http://www.jcp.org 中可以查看所有的JSR,下面列举几个大家熟悉的JSR:

1、JSR 14,泛型

2、JSR 51,NIO

3、JSR 175,注解

4、JSR 201,枚举以及自动装箱等

HotSpot

HotSpot的正式发布名称为”Java HotSpot Performance Engine”,是Java虚拟机的一个实现,包含了服务器版和桌面应用程序版,现时由Oracle维护并发布,编写语言是C++。它利用JIT及自适应优化技术(自动查找性能热点并进行动态优化,这也是HotSpot名字的由来)来提高性能。如果你在命令行中使用java -version命令就会见到下面这张图的信息。

image-20190107071121340

包括java的版本、java虚拟机的信息、及相应的位数。

JIT

JIT(英语:Just-in-time compilation)译为即时编译、实时编译,动态编译的一种形式,是一种提高运行效率的方法。通常,程序有两种运行方式:静态编译和动态解释。静态编译的程序在执行前全部被翻译为机器码,而解释执行的则是一句一句边运行边翻译。即时编译器则混合了这二者,一句一句编译源代码,但是会将翻译过的代码缓存起来以降低性能损耗。

即时编译器有两种类型,一是字节码翻译,二是动态编译翻译。微软的.NET Framework,还有绝大多数的Java实现,都依赖即时编译以提供高速的代码执行。Mozilla Firefox使用的JavaScript引擎SpiderMonkey也用到了JIT的技术。Ruby的第三方实现Rubinius和Python的第三方实现PyPy也都通过JIT来明显改善了解释器的性能。

java技术体系
  • java设计语言
  • java虚拟机
  • Class文件格式
  • Java API类库
  • 来自商业机构的第三方类库

这是Sun公司定义的java技术体系,不过实际上像Scala、Groovy、JRuby这种可以编译为.class文件并运行在jvm上的语言也应该属于Java技术体系中的一员。

四、总结

集合、IO、多线程、虚拟机,java基础知识四大块,本系列文章将是我学习虚拟机的总结。这个系列将重点讲述java内存模型、垃圾回收机制、类加载机制几个方面的内容。

2019,不要停下前进的脚步!


参考资料

  1. 深入了解Java虚拟机,周志明
  2. Java虚拟机1:什么是Java
  3. jvm知识总览
0%