JVM面试题

一、Java内存区域

1.介绍下 Java 内存区域(运行时数据区)

主要包括程序计数器、虚拟机栈、本地方法栈、堆(包含字符串常量池)、方法区(包含运行时常量池,在jdk1.8之后移到了直接内存中,称为元空间);

 

其中程序计数器:用来存储当前线程即将执行的下一条指令的地址,程序计数器是唯一不会出现OOM的区域;

虚拟机栈:用于存储Java方法在运行时需要的各种数据,包括入参、返回值和局部变量等,虚拟机栈中可能会出现OOM和StackOverFlowError;

本地方法栈:用于存储本地方法在运行时需要的各种数据(本地方法指那些用其他语言编写的、用native修饰的方法),本地方法栈也可能会出现OOM和StackOverFlowError;

——程序计数器、虚拟机栈和本地方法栈都是线程独有的,生命周期和所属线程一样,不需要进行垃圾回收;

 

堆:用于存储几乎所有的对象实例(经过逃逸分析,引用没有被返回或者未被外面使用的对象可以直接在虚拟机栈上分配内存),堆中最容易出现OOM;

方法区:用于存储类的class文件相关信息,包括类信息、字段信息、方法信息、常量、静态变量、即时编译器编译后的代码缓存等;

运行时常量池:方法区的一部分,用于存储类的class文件在编译期生成的各种字面量和符号引用;

字符串常量池:堆的一部分,用于存储对字符串常量的引用;

 

 

 

 

2.Java 对象的创建过程

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

posted @ 2023-10-18 17:12  Avava_Ava  阅读(10)  评论(0编辑  收藏  举报