当前位置:首页 > 虚拟机 > 正文

哪个文件在java虚拟机运行(怎么在java虚拟机中运行程序)

如何在Java中执行其它程序

在编写Java程序时,有时需要在Java程序中运行另一个程序。1.启动程序Java提供了两种启动其他程序的:(1)使用Runtime的exec()(2)使用ProcessBuilder的start()无论何种作,程序都具有基本相似的特性。属性。程序启动后就成为程序作进程,一旦执行,就有自己的环境变量和工作目录。Runtime和ProcessBuilder提供了多种方式来启动程序、设置启动参数、环境变量和工作目录。Java中能够执行的外部程序必须是真正的可执行文件。shell中内置的命令不能直接执行。当使用Runtimeexec运行程序时,必须首先使用Runtime的静态来获取一个Runtime,然后调用Runtime的exec。您可以将要运行的外部程序、启动参数、环境变量和工作目录作为参数传递给exec。执行后,该返回一个代表已执行程序的进程。运行时有六个exec,其中两个定义为:publicProcessexec(String[]cmdarray,String[]envp,Filedir)publicProcessexec(Stringcommand,String[]envp,Filedir)cmdarray和command是要执行的命令。用法将命令和参数作为字符串命令传递给exec(),也可以将命令和参数在cmdarray数组中一一传递给exec()。envp是一个环境变量,以name=value的形式到一个数组中。dir是工作目录。您不需要dir参数,或者不需要envp和dir参数,因此还有四个exec()。如果没有dir参数或者为null,则新启动的进程继承当前Java进程的工作目录。如果没有envp参数或者为null,则新启动的进程继承当前Java进程的环境变量。您还可以使用ProcessBuilder类启动一个新程序,该类后来被添加到JDK中并被推荐。通过构造函数设置要执行的命令和参数,也可以通过command()获取命令信息然后设置。通过目录(Filedirectory)设置工作目录,并通过Environment()获取环境变量的信息来修改环境变量。使用ProcessBuilder构造函数创建一个新实例并设置环境变量和工作目录后,您可以通过start()启动一个新程序。与Runtime的exec()一样,该返回一个代表已启动程序的Process对象。ProcessBuilder和()的区别在于ProcessBuilder提供了redirectErrorStream(booleanredirectErrorStream),该用于将进程错误输出重定向到标准输出。也就是说,错误输出可以与标准输出合并。s无论采用何种方式启动进程,都会返回一个Process类的实例来代表启动的进程,通过该实例可以控制进程并获取相关信息。Process类提供了从进程获取输入、向进程获取输出、等待进程完成、检查进程的退出状态以及销毁()进程的:(1)voiddestroy()子进程流程。一般情况下,该无法中断已经启动的进程,所以不要使用。(2)intexitValue()返回子进程的输出值。只有启动的进程完成或者异常终止后,exitValue()才会有正常的返回值,否则会抛出异常。(3)InputStreamgetErrorStream()获取子进程的错误流。如果错误输出被重定向,您将无法从此流读取错误输出。(4)InputStreamgetInputStream()获取子进程的输入流。可以从此流中读取进程的标准输出。(5)OutputStreamgetOutputStream()获取子进程的输出流。写入该流的数据用作进程的标准输入。(6)如有必要,intwaitFor()会使当前线程等待,直到Process对象表示的进程完成。通过该类提供的可以实现与发起的进程的通信,从而达到交互的目的。3、从标准输出和错误输出流中读取信息从启​​动其他程序的Java进程中,其他启动程序的输出是一个普通的输入流,可以通过getInputStream()和getErrorStream获得。对于通常返回文本的进程,可以将InputStream封装在BufferedReader中,然后可以逐行处理进程的标准输出。4.示例(1)()edReader;导入;导入treamReader;公众号

Java的核心技术什么?

