java基础面试题(二)
java后端面试题大全
- 3.JVM
- 3.1 对象实例、类信息、常量、静态变量分别在运行时数据区的哪个位置?
- 3.2 java类的加载流程
- 3.3 java内存溢出什么时候会发生以及解决方法
3.JVM
3.1 对象实例、类信息、常量、静态变量分别在运行时数据区的哪个位置?
- 堆
对象实例、String常量池、基本类型常量池、静态变量 - 方法区
类信息、类常量池、运行时常量池 - 虚拟机栈
临时变量
3.2 java类的加载流程
java文件到最终运行, 需要经过编译和类加载这两个阶段
编译的过程:把.java文件编译成.class文件
类加载的过程:把.class文件加载到jvm的内存中
- 加载
通过类的全限定名获取类的二进制数据, 这可以通过类加载器完成, 类加载器可以从文件系统、网络、ZIP文件等地方获取类文件的二进制数据
将获取的二进制数据转换为方法区(或元空间)的运行时数据结构, 这个数据结构存储了类的字段、方法、构造方法等信息,同时也包含了类的常量池,即字面量(如字符串、final常量)和符号引用等。 - 验证
确保被加载的类的正确性. 这个阶段主要包括文件格式验证、元数据验证、字节码验证等,以确保类文件的正确性和安全性。 - 准备
为类的静态变量分配内存并设置初始值, 这里的初始值通常是默认值,比如数值类型的默认值是0,引用类型的默认值是null - 解析
类、接口、字段和方法的符号引用解析为直接引用 - 初始化
类的初始化方法
3.3 java内存溢出什么时候会发生以及解决方法
一、内存溢出的原因
如果内存泄露的空间足够大,就会导致内存溢出
堆内存中一个对象不再使用时,垃圾回收器却无法从内存中删除他们,导致内存泄露。
二、内存泄露的影响