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字节码,然后会将其中反复执行的热点代码,以方法为单位进行即时编译,编译成机器码后直接运行在底层硬件之上。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python读取excel单元格内容_python如何读取txt文件

    python读取excel单元格内容_python如何读取txt文件今天,跟大家谈一下用python计算Excel中的数据我们先学习读取Excel中的数据首先我们要安装xlrd库,在命令提示符(快捷键win+r)中输入:pipinstallxlrd下载完成xlrd库。首先呢,当然要先有一个Excel啦,如下:我们先仔细观察这个Excel,里面有2018、2017、2016的月收入来来来,跟着小哥哥一起月入3w!1、利用python读取Excel内容xrld库中的open_workbook函数可以打开Excel文件,并且返回一个代表打开Excel文

    2022年10月2日
    5
  • netty权威指南学习

    netty权威指南学习1、Bio工程结构maven工程文件结构:│nettyArticle.iml│pom.xml│├─.idea│compiler.xml│misc.xml│vcs.xml│workspace.xml│├─src│├─main││├─java│││└─com│││└─jad…

    2022年10月2日
    0
  • SpringMVC工作流程源码剖析

    SpringMVC工作流程源码剖析原文链接:https://juejin.im/post/5e6b0ee3e51d4526f65cdb50.0x0先看名词DispactherServlet:SpringMVC的心脏,所有的请求从这里进入,也从这里出去HandlerAdapter:请求处理器HandlerMapping:请求和处理对象间的映射关系,可以理解为地址/api对应@RequestMapping(“/…

    2022年6月3日
    37
  • 数据库设计——关系数据理论(超详细)「建议收藏」

    数据库设计——关系数据理论(超详细)「建议收藏」问题——什么是一个好的数据库逻辑设计●关系型数据库逻辑设计:➠针对一个具体问题应如何构造一个适合于它的数据模式,即应构造几个关系,每个关系由哪些属性组成等eg:?这样的设计是一个好的设计吗?观察这个表所对应的一个实例(在某个时刻student模式所对应的一个实际的数据情况):如有若干个学生,他们都为’计算机系’,系主任为’张明’,选修了’C1’课程,得到各自的成绩☟☞关系模式STUDENT(Sno,Sdept,Mname,Cno,Grade)中存在的问题:☜1、数据冗余太大,浪费存储空间如

    2022年10月9日
    5
  • windows进程system占用CPU(电脑cpu过高怎么处理)

    自从升级到Win10系统后,经常发现任务管理器中的System进程占用了很高的CPU内存,这也导致多项应用程序无法正常运行,并且这个进程占用内存是没有上限,对于这种情况我们该如何处理呢?下面我们就一起来看看System占用CPU内存过高的解决方法。1、右键点击开始菜单,打开计算机管理页面;2、在计算机管理页面中打开计算机“服务”界面;3、在…

    2022年4月13日
    215
  • java aqs详解_Java中的File文件类详解

    java aqs详解_Java中的File文件类详解今天学了学并发AQS机制,是抽象队列同步器,用户主要通过继承AQS类,来实现自定义锁,从而完成特定功能,AQS提供了两种锁(1)共享锁(2)排他锁。下面这个博客介绍的AQS机制挺不错可以看看原文链接一、概述  谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock

    2022年8月8日
    12

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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