java虚拟机执行的特点(Java虚拟机高级特性有些什么)

2024-07-08 14:50:41 111

java虚拟机执行的特点(Java虚拟机高级特性有些什么)

本文目录

Java虚拟机高级特性有些什么


  • 特点 
    java语言的重要特点是与平台无关性,java虚拟机是实现这一特点的关键。

  • 【对比高级语言】 
    一般高级语言要想在不同平台运行,至少需要生成不同目标代码。而java虚拟机屏蔽了与具体系统平台信息,只要编译生成在java虚拟机运行的字节码,就可以在多种平台运行,不需要重复编译。

  • 【解释字节码】 
    java虚拟机在执行字节码时,把字节码解释成具体平台的机器指令执行。


什么是Java虚拟机它的作用是什么


Java虚拟机是一种抽象化的计算机,作用是可以在多种平台上不加修改地运行。

Java虚拟机通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。

Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码,就可以在多种平台上不加修改地运行。

扩展资料:

Java虚拟机支持大约248个字节码。每个字节码执行一种基本的CPU运算,例如,把一个整数加到寄存器,子程序转移等。Java指令集相当于Java程序的汇编语言。

Java指令集中的指令包含一个单字节的操作符,用于指定要执行的操作,还有0个或多个操作数,提供操作所需的参数或数据。许多指令没有操作数,仅由一个单字节的操作符构成。

参考资料来源:百度百科—java虚拟机


java虚拟机是什么


Java语言写的代码是.java文件,它会被特定程序编译(javac.exe,它会被Eclipse之类的IDE调用)成字节码(bytecode),字节码不能直接在CPU上运行,需要另一个程序读取并执行,这个部件就是java虚拟机,它像机器一样运行编译好的java字节码,就像机器直接执行机器码一样……java虚拟机的外部接口在windows下主要是jvm.dll这个文件……

JAVA的几个重要特点


java的几个特点: 这是我对java特点的一些理解及其归纳: (1)、java 的简单性:和C++相比,语法简单了,取消了指针的语法;内存分配和回收不需要我们来过渡关注,C++可以多继承,但java只能是单继承,相对于类来说。(注:接口可以多继承) (2)、java面向对象:java算是纯面向对象,但jquery是更纯的面向对象。 在java编程思想这本书说过,“Everything is object!” 这样便于人类的构思和设计,更符合人们的思考问题方式 (3)、分布式:主要还是用在EJB上 (4)、安全性:java的语法限定了源程序的安全性,首先编译器会进行源代码的第一步检查 (5)、跨平台:java能够跨越不同的操作系统平台,平台无关性 怎么跨平台呢? 主要是在不同的操作系统中,JVM规范都是一样的,被JVM加载成各个操作系统所支持的,屏蔽了底层操作系统的差异 (6)、高性能:开闭原则---对扩展开放,对修改关闭 java是即时编译的 (7)、多线程: Java开发的流程: (1)、首先编辑 .java源程序 (2)、编译成 .class字节码文件byte code(一种二进制文件) (3)、最后被java虚拟机(JVM)加载解释并执行 虽然这些是很基础的知识,但这些是我对java重新的认识,可能还是有很多地方不到位,但我更想把底层的知识打牢。 请大家一起更我分享,若有好的建议,请提出!我想更进一步的学习!

java虚拟机执行过程特点有哪些


不知道是不是抽象,封装,多态,继承。java虚拟机是可以执行java文件编译之后的字节码,他是沟通操作系统和java语言的中间桥梁,所以不管在哪个操作系统之下,只要有java虚拟机,java程序就能执行,这也是java能夸平台的原因

什么是Java虚拟机


虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。

Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

这种解释应该算是正确的,但是只描述了虚拟机的外部行为和功能,并没有针对内部原理做出说明。一般情况下我们不需要知道虚拟机的运行原理,只要专注写java代码就可以了,这也正是虚拟机之所以存在的原因--屏蔽底层操作系统平台的不同并且减少基于原生语言开发的复杂性,使java这门语言能够跨各种平台(只要虚拟机厂商在特定平台上实现了虚拟机),并且简单易用。这些都是虚拟机的外部特性,但是从这些信息来解释虚拟机,未免太笼统了,无法让我们知道内部原理。

从进程的角度解释JVM

让我们尝试从操作系统的层面来理解虚拟机。我们知道,虚拟机是运行在操作系统之中的,那么什么东西才能在操作系统中运行呢?当然是进程,因为进程是操作系统中的执行单位。可以这样理解,当它在运行的时候,它就是一个操作系统中的进程实例,当它没有在运行时(作为可执行文件存放于文件系统中),可以把它叫做程序。

