java程序------------JRE/JAVA运行环境--------JVM java虚拟机(跨平台)-------------宿主机
问题来了 容器里的java程序运行在容器里JVM还是宿主机JVM
答案:取决于容器是否安装JRE以及环境变量的设置。
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。它有一个解释器组件,可以实现Java字节码和计算机操作系统之间的通信。
还包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。
JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
这个也是java最大的特色跨平台性,也就是一处编写,处处运行。
JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。
C#程序------------JRE/JAVA运行环境--------CLR虚拟机(跨平台)-------------宿主机
.Net Framework框架
CLR虚拟机之上
所以C#应该也是一个套路:
首先容器里是否安装虚拟机,其次环境变量怎么设置的,个人理解不应该安装直接公用宿主机的JAVA或者C#虚拟机即可。
容器里不安装JRE是不是就会直接调用本机的JAVA虚拟机,本机没安装肯定会运行失败。
需要有机会做一下测试,后续更新