怎么运行java虚拟机_Java代码如何运行在Java虚拟机中

我们都知道要运行Java代码就必须要有JRE,也就是Java运行时环境,JRE中包含了Java程序的必需组件,包括Java虚拟机以及Java核心类库,然而运行C++代码则不需要额外的运行时环境,只需要把代码编译成CPU能识别的指令即可,也就是机器码.那为什么Java不直接像C++那样而需要在虚拟机中运行呢?他在虚拟机中又是如何运行的?接着往下看.

Java为什么要在虚拟机中运行

刚才我们谈到C++是直接把代码编译成机器码的,但因为各个平台的架构不一样,CPU能处理的指令集也不一样,所以如果要在另一个平台上运行C++代码,就必须用该平台对应的C++代码编译器重新编译一遍才可以.Java一开始就意识到需要跨平台运行,所以Java设计了虚拟机,先将Java代码编译成字节码(class文件),这是虚拟机能够识别的指令,再由虚拟机内部将字节码翻译成机器码,所以我们只需要有Java字节码,就可以在不同平台的虚拟机中运行,这也就是我们一直说的"一次编译,到处运行".

Java虚拟机如何运行Java字节码

我们JDK所用的虚拟机名为HotSpot虚拟机,他会将所有class文件加载进来,加载后的Java类会被放置在方法区,后面运行时会执行其中的代码.Java虚拟机会在内存中划分出几块,包括程序计数器,本地方法栈,Java虚拟机栈,堆以及方法区.

不过光是Java字节码还是无法运行,Java虚拟机还需要将字节码翻译成机器码,HotSpot有2种形式:第一种是解释执行,即将字节码逐条翻译成机器码并运行;第二种是即时编译(JIT),他会将一个方法内的所有字节码编译成机器码再执行.

9df5744cef0dbadd54bcd56250004d2a.png

前者的优势无需等待编译,但逐条解释的代价就是运行速度会比后者慢,HotSpot默认采用混合模式,它会先解释执行字节码,然后对于反复执行的热点代码会去进行即时编译.

即时编译是监理在复合二八定律的基础上,即百分之20的代码占据百分之80的计算资源.对于不常用的代码我们无需消耗时间在编译成机器码上,采用解释执行就可以,而对于热点代码我们可以将其编译成机器码以提升运行速度.

HotSpot内置了几个即时编译器:Client Complier和Server Complier,简称为C1、C2编译器,以便在编译时间和生成代码的执行效率之间做取舍,C1编译时间更快,C2编译质量更高.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574100.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 验证码 添加背景图_java登陆界面怎么加背景图 会的我加你