对命令行比较熟悉的同学,都知道其实一个命令对应一个可执行的二进制文件,当敲下这个命令并且回车后,就会创建一个进程,加载对应的可执行文件到进程的地址空间中,并且执行其中的指令。下面对比C语言和Java语言的HelloWorld程序来说明问题。

首先编写C语言版的HelloWorld程序。

编译C语言版的HelloWorld程序:

gcc HelloWorld.c -o HelloWorld
运行C语言版的HelloWorld程序:

zhangjg@linux:/deve/workspace/HelloWorld/src$ ./HelloWorld
hello world

gcc编译器编译后的文件直接就是可被操作系统识别的二进制可执行文件,当我们在命令行中敲下 ./HelloWorld这条命令的时候, 直接创建一个进程, 并且将可执行文件加载到进程的地址空间中, 执行文件中的指令。

作为对比, 我们看一下Java版HelloWord程序的编译和执行形式。

首先编写源文件HelloWord.java :

编译Java版的HelloWorld程序:

运行Java版的HelloWorld程序:

zhangjg@linux:/deve/workspace/HelloJava/src$ java -classpath . HelloWorld
HelloWorld
从上面的过程可以看到, 我们在运行Java版的HelloWorld程序的时候, 敲入的命令并不是 ./HelloWorld.class 。 因为class文件并不是可以直接被操作系统识别的二进制可执行文件 。 我们敲入的是java这个命令。 这个命令说明, 我们首先启动的是一个叫做java的程序, 这个java程序在运行起来之后就是一个JVM进程实例。

上面的命令执行流程是这样的:
java命令首先启动虚拟机进程,虚拟机进程成功启动后,读取参数“HelloWorld”,把他作为初始类加载到内存,对这个类进行初始化和动态链接(关于类的初始化和动态链接会在后面的博客中介绍),然后从这个类的main方法开始执行。也就是说我们的.class文件不是直接被系统加载后直接在cpu上执行的,而是被一个叫做虚拟机的进程托管的。首先必须虚拟机进程启动就绪,然后由虚拟机中的类加载器加载必要的class文件,包括jdk中的基础类(如String和Object等),然后由虚拟机进程解释class字节码指令,把这些字节码指令翻译成本机cpu能够识别的指令,才能在cpu上运行。

从这个层面上来看,在执行一个所谓的java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程,而不是我们写的一个个的class文件。这个叫做虚拟机的进程处理一些底层的操作,比如内存的分配和释放等等。我们编写的class文件只是虚拟机进程执行时需要的“原料”。这些“原料”在运行时被加载到虚拟机中,被虚拟机解释执行,以控制虚拟机实现我们java代码中所定义的一些相对高层的操作,比如创建一个文件等,可以将class文件中的信息看做对虚拟机的控制信息,也就是一种虚拟指令。

编程语言也有自己的原理, 学习一门语言, 主要是把它的原理搞明白。 看似一个简单的HelloWorld程序, 也有很多深入的内容值得剖析。

JVM体系结构简介

为了展示虚拟机进程和class文件的关系,特意画了下面一张图:

根据上图表达的内容,我们编译之后的class文件是作为Java虚拟机的原料被输入到Java虚拟机的内部的,那么具体由谁来做这一部分工作呢?其实在Java虚拟机内部,有一个叫做类加载器的子系统,这个子系统用来在运行时根据需要加载类。注意上面一句话中的“根据需要”四个字。在Java虚拟机执行过程中,只有他需要一个类的时候,才会调用类加载器来加载这个类,并不会在开始运行时加载所有的类。就像一个人,只有饿的时候才去吃饭,而不是一次把一年的饭都吃到肚子里。一般来说,虚拟机加载类的时机,在第一次使用一个新的类的时候。本专栏后面的文章会具体讨论Java中的类加载器。

由虚拟机加载的类,被加载到Java虚拟机内存中之后,虚拟机会读取并执行它里面存在的字节码指令。虚拟机中执行字节码指令的部分叫做执行引擎。就像一个人,不是把饭吃下去就完事了,还要进行消化,执行引擎就相当于人的肠胃系统。在执行的过程中还会把各个class文件动态的连接起来。关于执行引擎的具体行为和动态链接相关的内容也会在本专栏后续的文章中进行讨论。

我们知道,Java虚拟机会进行自动内存管理。具体说来就是自动释放没有用的对象,而不需要程序员编写代码来释放分配的内存。这部分工作由垃圾收集子系统负责。

