前言
本篇主要以小编浅薄的知识来浅谈一下在Java虚拟机JVM中创建一个对象的底层逻辑,也会涉及到一点其他JVM的知识,一起来看看吧!
1.JVM的组成
2.JVM程序运行机制
(1)创建一个对象在运行时数据区的运行过程
(2)垃圾回收机制介绍
一、JVM的组成
JVM由类加载器、执行引擎、运行时数据区和本地接口组成。
类加载器(Class Loader):负责装载 .class 到执行引擎,只负责加载,不决定能否执行。
执行引擎(Runtime data area):执行 .class 文件。
运行时数据区(Execution engine):即JVM内存。
本地接口(Native Interface):与其他编程语言进行交互的接口。
二、创建一个对象JVM的运行过程
(以下均为作者的理解,不具有参考价值)
1.创建一个对象运行时数据区进行的操作
实例化:
Animal a = new Animal();
历经过程:
1.在运行时数据区的方法区中寻找Animal类信息
2.如果没有这个类,类加载器会把当前这个Animal类的字节码文件加载到内存中;如有这个类,则调过此步执行下一步。
3.在堆中申请内存空间。
4.当前操作的对象的地址(即 a 的地址)会放在操作数栈(线程)中。
5.在当前操作数栈中的方法栈帧的局部变量区域申请内存空间给a。
操作数栈 -> 方法栈帧 -> 局部变量
6.在操作数栈中弹出顶部操作数 xxx 给 a 。
2.垃圾回收机制
JVM的垃圾回收器主要包括新生代和老年代。一个Java程序运行时可能会产生许多无用的对象。为了避免内存消耗,JVM会把这些无用的对象放入垃圾回收机制的新生代,每执行一次标记一次,当标记超过十五次时,放在新生代中的对象会进入老年代。