java代码是怎么运行的_java代码是什么

java代码是怎么运行的_java代码是什么1.Java代码有很多不同的运行方式1)可以在开发工具中运行2)可以双击执行jar文件运行,3)也可以在命令行中运行4)甚至可以在网页中运行这些执行方式都离不开JRE,也就是Java的运

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

 

 

 

 

1.Java代码有很多 不同的运行方式

  1)可以在开发工具中运行

  2)可以双击执行jar文件运行,

  3)也可以在命令行中运行

  4)甚至可以在网页中运行

  这些执行方式都离不开JRE ,也就是Java的运行环境。JRE仅包含运行Java程序的必须组件,包括Java虚拟机以及Java核心类库。Java程序员经常接触到的JDK同样包含JRE,并且还附带了一些开发、诊断工具

2.为什么Java要在虚拟机里运行

  Java作为一门高级程序语言,他的语法非常复杂,抽象程度也很高。直接在硬件上运行这种复杂的程序并不现实。所以在运行Java程序之前,我们需要进行一番转化。

  这个转化具体是怎么操作的呢?

  当前的主流思想,就是设计一个面向Java语言特性的虚拟机,并通过编译器将Java程序转换成哎虚拟机所能识别的指令序列,也称为Java字节码。(Java字节码指令的操作码opcode被固定为一个字节)。

  Java =写的helloword程序编译而成 的字节码。都是一个个字节组成的

# 最左列是偏移;中间列是给虚拟机读的机器码;最右列是给人读的代码
0x00:  b2 00 02         getstatic java.lang.System.out
0x03:  12 03            ldc "Hello, World!"
0x05:  b6 00 04         invokevirtual java.io.PrintStream.println
0x08:  b1               return

  Java 虚拟机可以由硬件实现 [1],但更为常见的是在各个现有平台(如windows、liunx)上提供软件实现。这样做的意义就是,一旦一个程序被转换成Java 字节码,那么他便可以在不同平台上的虚拟机实现运行。(一次编写,到处运行)。

  虚拟机的另外一个好处是他带来了一个托管环境(Managed Runtime)。他能够代替我们处理一些代码中的冗长而容易出错的部分。其中最广为人知的内存管理和垃圾回收。除此之外还提供了数组越界、动态类型、安全权限等动态检测,是我们免于书写这些无关业务逻辑的代码。

 3.Java虚拟机具体是怎样运行Java字节码的

  执行Java代码首先需要将他编译成class文件加载到Java虚拟机中。加载后的Java类会被存放于方法区(method area).实际运行时,虚拟机会执行方法区内的代码。Java虚拟机同样会在内存中划分出堆和栈来存储运行时数据。

  java代码是怎么运行的_java代码是什么

  在运行过程当中,每当调用一个Java方法,Java虚拟机会在当前线程的Java方法栈中生产一个栈帧。用于存放局部变量以及字节码的操作数。这个栈帧大小是提前计算好的,而且栈帧在内存空间里可以不是连续分布的。

  当退出当前执行的方法时,不管是正常返回还是异常返回,虚拟机均会弹出当前线程的当前栈帧,并将之舍去。

  Java字节码是无法执行的。因此,Java虚拟机需要将字节码翻译成机器码。在hotspot里面,有两种编译方式:第一种是解释执行,逐条将字节码翻译成机器码并执行;第二种是即时编译,讲一个方法中包含的所有字节码编译成机器码后执行。

java代码是怎么运行的_java代码是什么

  前者的优势在于无需等待编译,而后者的优势在于实际运行速度更快。hotspot默认采用混合模式,综合了解执行和即使编译两者的优点。他先解释执行字节码,而后将其中反复执行的热点代码,以方法为单位进行即时编译。

  4.Java虚拟机的运行效率究竟如何

    HotSpot采用了多种技术来提升启动性能以及峰值性能,即时编译便是其中最终要的技术之一。即时编译建立在程序符合二八定律的假设上,也即是百分之二十的代码占据了百分之八十的计算机资源。

  对于大部分的不常用的代码,我们无需耗费时间将其编译成机器码,而是采取解释执行的方式运行;另一方面对于仅占据小部分的带点代码,我们则可以将其编译成机器码,已达到理想的运行速度。

