正如你所知,在任何机器中,我们有不同的组件,如硬件(物理机器称为硬件(CPU,RAM...等)和软件(操作系统)。
如果你想从另一台机器上执行任何操作,我们需要写一些代码(例如用c语言),这将打开一个套接字连接,这是一个远程网络调用到其他机器,并进行操作系统调用,即本地调用。
每台机器应该有不同的方式来处理这种情况。这里的代码是紧耦合的,意味着依赖于目标机。如果目标机被改变或者是一个新的机器。现有的代码在这种情况下将无法工作。所以这意味着依赖于平台。
在引入Java virtual machine ,很多问题就解决了。写一次就可以部署到任何机器上。
Java虚拟机内部是什么?
顾名思义,它是一个虚拟机,作为java进程运行,与物理机对话。JVM依赖于物理机,但它以Java代码的形式为不同的机器提供独立的服务。
它是物理处理器之上的一个虚拟平台。JVM是Java运行时环境的一个组成部分。
JRE包含一套基于Java的API以及JVM。以下是JVM的职责
- 编译你的java代码,使之能被物理机理解。
- 解释java字节码,并将该字节码转换为相应的本地调用,即操作系统调用。
- 对象管理处理,如对象创建和垃圾回收。
JVM有不同的组件:
JVM组件
Heap memory 是JVM机器的组件之一,它存储着对象。这里的对象是指持有成员变量、构造函数和方法。默认情况下,堆的大小是64MB。我们可以使用 (最大堆大小)和 (初始堆大小)选项来增加这个大小。
一个对象的生命周期是它被引用的时间。
只要一个对象没有被引用,垃圾收集器就会使用某种算法销毁该对象。
Stack Memory 本机变量是指持有本地变量的对象。本地变量的寿命是在一个方法执行期间的临时性的。
一旦函数/方法执行结束,这些变量就会被删除。这遵循了Last In First Out 的模式。
Method section 持当前正在执行的字节码。一旦字节码被执行,它将指向下一个字节码。
寄存器是由堆栈变量使用的。
不同的供应商有多种不同的JRE
- JRockit JVM是由BEA系统开发的。
- Java HotSpot VM由Sun Microsystems开发。