从上面的论述可以知道, 一个Java虚拟机实例在运行过程中有三个子系统来保障它的正常运行,分别是类加载器子系统, 执行引擎子系统和垃圾收集子系统。 如下图所示:

虚拟机的运行,必须加载class文件,并且执行class文件中的字节码指令。它做这么多事情,必须需要自己的空间。就像人吃下去的东西首先要放在胃中。虚拟机也需要空间来存放个中数据。首先,加载的字节码,需要一个单独的内存空间来存放;一个线程的执行,也需要内存空间来维护方法的调用关系,存放方法中的数据和中间计算结果;在执行的过程中,无法避免的要创建对象,创建的对象需要一个专门的内存空间来存放。关于虚拟机运行时数据区的内容,也会出现在本专栏后续的文章中。虚拟机的运行时内存区大概可以分成下图所示的几个部分。(这里只是大概划分,并没有划分的很精细)

总结

写到这里,基本上关于我对java虚拟机的理解就写完了。这篇文章的主题虽然是深入理解Java虚拟机,但是你可能感觉一点也不“深入”,也只是泛泛而谈。我也有这样的感觉。限于自己水平有限,也只能这样了,要是想深入理解java虚拟机,强烈建议读一下三本书:

《深入Java虚拟机》

《深入理解Java虚拟机JVM高级特性与最佳实践》

《Java虚拟机规范》

其实我也读过这几本书,但是它们对虚拟机的解释也是基于一个外部模型,而没有深入剖析虚拟机内部的实现原理。虚拟机是一个大而复杂的东西,实现虚拟机的人都是大牛级别的,如果不是参与过虚拟机的实现,应该很少有人能把它参透。本专栏后面的一些文章也参考了这三本书, 虽然讲解Java语法的书不计其数, 但是深入讲解虚拟机的书, 目前为止我就见过这三本,并且网上的资料也不是很多。

最后做一个总结:

1 虚拟机并不神秘,在操作系统的角度看来,它只是一个普通进程。

2 这个叫做虚拟机的进程比较特殊,它能够加载我们编写的class文件。如果把JVM比作一个人,那么class文件就是我们吃的食物。

3 加载class文件的是一个叫做类加载器的子系统。就好比我们的嘴巴,把食物吃到肚子里。

4 虚拟机中的执行引擎用来执行class文件中的字节码指令。就好比我们的肠胃,对吃进去的食物进行消化。

5 虚拟机在执行过程中,要分配内存创建对象。当这些对象过时无用了,必须要自动清理这些无用的对象。清理对象回收内存的任务由垃圾收集器负责。就好比人吃进去的食物,在消化之后,必须把废物排出体外,腾出空间可以在下次饿的时候吃饭并消化食物。

扩展资料:

关于JAVA虚拟机的参数说明如下:

1、运行class文件

执行带main方法的class文件,Java虚拟机 命令参数行为:

java 《CLASS文件名》

注意:CLASS文件名不要带文件后缀.class

例如:

java Test

如果执行的class文件是带包的,即在类文件中使用了:

package 《;包名》

那应该在包的基路径下执行,Java虚拟机命令行参数:

java 《;包名》.CLASS文件名

例如:

PackageTest.java中,其包名为:com.ee2ee.test,对应的语句为:

package com.ee2ee.test;

PackageTest.java及编译后的class文件PackageTest.class的存放目录如下:

classes

|__com

|__ee2ee

|__test

|__PackageTest.java

|__PackageTest.class

要运行PackageTest.class,应在classes目录下执行:

java com.ee2ee.test.PackageTest

2、运行jar文件中的class

原理和运行class文件一样,只需加上参数-cp 《jar文件名》;即可。

例如:执行test.jar中的类com.ee2ee.test.PackageTest,命令行如下:

java -cp test.jar com.ee2ee.test.PackageTest

3、显示JDK版本信息

当一台机器上有多个jdk版本时,需要知道当前使用的是那个版本的jdk,使用参数-version即可知道其版本,命令行为:

java -version

4、增加虚拟机可以使用的最大内存

Java虚拟机可使用的最大内存是有限制的,缺省值通常为64MB或128MB。

如果一个应用程序为了提高性能而把数据加载内存中而占用较大的内存,比如超过了默认的最大值128MB,需要加大java虚拟机可使用的最大内存,否则会出现Out of Memory的异常。启动java时,需要使用如下两个参数:

-Xms java虚拟机初始化时使用的内存大小

-Xmx java虚拟机可以使用的最大内存

以上两个命令行参数中设置的size,可以带单位,例如:256m表示256MB

举例说明:

java -Xms128m -Xmx256m ...

