【面试官】JVM的堆内存你说说看?

  • 面试官:JVM的堆内存你说说看?
  • 面试官:虚拟机栈呢?
  • 面试官:本地方法栈?
  • 面试官:方法区存放什么内容知道吧?
  • 面试官:程序计数器有什么作用?
  • 面试官:说说Java变量存储位置?

大家好,我是南哥。

一个Java学习与进阶的领路人,相信对你通关面试进入心心念念的公司有所帮助。

文章目录

  1. JVM内存布局
    1. 堆内存
    2. 虚拟机栈
    3. 本地方法栈
    4. 方法区
    5. 程序计数器
    6. 变量存储位置

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有所帮助! 👉花费大量精力去制作本专栏,创作不易,各位的支持就是我创作的最大动力!

全部评论

相关推荐

2 5 评论
分享
牛客网
牛客企业服务