当前位置: 首页 > 面试题库 >

执行多个Java应用程序时Java虚拟机将执行的操作

毋炳
2023-03-14
问题内容

通过阅读本文,我知道每个Java应用程序都将在特定的Java虚拟机实例中运行。因此,如果我执行以下命令(“
Java -jar test1.jar”,“ Java -jar
test2.jar”),我将在系统中获得两个进程。并且,如果每个命令都使用默认堆大小,例如256M。总内存成本为512M,对吗?还有其他问题:

  • Java虚拟机是一个守护进程,由系统启动吗?
  • 当我执行“ java -jar test1.jar”时,它将创建Java虚拟机的实例,然后执行主要功能。这是否意味着每个正在运行的Java应用程序都是Java虚拟机的子线程或进程?
  • 每个正在运行的Java应用程序是否都是单独的,其他应用程序无法从此正在运行的Java应用程序获取变量,方法,常量等?
  • 如果一个正在运行的Java应用程序崩溃了,会影响其他正在运行的Java应用程序吗?

PS:我在Google上搜索并得到许多不同的答案,我完全感到困惑。任何可以帮助我解决此类问题甚至更深入的Java虚拟机的人。例如,它如何工作。


问题答案:

JVM和其他任何进程一样,是一个标准过程。因此,两者之间没有隐式的通信或状态共享。每个都将拥有自己的堆,线程等。如果杀死一个,则不会影响另一个。

什么 得到共享是JVM本身的代码页。内核足够智能,可以识别运行两次的相同二进制文件( 任何 二进制文件-
而不仅仅是JVM)并重用映像。这仅适用于实际的二进制代码-
不适用于其状态。

JVM不是守护进程,但是可以在系统启动时作为Windows服务或Unix /
Linux进程(通过/etc/init.d脚本)启动。这是引导计算机时运行(说)用Java编写的Web服务的方式。



 类似资料:
  • 我搜索了关于测量Java应用程序执行时间的信息,得到了以下代码: 开始和停止之间的差异给了我执行时间。 注意:我知道这不是确切的执行时间。我只是需要多线程和单线程应用程序之间的比较的时间。 如果我这样更改代码会怎样: 执行10个线程。不管他们做什么。假设他们随机填充一个二维数组。 现在,stop-start给了我“全部”执行时间?或者我必须自己测量线程吗?

  • 3.4.1 WinMain函数 在DOS下,程序的执行是从main函数开始的。在Windows下,对应的函数是WinMain。但是,如果浏览Hello程序的所有的方法和全局函数,是找不到WinMain函数的。MFC考虑到典型的Windows程序需要的大部分初始化工作都是标准化的,因此把WinMain函数隐藏在应用程序的框架中,编译时会自动将该函数链接到可执行文件中。程序员可以重写WinMain函数

  • 主要内容:1 如何使用多个线程执行一个任务,2 如何使用多个线程执行多个任务1 如何使用多个线程执行一个任务 如果需要由多个线程执行单个任务,则只有一个run()方法,例如: 1.1 多个线程执行一个任务示例1 输出结果为: 1.2 多个线程执行一个任务示例2 输出结果为: 注意:每个线程在单独的堆栈中运行。 2 如何使用多个线程执行多个任务 如果必须通过多个线程执行多个任务,请使用多个run() 方法: 2.1 多个线程执行多个任务示例1 输出结果为: 2.2 多个线程

  • 环境: java21 问题: methods5不会输出log.info的内容, methods6正常打印log.info的内容

  • 问题内容: 有没有一种简单的方法可以测量由JDBC执行的所有sql语句的执行时间,并将结果打印到输出中? 有人可能建议我使用AOP来做到这一点,但我尝试尽可能避免这种情况。还有另一种方法吗? 问题答案: 如果不在提供数据源的应用程序服务器中运行该应用程序,则将发现log4jdbc项目很有用。项目提供的记录器将允许您记录所执行的SQL语句的执行情况。 通过将从DataSource返回的连接包装在Co

  • 问题内容: 我试图制作一个调用外部程序的应用程序,我必须传递两个参数。它没有任何错误。用c ++编写的program.exe可以拍照并修改txt文件的内容。Java程序可以运行,但是什么也没做 这是我的示例代码 问题答案: 从这里可耻地借来的