表示Java虚拟机初始化时使用的内存为128MB,可使用的最大内存为256MB。

对于tomcat,可以修改其脚本catalina. sh(Unix平台)或catalina.bat(Windows平台),设置变量JAVA_OPTS即可,例如:

JAVA_OPTS=’-Xms128m -Xmx256m’

参考资料:百度百科-java虚拟机



java虚拟机执行的特点(Java虚拟机高级特性有些什么)

本文编辑:admin

更多文章:


织梦模板网站空白(织梦后台生成首页是空白的,直接访问首页也是空白的,但是新建栏目预览栏目页没有问题,求专家!!!)

织梦模板网站空白(织梦后台生成首页是空白的,直接访问首页也是空白的,但是新建栏目预览栏目页没有问题,求专家!!!)

“织梦模板网站空白”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看织梦模板网站空白(织梦后台生成首页是空白的,直接访问首页也是空白的,但是新建栏目预览栏目页没有问题,求专家!!!)!本文目录织梦后台生成首页是空白的,直接访问

2024年7月24日 08:05

schema注解(JAXB的@XmlElement注解)

schema注解(JAXB的@XmlElement注解)

本文目录JAXB的@XmlElement注解怎么查看在mysql表中查看表中的注释dubbo注解@reference为什么为空spring 注解注入怎么注入属性修改MYSQL字段的注释怎么写java注解如何实现 spring 的数组的定义和

2024年7月24日 09:58

teachers(英文teacher是什么)

teachers(英文teacher是什么)

“teachers”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看teachers(英文teacher是什么)!本文目录英文teacher是什么teachers的意思teachers怎么读teacher怎么读teachers

2024年8月18日 23:50

lookup函数(excel学习查找函数,如何能少的了lookup函数呢)

lookup函数(excel学习查找函数,如何能少的了lookup函数呢)

本文目录excel学习查找函数,如何能少的了lookup函数呢如何快速理解并记住vlookup函数的使用方法vlookup函数的使用方法及实例是什么2个表如何用vlookup函数的使用方法及实例wpsvlookup函数的使用方法及实例exc

2024年7月9日 11:51

feels音标怎么写?she feels happy为什么不用feel

feels音标怎么写?she feels happy为什么不用feel

本文目录feels音标怎么写she feels happy为什么不用feelfeels音标怎么写这个问题还是有点复杂的,比如你说的 ,er也可以发. 规律也是有,但我上学的时候书里没有讲过,全靠自己总结. 随着你的词汇量增加,你应该会发

2024年6月25日 07:42

网站下载大全(靠比较软件免费大全下载网站)

网站下载大全(靠比较软件免费大全下载网站)

“网站下载大全”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看网站下载大全(靠比较软件免费大全下载网站)!本文目录靠比较软件免费大全下载网站现在比较有名的下载网站都有什么靠比较软件免费大全下载网站"靠比较软件免费大全下载网站

2024年7月14日 19:20

div对齐方式(css中怎么让div里面的文字底部对齐)

div对齐方式(css中怎么让div里面的文字底部对齐)

本文目录css中怎么让div里面的文字底部对齐如何让两个div左对齐新建div默认对齐方式是HTML文字怎么在DIV中对齐css中怎么让div里面的文字底部对齐两种办法,第一种可以作为默认选择。两种办法都可以让文字底部对齐。1、如果是文字或

2024年7月5日 18:29

mysql删除数据库语句(mysql中怎么删除一个数据库(如何删除一个数据库))

mysql删除数据库语句(mysql中怎么删除一个数据库(如何删除一个数据库))

本文目录mysql中怎么删除一个数据库(如何删除一个数据库)mysql数据库删除数据语句怎么写mysql workbench怎么删除数据库PHP操作MySQL,删除一行数据库,怎么写mysql中怎么删除一个数据库(如何删除一个数据库)MyS

2024年7月23日 15:19

为什么纳达尔跟德约科维奇只相差一年却感觉相差一代?如何看待德约科维奇美网对阵瓦林卡选择退赛

为什么纳达尔跟德约科维奇只相差一年却感觉相差一代?如何看待德约科维奇美网对阵瓦林卡选择退赛

本文目录为什么纳达尔跟德约科维奇只相差一年却感觉相差一代如何看待德约科维奇美网对阵瓦林卡选择退赛德约科维奇拿到职业生涯800胜,这在网球史是什么地位德约科维奇的故事德约科维奇是哪国人为什么纳达尔跟德约科维奇只相差一年却感觉相差一代出现纳达尔

2024年5月17日 22:54

outofmemoryexception(System.OutOfMemoryException异常如何解决)

