如果我在这两个窗口中打开两个命令提示并启动相同的JAVA程序(同时),它的行为是什么?
如果它们仍然是不同的实例,那么JVM在内存方面如何区分它们?
这在我的采访中被问到,我回答说两个运行实例都会有所不同,因为两者都有不同的类加载器。我是对的吗?
答案 0 :(得分:0)
它们在不同的内存空间中运行,原因与所有其他程序在不同的内存空间中运行的原因相同:那就是操作系统如何运行它们。你必须有意做一些事情来获得两个不同的进程来共享相同的内存。
假设您通过java
工具运行它们,那么更具体地说,操作系统如何运行java
工具(加载和初始化JVM),然后在其独特的内存区域中加载并运行程序。
你的类加载器答案是正确的,因为每个JVM都有自己的默认类加载器副本,但它比那更基本:它在进程级别。专注于类加载器给人的印象是只有一个JVM在运行,这是不正确的。
答案 1 :(得分:0)
对于JVM的每个实例,一些可用内存由OS分配,每个实例分配不同的内存,然后将这个内存分成一些分区,如Stack,heap,miscellaneous等。
当类通过类加载器加载到JVM内部存储器中时,它会执行静态,字段和实例初始化器并将内存分配给变量,在构造器执行后创建对象,并且每当您执行此操作时JVM都会重复此过程在另一个命令提示符下调用/运行程序。