zoukankan      html  css  js  c++  java
  • JVM解释器和编译器

    首先看一个命令

    [root@insure ~]# java -version
    java version "1.8.0_191"
    Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
    Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

    再看几个名词

    Java(TM) SE Runtime Environment (build 1.8.0_191-b12) java运行环境

    hotspot包括server和client两种模式的实现:

    Java HotSpot Client VM(-client),为在客户端环境中减少启动时间而优化;

    Java HotSpot Server VM(-server),为在服务器环境中最大化程序执行速度而设计。

    mixed mode 表示是混合模式 解释器和编译器都有

    启动时间上client模式较快,运行速度上server模式较快,最重要的是server垃圾回收处理的好。

    以idea为例

    在配置文件D:Program FilesJetBrainsIntelliJ IDEA 2018.2.1jre64libamd64下有一个

    jvm.cfg文件

    -server KNOWN
    -client IGNORE  #idea直接忽略掉了client模式

    再看/jre/bin目录下面,竟然只有server文件夹,看来真的忽略了client模式

    在centos7的服务器上面看了一下配置  jdk8也忽略掉了client模式

    在主流商用JVM(HotSpot、J9)中,Java程序一开始是通过解释器(Interpreter)进行解释执行的。当JVM发现某个方法或代码块运行特别频繁时,就会把这些代码认定为“热点代码(Hot Spot Code)”,然后JVM会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为:即时编译器(Just In Time Compiler,JIT)

    编译器和解释器的区别

    java编译器:将Java源文件(.java文件)编译成字节码文件(.class文件,是特殊的二进制文件,二进制字节码文件),这种字节码就是JVM的“机器语言”。javac.exe可以简单看成是Java编译器。

    java解释器(英语:Interpreter):是JVM的一部分。Java解释器用来解释执行Java编译器编译后的程序。java.exe可以简单看成是Java解释器。

    在结合一段程序理解

    public class Test {
        public static void main(String[] args) {
            System.out.println("hello world");
        }
    }

    第一次运行代码:编译->解释->生成机器码(即生成Test.class文件)

     第二次编译:编译->执行(JIT即时编译,不用再生成.class文件,提高运行效率)

    当程序需要迅速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间,立即执行。

    编译器可以逐渐发挥作用,把越来越多的代码编译成本地代码,之后可以获得更高的效率(占内存)

    解释器与编译器搭配使用的方式:
    1、默认(java -version混合模式)
    2、解释模式(java -Xint -version)仅使用解释器方式执行
    3、编译模式(java -Xcomp -version)优先采用编译方式执行程序,但解释器要在编译无法进行的情况下介入执行过程 

  • 相关阅读:
    Redis主从复制、哨兵Sentinel、集群简单介绍
    Redis集群
    Redis哨兵模式
    Redis主从架构
    Redis持久化方式
    缓存2.2——Redis并发竞争
    DOM内容梳理2
    纯js制作九宫格
    正则表达式内容梳理
    JavaScript之DOM详解
  • 原文地址:https://www.cnblogs.com/mutong1228/p/10311120.html
Copyright © 2011-2022 走看看