outofmemoryexception(System.OutOfMemoryException异常如何解决)

本文目录System.OutOfMemoryException异常如何解决发生类型为 System.OutOfMemoryException 的异常syserror.outofmemoryexception是什么意思下的电脑软件使用后出现s

2024年7月19日 00:25

织梦模板怎么修改(织梦模板如何更换问题)

织梦模板怎么修改(织梦模板如何更换问题)

本文目录织梦模板如何更换问题织梦模板怎么修改,去ftp怎么操作,首页图片在哪里修改织梦模板怎么修改织梦的模板后台具体是怎么更改栏目织梦模板如何更换问题替换模板跟你上面说的都没关系,二个方法一、找到templets文件,里面的default是

2024年7月16日 05:53

手机网址导航源码(那个网址导航网站源码好用,没有后面和安全问题,谢谢)

手机网址导航源码(那个网址导航网站源码好用,没有后面和安全问题,谢谢)

本文目录那个网址导航网站源码好用,没有后面和安全问题,谢谢谁能给我一个网址导航的网站源码,要求后台能更换图片的wap网址导航站的代码那个网址导航网站源码好用,没有后面和安全问题,谢谢静态版单页面,修改非常简单,直接上传到自己空间即可使用,本

2024年5月20日 16:09

朴宰范无水印视频素材下载(朴宰范和权志龙哪个更厉害)

朴宰范无水印视频素材下载(朴宰范和权志龙哪个更厉害)

本篇文章给大家谈谈朴宰范无水印视频素材下载,以及朴宰范和权志龙哪个更厉害对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录朴宰范和权志龙哪个更

2024年8月7日 14:35

滚动条在哪里(为什么滚动条会不见)

滚动条在哪里(为什么滚动条会不见)

本文目录为什么滚动条会不见在excel中滚动条在哪里office 2013 excel滚动条控件在哪里wps文件,excel 表格下边左右滚动条不见了,去哪儿能找到excel 底下的活页簿,滚动条,不显示了在哪里设置的呢如图为什么滚动条会不

2024年5月17日 23:34

fancying(fancy的比较级)

fancying(fancy的比较级)

本文目录fancy的比较级fancy用法是什么i fancy you是什么意思fancy 的ing形式是fancying 吗fancy的比较级Fancier  幻想;设想;喜欢 比较级:fancier 最高级:fanciest 第三人称单

2024年7月20日 10:02

视图网官网 免费(谁能给我几个汽车三视图的网站越多越好如果满意追加)

视图网官网 免费(谁能给我几个汽车三视图的网站越多越好如果满意追加)

本文目录谁能给我几个汽车三视图的网站越多越好如果满意追加在WORD文档中常见视图方式有什么打开网页时出现使用兼容性视图打开网页是怎么回事wikihow怎么找到PC版视图谁能给我几个汽车三视图的网站越多越好如果满意追加这个很少,只有3D图哦。

2024年7月24日 10:06

attack怎么读英语(attack翻译中文)

attack怎么读英语(attack翻译中文)

这篇文章给大家聊聊关于attack怎么读英语,以及attack翻译中文对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录attack翻译中文attack什么意思attacks怎么读的attack是什么意思assault\ att

2024年8月1日 19:35

spring诗歌(请专业的朋友帮忙找一首关于春天的英语诗歌)

spring诗歌(请专业的朋友帮忙找一首关于春天的英语诗歌)

其实spring诗歌的问题并不复杂,但是又很多的朋友都不太了解请专业的朋友帮忙找一首关于春天的英语诗歌,因此呢,今天小编就来为大家分享spring诗歌的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录请专业的朋友帮

2024年7月22日 08:21

html流星雨特效代码(QQ空间流星雨代码)

html流星雨特效代码(QQ空间流星雨代码)

本文目录QQ空间流星雨代码谁能给个许多符号加起来像流星雨一样的求助各位大神,我用flash8.0做了一个流星雨效果,代码如下流星雨特殊符号是什么微信满屏流星雨的代码是什么啊如何在网页上添加流星雨效果QQ空间流星雨代码QQ空间留言代码QQ空间

2024年6月6日 09:44

putty是什么软件(putty是什么,怎么用)

putty是什么软件(putty是什么,怎么用)

本文目录putty是什么,怎么用linux远程连接ssh工具有哪些putty是什么,怎么用PuTTY是一个Telnet、SSH、rlogin、纯TCP以及串行接口连接软件。1、putty是ssh的一种连接方式,一般是连接linux服务器用的

2024年7月24日 09:24

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1730
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1155
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1152
标签列表

热门搜索