【Deerhang】

  • 我们知道Java程序的运行是依赖于JVM虚拟机的,JVM类语言经过编译生成class字节码文件,字节码又经JVM进一步的编译生成机器码,最终运行在硬件上。那么JVM存在的意义是什么?

    • 拿Java语言为例,Java是一门高级的计算机语言,它的实现复杂、抽象程度高,是无法将这种高级语言生成的程序直接运行在硬件上的,需要JVM替我们进行进一步的编译才可以实现。
    • JVM替提供了一个托管环境,这个托管环境替代我们处理了一些冗长且容易出错的逻辑判断(类似于数组越界),我们的重心可以更多的放在业务代码上。托管环境提供的最重要的功能就是垃圾回收和内存自动分配。
  • class字节码文件无法直接运行在硬件上,需要经过JVM进一步编译才能运行,那么JVM是如何编译字节码文件的呢?

    • 首先字节码文件会被加载到JVM的方法区中,程序运行时所需的类文件全部从方法区中获得。 JVM使用解释执行和及时编译两种方式对字节码进行编译,两种编译的区别如下

      • 1、 解释执行:将字节码逐翻译成机器码执行,翻译策略与解释性语言相同,如Python、JavaScript,特点是运行无需等待编译,可以直接执行。执行参数:-Xint,-Xint会开启JVM的解释执行策略,降低程序的执行性能。
      • 2、即使编译:将整段代码编译成机器码,真正运行的时候直接执行的是机器码,及时编译的特点是实际运行速度更快。执行参数:-Xcomp,-Xcomp会开启JVM的及时编译策略,一次性将字节码编译成机器码,以换取做高的执行效率
      • 3、混合模式:混合模式默认使用了解释执行和及时编译,先使用解释执行执行字节码,然后使用及时编译对热点数据进行编译。JDK默认使用混合模式,对应的参数是:-Xmixed
  • JVM如何提升程序执行效率

    • JVM应用及时编译技术,对字节码的编译进行优化,以提升启动性能和峰值性能。JVM的及时编译器有两种:c1编译器和c2编译器,两种编译器的巨鳖如下:

      • 1、c1编译器又叫client编译器,编译器会对字节码进行简单高效的编译,编译时间短,适用于对启动性能要求高的场景,执行参数:-client。
      • 2、c2编译器又叫server编译器,编译器会对字节码进行过度编译,编译时间久,适用于对峰值性能要求高的场景,执行参数:-server。
    • c1编译器和c2编译器的优化策略区别如下:
      • 1、c1编译器主要通过内联、去虚拟化、消除冗余的方式进行优化。

        • 内联:将引用方法编译到引点位置,减少栈帧的产生、参数传递产生的性能损耗。
        • 去虚拟化:针对唯一子类进行内联。
        • 消除冗余:折叠无用的代码。
      • 2、c2编译器主要是基于对象的逃逸分析,进行编译优化
        • 栈上分配:针对没有产生方法逃逸的对象,进行栈上分配而非堆分配,以减少垃圾对象回收带来的性能损耗。
        • 同步清除:针对没有产生线程逃逸的对象,消除同步限制。
        • 标量替换:用标量替换对象的创建,减少垃圾对象回收。
  • 逃逸分析可以分为方法逃逸和线程逃逸两种方式:

    • 方法逃逸:(1)方法内创建的对象,没有作为参数传递给其他方法;(2)方法内创建的对象没有作为返回值返回。
    • 线程逃逸:一个对象只会被单个线程访问。
    • 逃逸分析相关参数:
      • 逃逸分析:-XX:+DoEscapeAnalysis
      • 标量替换:-XX:+EliminateAllocations
      • 同步消除:-XX:+EliminateLocks