publicvoiduserInit(){this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭框架的同时结束程序this.setSize(500,300);//设置框架大小为长500,宽300this.setResizable(fa...public void userInit(){this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关…

【AJAX】AJAX实现搜索信息自己主动推荐并补全

好久没有继续看AJAX的视频教程了,今天就将最后一个教程案例做完。我们在搜索引擎中输入文字时文本框下会提示对应的信息,这个案例就是实现这样的基本功能,代码比較粗糙还须要进一步完好,当中有些地方也须要向大神们请教一下。完毕效果截图&am…

n个骰子的点数 java_n个骰子的点数和为s的概率集合输出(Java)

问题描述:把n个骰子仍在地上,所有骰子朝上一面的点数之和为s,输入n,打印出s的所有可能出现的概率问题分析:这是一道应用动态规划思想的题目,而动态规划最难的就是要找最优子结构。并采取一种称为备忘录的方法避免重复计算。因为备…

2015的最后一天

今天是2015年的以后一天,3点半就要下班了。 也是我毕业,来到这家公司第5个月。 毕业后,去学习php,我喜欢这个,希望通过自己的努力给自己一个未来。 没什么可说的,加油吧,2016!&#…

java se是不是java_Java SE和java EE究竟有什么实质上的区别

1、Java SE:Java SE 是Java平台标准版的简称(Java Platform, Standard Edition) (also known as Java 2 Platform) ,用于开发和部署桌面、服务器以及嵌入设备和实时环境中的Java应用程序。Java SE包括用于开发Java Web服务的类库,同时,Java S…

使用IntelliJ IDEA 14和Maven创建java web项目

安装Maven 下载安装 去maven官网下载最新版。 解压到安装目录。 配置 右键桌面的计算机图标,属性–>高级系统设置–>环境变量,添加M2_HOME的环境变量,然后将该变量加入的PATH中。 注意 必须要有JAVA_HOME和个环境变量,不然m…

工作那点小事

目录 工作那点小事总结回到顶部工作那点小事 离开了“火龙果”,领导,领导的领导,领导的领导的领导,同事,同事等等,给你上了一堂课。 面试时,问:为什么离开上一家公司?答&…

java textfield赋值_Java中怎么把运行结果显示到textfield中

两种办法:1) 在原有方法里加设置到textfield的命令public static void ipaddress(){try{InetAddress inet InetAddress.getLocalHost();System.out.println(inet.getHostAddress());text1.setText(inet.getHostAddress());//new added}catch(UnknownHostException e){System.e…

01算法 java_蓝桥杯:基础练习 01字串【JAVA算法实现】

题目描述对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:0000000001000100001100100请按从小到大的顺序输出这32种01串。输入格式本试题没有输入。输出格式输出32行,按从小到大的顺序每行一个长度为…

Testlink1.9.5的安装配置

前两天搭建了Testlink环境,在这里整理记录下过程中遇到的问题以及搭建流程。Testlink版本:1.9.5操作系统:Windows7 32bit 步骤一:安装XAMPP 下载解压xampp压缩包,点击安装包xampp-win32-1.8.0-VC9-installerservice se…

Git的基础

http://backlogtool.com/git-guide/cn/intro/intro2_3.html转载于:https://www.cnblogs.com/liucyi/p/5107806.html

UIAutomator输入中文

之前一直是英文的测试环境,包括手机也是英文的,app也是英文的,涉及不到中文输入法的东西。但现在在写中文的app,所以需要输入中文。看到网上的解决办法如下: 下载https://github.com/sumio/uiautomator-unicode-input-helper源码 …

java 自定义解码_[求助],java如何使用自定义注解对入参进行解密?

正好之前做过自定义ArgumentResolver相关的开发。先指出你的一个问题,ArgumentResolver是对你Controller方法上的单个参数进行解析,也就是说,你的参数是什么类型,就要return什么类型,直接返回一个String除非你的参数就…

java 视频 缩略图_如何使用java提取视频缩略图或某一帧的图片

[Java] 纯文本查看 复制代码public class CreateImage {/*** 获取指定视频的帧并保存为图片至指定目录* [urlhome.php?modspace&uid952169]Param[/url] videofile 源视频文件路径* param framefile 截取帧的图片存放路径* throws Exception*/public static void fetchFram…

jni java返回数组_Android开发实践:Java层与Jni层的数组传递

Android开发中,经常会在Java代码与Jni层之间传递数组(byte[]),一个典型的应用是Java层把需要发送给客户端的数据流传递到Jni层,由Jni层的Socket代码发送出去,当然,Jni层也需要把从Socket接收到的数据流返回给Java层。我…

查出数字字符字段中非数字字符的记录

最近,将原来的数字符字段转换为数字时,总报错误:无效数字。 如何找出其中哪些是非数字字符的记录?比较麻烦的事。下面是用Oracle DB自带的函数translate可以找出来的 1.创建测试表 Create Table TestChar( ITEM_NUMBER VARCHAR…

jsp mysql 注入_由Jsp+Mysql注入到root权限的全程展 【好久没有安全类文章了,转一篇看看】...

由JspMysql注入到root权限的全程展最近有点空闲,所以写点垃圾文章来消磨一下时间.文中没有什么技术含量,如果要转载,请注明作者并保持文章的完整.很多人可能都知道asp,php的编程要防止sql注入漏洞,而并不知道jsp编程同样也需要防备sql注入漏洞.其实,一旦jsp代码有注入漏洞,将直…

MySQL Replication Error 处理一例

故障现象 MySQL slave status详情 mysql> show slave status\G *************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 10.10.10.101Master_User: rootMaster_Port: 3306Connect_Retry: 60Master_L…

java中的time_java中的Time处理

得到当前时间1. Calendar.getInstance().getTime();2. new Timestamp(System.currentTimeMillis());3. new Timestamp((Calendar.getInstance().getTime()).getTime());--------------------------------|date------------------------------------------------------Simple…

ubuntu14.04LTS openssh-server 手动安装配置步骤

先用能上网的机器下载:zlib-1.2.5.tar.bz2、openssh-5.6p1.tar.gz、openssl-0.9.8o.tar.tar,接下来,准备安装。 步骤如下: 1、首先解压安装zlib:tar -xf zlib-1.2.5.tar.bz2,会在当前目录下生成zlib目录。进…