5.总结

  之所以要在虚拟机中运行,是他提供了可移植性。一旦Java代码被编译成Java字节码,变可以在不同平台上运行,虚拟机还提供了一个代码托管环境,代替我们处理部分冗长的代而且容易出错的事务。

  Java虚拟机将运行时内存区域划分为五个部分,分别为方法区、堆、pc寄存器、Java方法栈和本地方法栈。Java程序编译而成的calss文件,需要先加载至方法区中,Java虚拟机才能运行。

  为了提高效率,标准jdk中的hotspot虚拟机采用的是一种混合执行的策略。他会解释执行Java字节码,然后会将其中反复执行的热点代码,以方法为单位进行即时编译,编译成机器码后直接运行在底层硬件之上。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/166981.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 什么是按位或,什么是按位异或,什么是按位与?「建议收藏」

    什么是按位或,什么是按位异或,什么是按位与?「建议收藏」&按位与|按位或^按位异或1.按位与运算按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。例如:9&5可写算式如下:00001001(9的二进制补码)&00000101(5的二进制补码)00000001(1的二进制补码)可见9&am…

  • C#利用微软企业库Enterprise Library操作mysql数据库

    C#利用微软企业库Enterprise Library操作mysql数据库在C#项目中,很多时候到要用到EnterpriseLibrary。这里只是用一个很简单的小例子来演示一下EnterpriseLibrary在VS2010中操作mysql数据库的流程。1,利用EnterpriseLibrary操作mysql数据库。首先要具备一下天剑     (1)项目中要引用MySql.Data和MysroSoft.Practices.EnterpriseLibra

    2022年10月20日
  • 快速傅里叶变换(FFT)算法【详解】[通俗易懂]

    快速傅里叶变换(FFT)算法【详解】[通俗易懂]快速傅里叶变换(FastFourierTransform)是信号处理与数据分析领域里最重要的算法之一。我打开一本老旧的算法书,欣赏了JWCooley和JohnTukey在1965年的文章

  • 树、二叉树(完全二叉树、满二叉树)概念图解「建议收藏」

    树、二叉树(完全二叉树、满二叉树)概念图解「建议收藏」1、树的定义树是n个结点的有限集合,有且仅有一个根结点,其余结点可分为m个根结点的子树。2、树的概念结点的度:一个结点拥有子树的个数称为度。比如A的度为3,C的度为2,H的度为0。度为0的结点称为叶子节点(D,F,G,H)。树的度是树中所有结点的度的最大值,此树的度为3。 树中结点的最大层次成为树的深度或高度。此树的深度为4。 父节点A的子结点B,C,D;B,C,D也是兄弟节点…

  • dumpbin介绍

    dumpbin介绍1.SUMMARYTheDUMPBINutility,whichisprovidedwiththe32-bit versionofMicrosoftVisualC++,combinestheabilitiesoftheLINK,LIB,and EXEHDRutilities.Thecombinationoftheset

  • 宝塔服务器搭建网站教程_宝塔linux面板漏洞

    宝塔服务器搭建网站教程_宝塔linux面板漏洞腾讯云免费SSL证书是腾讯云为用户提供的一款免费一年使用的SSL证书,用起来方便、快捷。同时搭配现在很热门的建站神器:宝塔面板,即使小白也能在很短时间内搞定网站域名“小绿锁”。今天老魏详细讲解如何申请腾讯云免费SSL证书,并部署到宝塔面板中。一、注册帐号在腾讯云申请证书首先需要注册腾讯云账号并且完成实名认证。新用户请点我直达腾讯云官网,从右上角的【免费注册】,进入注册页面。注册后要先完成实名认证,…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号