:Java虚拟机Java虚拟机的主要任务是安装class文件并执行其中的字节码。Java虚拟机包含一个类加载器,它可以从程序和API加载类文件。在JavaAPI中,只会加载程序执行所需的那些类。字节码由执行引擎执行。在不同的Java虚拟机中,执行引擎的实现方式可能有很大不同。在软件实现的虚拟机中,最简单的执行引擎就是解释一次字节码。另一种执行引擎速度更快,但也消耗更多内存,称为“即时编译器”。在这种情况下,个执行的字节码被编译为本机机器代码。编译后的本机机器代被缓存,并可以在以后调用该时重用。第三个执行引擎是自适应优化器。在这种中,虚拟机最初解释字节码,但监视正在运行的程序的活动并记录最常用的代码段。程序运行时,虚拟机只将最频繁活动的代码编译为本地代码。其他代码不经常使用并保留为字节码-并且虚拟机继续解释它们。自适应优化器可以使Java虚拟机在80%到90%的时间执行优化的本机代码,而只需要编译10%到20%影响性能的代码。当Java虚拟机是在主机作上用软件实现时,Java程序通过调用本地与主机进行交互。Java中有两种:Java和本机。Java是用Java语言编写的,编译成字节码文件,并存储在类文件中。本机用其他语言(例如C、C++或汇编语言)编写并编译为特定于处理器的机器代码。本地存储在动态链接库中,其格式是每个平台专有的。当运行中的Java程序调用本地时,虚拟机会加载包含本地的动态库并调用该。Native是Java程序与底层主机作之间的连接。第二:类加载器体系结构Java应用程序可以使用两种类型的类加载器:“引导”类加载器和用户定义的类加载器。启动类加载器(中唯一的)是Java虚拟机实现的一部分。启动类加载器通常会使用一些默认的从本地磁盘加载类,包括JavaAPI类(启动类加载器也称为原始类加载器、类加载器或默认类加载器)。Java应用程序可以在运行时安装用户定义的类加载器,从而可以以自定义的方式加载类。例如,从Internet类文件。虽然启动类加载器是虚拟机实现中必不可少的一部分,而用户自定义类加载器不是,但是用户自定义类加载器可以用Java编写,可以编译成class文件,可以被虚拟机,并且可以像其他对象一样实例化。得益于用户定义的类加载器,无需在编译时知道最终将添加到正在运行的Java应用程序中的所有类。用户定义的类加载器使得运行扩展的Java应用程序成为可能。当它运行时,应用程序可以确定它需要哪些附加类,并可以决定是否使用一个或多个用户定义的类加载器来加载它们。因为类加载器是用Java编写的,所以类加载可以用任何可以用Java代码表达的风格来完成。这些类可以通过、从某个数据库获取,甚至动态生成。每个类加载时,Java虚拟机都会监视该类,看它是由启动类加载器加载的还是由用户定义的类加载器加载的。当加载的类引用另一个类时,虚拟机使用加载个类的类加载器来加载引用的类。例如,如果虚拟机使用特定的类加载器来加载Volcano类,那么它将使用这个类加载器来加载Volcano类使用的所有类。由于Java虚拟机是这样加载类的,所以加载的类默认只能看到同一个类加载器加载的其他类。这样,Java的体系结构允许在Java应用程序内建立多个名称空间。运行时Java程序中的每个类加载器都有自己的命名空间。一个Java应用程序可以创建任意多个(或多个)类,由不同的类加载器加载并存储在不同的命名空间中。除非应用程序明确允许,否则它们无法相互访问。编写Java应用程序时,从不同源文件加载的类可以分隔在不同的命名空间中。通过这种方式,Java类加载器架构可以用来控制任何不同源文件中加载的代码之间的交互,特别是防止恶意代码获得访问或善意代码。动态扩展的一个示例是Web浏览器,它使用用户定义的类加载器从Javaapplet的类文件。Web浏览器使用程序来安装用户定义的类

JRE和JVM有什么关系?

简单来说,jre包含了jvm,即运行Java的核心虚拟机。运行Java程序不仅需要核心虚拟机,还需要其他类加载器、字节码验证器和许多基类库。。除了jvm之外,jre还包括对运行Java程序的其他环境的支持。

jre是Java运行环境,它的全称是JavaRuntimeEnvironment,它是运行Java程序的必要条件。jvm(JavaVirtualMachine)是JavaVirtualMachine,可以运行Java字节码文件的虚拟机。

扩展信息

JRE是运行Java语言编写的程序的重要运行环境。此外,这还允许Java开发人员向用户和使用他们开发的程序。JRE包含运行Java程序所需的组件:Java虚拟机(JVM)、运行时类库和Java应用程序可执行文件。

与众所周知的JDK不同,JRE是Java运行环境,而不是开发环境,因此它不包含任何开发工具(编译器、调试器等),仅适用于使用Java的用户。程式。

金字塔结构JDK=JRE+JVM+其他要运行Java程序,一般需要在用户的计算机上安装JRE环境(JavaRuntimeEnvironment),没有jre,Java程序就无法运行,没有jre,Java程序就无法运行。Java程序,Java程序无法运行,jre没用。。