【面试官】JVM的堆内存你说说看?
- 面试官:JVM的堆内存你说说看?
- 面试官:虚拟机栈呢?
- 面试官:本地方法栈?
- 面试官:方法区存放什么内容知道吧?
- 面试官:程序计数器有什么作用?
- 面试官:说说Java变量存储位置?
大家好,我是南哥。
一个Java学习与进阶的领路人,相信对你通关面试进入心心念念的公司有所帮助。
文章目录
- JVM内存布局
- 堆内存
- 虚拟机栈
- 本地方法栈
- 方法区
- 程序计数器
- 变量存储位置
1. JVM内存布局
1.1 堆内存
面试官:JVM的堆内存你说说看?
我们Java程序员相对C语言老哥来说,南友们不需要写内存管理这些东西。具体什么东西呢?不需要为每个对象去写繁琐的释放内存代码。
以下是一个C语言示例,C语言需要显式地使用free
函数来释放内存。
#include <stdio.h>
#include <stdlib.h>
int main() {
// 分配内存以存储一个整数
int *ptr = malloc(sizeof(int));
if (ptr == NULL) {
printf("内存分配失败\n");
return 1;
}
// 使用分配的内存
*ptr = 123;
printf("存储的整数是: %d\n", *ptr);
// 完成使用后释放内存
free(ptr);
return 0;
}
我们把重要的内存管理最高权力交给了JVM虚拟机,总得多多了解JVM虚拟机是如何处理内存管理的、包括JVM内存区域包含了什么,否则线上出了什么故障,不了解原理连解决的思路都没有。
JVM内存布局包含了五部分,分别是堆内存、本地方法栈、虚拟机栈、方法区、程序计数器。南哥画画图,给你加深理解。
堆内存的作用很方便记忆,它的唯一目的就是存放对象实例。成员变量的变量值无论是基本类型、还是引用类型都存储在堆内存中,而局部变量的变量值如果是引用类型则存储在堆内存中。这点下文南哥会继续讲到。
public class JavaSouth {
// 成员变量:无论是基本类型、还是引用类型都存储在堆内存中
private int memberInt = 10;
// 成员变量:无论是基本类型、还是引用类型都存储在堆内存中
private String memberString = "Hello, World!";
public void displayInfo() {
// 局部变量:如果是引用类型则存储在堆内存中
String localString = new String("Local String");
System.out.println("Member int: " + memberInt);
System.out.println("Member String: " + memberString);
System.out.println("Local String: " + localString);
}
}
JVM的堆内存,在国内也被称为GC堆。说到GC回收,目前主流垃圾回收器都使用了分代收集算法,GC堆被分为了新生代、老年代。
新生代、老年代又使用了不同的垃圾回收算法,如新生代的对象特点就是存活时间短,更适合把内存一分为二的复制算法;而老年代的对象存活时间就相对较长了,各种大对象、小对象也比较复杂,可以使用标
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
Java面试突击 文章被收录于专栏
👉以面试官面试的形式,涵盖了你怒怼大厂面试官、拿下大厂面试所需掌握的核心知识、面试重点! 👉相信一定对你顺利通关面试、拿到理想Offer有所帮助! 👉花费大量精力去制作本专栏,创作不易,各位的支持就是我创作的最大动力!