实例代码
public class JVMObject {
public final static String MAN_TYPE = "man";
public final static String WOMAN_TYPE = "woman";
public static void main(String[] args) throws InterruptedException {
Teacher T1 = new Teacher();
T1.setName("Sandwich");
T1.setSexType(MAN_TYPE);
T1.setAge(20);
Teacher T2 = new Teacher();
T2.setName("Jack");
T2.setSexType(MAN_TYPE);
T2.setAge(18);
Thread.sleep(Integer.MAX_VALUE);
}
}
public class Teacher {
String name;
String sexType;
int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSexType() {
return sexType;
}
public void setSexType(String sexType) {
this.sexType = sexType;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
-
JVM 向操作系统申请内存: JVM 第一步就是通过配置参数或者默认配置参数向操作系统申请内存空间,根据内存大小找到具体的内存分配表,然后把内存段的起始地址和终止地 址分配给 JVM,接下来 JVM 就进行内部分配。
-
JVM 获得内存空间后,会根据配置参数分配堆、栈以及方法区的内存大小
把以下参数配置到vm options
-Xms30m -Xmx30m -Xss1m -XX:MaxMetaspaceSize=30m

-
类加载(类加载的细节后续章节再细述): 这里主要是把 class 放入方法区、还有 class 中的静态变量和常量也要放入方法区
-
执行方法及创建对象: 启动 main 线程,执行 main 方法,开始执行第一行代码。此时堆内存中会创建一个 Teacher对象,对象引用 T1就存放在栈中。 后续代码中遇到 new 关键字,会再创建一个 Teacher对象,对象引用 T2就存放在栈中。

JVM 在操作系统上启动,申请内存,先进行运行时数据区的初始化,然后把类加载到方法区,最后执行方法。 方法的执行和退出过程在内存上的体现上就是虚拟机栈中栈帧的入栈和出栈。 同时在方法的执行过程中创建的对象一般情况下都是放在堆中,最后堆中的对象也是需要进行垃圾回收清理的。
这篇博客探讨了JVM如何向操作系统申请内存并进行内存区域的划分,包括堆、栈和方法区的分配。文章通过一个Java实例展示了对象在内存中的创建过程,详细解析了JVM内存管理在类加载和方法执行时的行为。同时,提到了JVM内存配置参数如-Xms、-Xmx等,以及对象在堆中的存储和垃圾回收的概念。
628

被折叠的 条评论
为什么被折叠?