【原创】JVM如何运行Java程序的?的更多相关文章

  1. 在云端服务器centos7安装jvm并且运行java程序

    (1)在云端服务器 下载jdk http://www.linuxidc.com/Linux/2016-09/134941.htm(大致看这个文章后可以下载一个jdk的压缩包,然后将压缩包解压) 然后, ...

  2. Java魔法堂:以Windows服务的形式运行Java程序

    一.前言 由于防止维护人员误操作关闭Java控制台程序,因此决定将其改造为以Windows服务的形式运行.弄了一个上午总算搞定了,下面记录下来,以供日后查阅. 二.Java Service Wrapp ...

  3. 在 Sublime Text 3 中配置编译和运行 Java 程序

    参考网址:http://www.open-open.com/lib/view/open1388105023765.html 1. 设置 java 的 PATH 环境变量 2. 创建批处理或 Shell ...

  4. JAVA设置环境变量和在DOS下运行java程序

    在学校实训的这几天,老师带着我们开始深入的复习java.这是第一天的内容哦 对于“JAVA设置环境变量和在DOS下运行java程序”,许多初学者是陌生的,但了解这个却对后期的学习很重要. http:/ ...

  5. 【转】如何配置EditPlus中Java运行环境,运行Java程序

    如何配置EditPlus中Java运行环境,运行Java程序 http://jingyan.baidu.com/article/86112f13725e2e2736978711.html 分步阅读 E ...

  6. cmd 窗口中运行 Java 程序

    1.CMD 命令提示符(Command Processor)(CMD) CMD命令:开始->运行->键入 cmd(在命令行里可以看到系统版本.文件系统版本) 2.对文件夹操作的部分命令 启 ...

  7. java学习笔记(1)java的基础介绍 、JDK下载、配置环境变量、运行java程序

    java工程师是开发软件的 什么是软件呢? 计算机包括两部分: 硬件: 鼠标.键盘.显示器.主机箱内部的cpu.内存条.硬盘等 软件: 软件包括:系统软件和应用软件 系统软件:直接和硬件交互的软件:w ...

  8. IDEA部署项目,并结合Shell脚本运行Java程序

    一.概述 在实际开发中,我们写好的代码,往往打成war包或jar包,通过winscp或其他软件将其上传至服务器,然而这样非常大的一个弊端就是不利于开发,为什么这么说呢?假如我们刚刚将springboo ...

  9. Docker极简入门:使用Docker运行Java程序

    运行简单的Java程序 先在当前目录创建App.java文件 public class App{ public static void main(String[] args){ String os = ...

随机推荐

  1. python数据分析三剑客基础之matpoltlib初解

    一.什么是matplotlib? python的底层绘图工具,主要做数据可视化图表,源自matplot. 二.为什么要学matplotlib? 1.它能将数据进行可视化,更直观的呈现出来 2.它能让数 ...

  2. JAVA视频资料百度网盘分享

    1.javascript视频教程 链接: http://pan.baidu.com/s/1gd57FVH 密码: d9ei 2.JPA视频教程 链接: http://pan.baidu.com/s/1 ...

  3. CSS水平布局

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  4. 【LeetCode】10.Regular Expression Matching(dp)

    [题意] 给两个字符串s和p,判断s是否能用p进行匹配. [题解] dp[i][j]表示s的前i个是否能被p的前j个匹配. 首先可以分成3大类情况,我们先从简单的看起: (1)s[i - 1] = p ...

  5. nodeJS详解2

    Nodejs应用场景 创建应用服务 web开发 接口开发 客户端应用工具  gulp webpack vue脚手架 react脚手架 小程序 NodeJs基于 Commonjs模块化开发的规范,它定义 ...

  6. 2021华为软件精英挑战赛(C/C++实现)-苦行僧的实现过程

    下面给出2021华为软件精英挑战赛参与的整个过程,虽然成绩不是很好,但是也是花了一些时间的,希望后面多多学习,多多进步. 代码已经上传到了Github上:https://github.com/myFr ...

  7. 优化 ASP.NET Core Docker 镜像的大小

    在这容器化的世界里,我们已经很少直接通过文件发布来运行asp.net core程序了.现在大多数情况下,我们都会使用docker来运行程序.在使用docker之前,我们往往需要打包我们的应用程序.as ...

  8. 【LiteOS】LiteOS任务篇-源码分析-创建任务函数

    目录 前言 链接 参考 笔录草稿 部分源码分析 源码分析 LOS_TaskCreate函数 LOS_TaskCreateOnly函数 宏 OS_TCB_FROM_PENDLIST 和 宏 LOS_DL ...

  9. 【故障公告】阿里云 RDS SQL Server 数据库实例 CPU 100% 引发全站故障

    非常抱歉,今天 8:48 开始,我们使用的阿里云 RDS SQL Server 数据库实例突然出现 CPU 100%  问题,引发全站故障,由此给您带来麻烦,请您谅解. 发现故障后立即进行主备切换,和 ...

  10. 如何快速搭建自己的ERP系统,4步源码快速安装odoo教程

    上一篇内容:了解什么是Odoo,为二次开发做准备 1.下载odoo源码 Github地址:https://github.com/odoo/odoo Gitee地址:https://gitee.com/ ...