一台机器上有几个java虚拟机
一台机器上java虚拟机会存在多少个?
一直以来,我都认为,每台电脑上java虚拟机只存在一个;如果你启动多个java程序,这些程序都在一个虚拟机中运行。这是常规的想法,就像我们自己的电脑,电脑只有一台,可以跑很多个程序。
如果说有多个java虚拟机,显然说法有问题。
诸如此类的疑问;
在一台机器上启动两个tomcat,会有几个java虚拟机?
再如在elcipse中run一个main方法,会单独开一个java虚拟机吗?
执行一个class文件,会单独开一个java虚拟机吗?
下面来看一下实际情况;
Java 程序本质上是 class 文件描述的字节码,字节码的是在 JVM 中 执行 的。
每个 Java 进程都是一个 JVM 实例。
一旦程序结束,JVM 实例也就销毁了。
所以以java命令启动的,都会新增一个jvm进程;
所以:
1.启动2个tomcat,内部是java启动,会有2个jvm进程;
2.eclipse中的run,内部是java启动,会单独开一个jvm进程;
3.执行class文件,如果是java去执行就会开,如果仅仅使用现有jvm进程来load就不会增加;
实际情况是:运行多个java程序,没有多个java虚拟机,有多个java虚拟机的实例;
有如下一段英文描述;
jvm实例的个数
Generally speaking, each application will get its own JVM instance and its own OS-level process and each JVM instance is independent of each other.
There are some implementation details such as Class Data Sharing, where multiple JVM instances might share some data/memory but those have no user-visible effect to the applications (except for improved startup time, hopefully).
A common scenario however is a single application server (or "web server") such as Glassfish or Tomcat running multiple web applications. In this case, multiple web applications can share a JVM.
第一句话说:一般而言,每个应用程序将有它自己的JVM实例......
一个java的应用程序对应于一个JVM实例,当一个java程序运行的时候,一个jvm实例就诞生了;
下面来做小程序验证一下;
做3个小程序,代码如下;
public class test1 {
public static void main(String[] args) throws InterruptedException {while (true) {System.out.println("application 111");Thread.sleep(1000);}}
}public class test2 {
public static void main(String[] args) throws InterruptedException {while (true) {System.out.println("application 222");Thread.sleep(1000);}}
}public class test3 {
public static void main(String[] args) throws InterruptedException {while (true) {System.out.println("application 333");Thread.sleep(1000);}}
}
同时运行3个java程序;
看一下任务管理器;有3个java.exe;并不是 test1,test2, test3 3个程序;看这3个java.exe的描述,是一样的,Java(TM) Platform SE binary;
结束test2程序;java.exe少了一个;
如果都结束,3个java.exe都消失;
也就是;
每一个java程序对应一个jvm实例,都有自己的程序执行空间,每一个都有一套jvm虚拟机机制。
一个java程序对应一个jvm实例,一个jvm对应一个堆;
堆内存用来存放运行时创建的对象。一般来讲,通过 new 关键字创建出来的对象都存放在堆内存中。由于 JVM 是基于堆栈的虚拟机,而每个 Java 程序都运行在一个单独的 JVM 实例上,每一个实例唯一对应一个堆,一个 Java 程序内的多个线程也就运行在同一个 JVM 实例上,因此这些线程之间会共享堆内存,鉴于此,多线程在访问堆中的数据时需要对数据进行同步。
java虚拟机有多种实现版本;java -version命令中可以看到java虚拟机的名称;
Java HotSpot<TM> 64-Bit Server VM,这个是java虚拟机的名字;
一台机器上有几个java虚拟机相关推荐
- 在多台机器上搭建Hadoop的分布式环境
2019独角兽企业重金招聘Python工程师标准>>> 分布式环境搭建之环境介绍 之前我们已经介绍了如何在单机上搭建伪分布式的Hadoop环境,而在实际情况中,肯定都是多机器多节点的 ...
- window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法
window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法 本机已经安装了jdk1.7,而比较早期的项目需要依赖jdk1.6,于是同时在本机安装了jdk1.6和jdk1.7. 安装 ...
- 更改多个版本java_window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法...
window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法 本机已经安装了jdk1.7,而比较早期的项目需要依赖jdk1.6,于是同时在本机安装了jdk1.6和jdk1.7. 安装 ...
- php和mysql不在一台机器上_MySQL_在同一台机器上运行多个 MySQL 服务,**************************************** - phpStudy...
在同一台机器上运行多个 MySQL 服务 ********************************************************** 第一部分, 在一台服务器构建多mysql ...
- 用户信息检索另一台服务器,客户机上一用户访问另一台机器上的informix数据库...
客户机上一用户访问另一台机器上的informix数据库[@more@] ip=126 : informix 数据库服务器(INFORMIXSERVER 为 primary_ins1) ip=64 : ...
- 一台机器上运行多个ActiveMq
2019独角兽企业重金招聘Python工程师标准>>> 由于业务需要一台机器上运行多个ActiveMq,这里主要说一下有什么地方不重复: 1.brokerName名称不能重复 2.端 ...
- 多个php一个机器,如何利用docker在同一台机器上搭建多套php开发环境?
首先是一个容器要包含完整的程序加依赖(出去中间件),拿 LNMP 举例子:docker 提供的是 Linux 环境,容器中要包含 Nginx 和 Php,然后再单独部署一个 MySQL 其次,如果多个 ...
- 在同一台机器上启动多个JBoss A-MQ JVM
因此,我最近没有写过博客-只是很忙. 但是,我新年的决心是写一些博客,分享一些我经常遇到的事情,即使这些简单的事情可能会帮助一些人. 因此,对于本条目,我将展示一种在单台机器上启动多个JBoss A- ...
- 同一台机器上安装2个SDE服务
同一台机器上安装2个SDE服务 环境:Windows Server 2008 R2 x64+Oracle 10g+ArcSDE 9.3 适用于数据库中SDE表空间以及SDE用户已经创建. 1:拷贝C: ...
最新文章
- Android -- 程序启动画面 Splash
- 震旦ad208如何进入维修模式_今天才知道!华为手机维修时要开启这个功能,防止隐私被他人查看...
- spring mvc logback
- diskgenius linux版_纯净版Windows10系统安装详细教程
- npm学习(二)之如何防止权限错误
- Android开发之代码开发部分字符串变色
- u-boot移植随笔:u-boot的内存分布图
- [D3] Start Visualizing Data Driven Documents with D3 v4
- htmlspecialchars_decode 与 html_entity_decode
- Linux操作系统——进程管理
- Face photo recognition using sketch (人脸画像合成)
- 计算机D盘无法读取,D盘目录或文件被损坏且无法读取的愿意以及解决办法
- 3线spi屏幕驱动方式
- Pull Request 的概述
- java设计模式--装饰器设计模式(javaIO设计使用)
- android 扫描二维码支付,Android 扫码盒子全局接收付款码(全局事件上层接收多重下发)...
- 【本人秃顶程序员】Java程序员,你会选择25k的996还是18k的965?
- 【解决方案 二十六】DateGrip一键生成DML语句用于上线
- CPC客户端补正申请书提交
- 如何优化cocos2d/x程序的内存使用和程序大小【第一部分】
热门文章
- 对Tensor结果使用opencv2中的操作
- 异步任务AsyncTask
- 硬盘安装Windows 7和Ubuntu 10.04双系统
- automation服务器不能创建对象是什么意思_从运营商角度来考虑为什么NAT不能搭建服务器?...
- Java Vector与ArrayList的区别
- Java 技术篇-使用IDEA开发java代码实例演示,IntelliJ IDEA的安装与使用
- POJ1787多重背包中在最优方案下输出具体的选择方案
- [YTU]_2918( Shape系列-4)
- 计算机技术停滞,究竟什么原因让科技停滞不前呢?
- Jupyter不要自动启动浏览器(Firefox)