JAV体系结构
上图中名次解释
Class File:java文件通过
javac
执行类似javac Hello.java
的命令,将java文件编译成class文件类加载器:将一些类加载到内存中的方法区中,
方法区:在jdk1.8之前叫方法区,1.8之后修改成方法区,不同点在于,方法区属于堆空间一部分,是有默认大小的,元空间利用的是宿主机的内存,是动态扩展的;主要存放了一些常量、静态变量、类信息等,可以理解成class文件在内存中的存放位置。
栈:JVM执行java代码使用的栈
本地方法栈:JVM调用操作系统方法使用的栈
堆:是JVM执行java代码使用的堆;主要存放new出来的对象
程序计数器:是JVM执行程序的流水线,存放一些跳转指令
new 类名()底层做了什么?
可以简单的分为以下几个步骤:
- 检查方法区中,有无该类模板——>
- 生成一个对象,存储在堆中——>
- 如果有对象的引用变量,则在栈中生成该引用变量,并将该引用变量指向堆中对应的对象
具体看另一篇博客:new一个对象,底层做了哪些事情 | 代码流畅,心情舒畅! (liu-ruyang.github.io)