Java中提到跟内存相关的问题,就会想到JVM,而JVM的东西又很繁多,有些还不简单。内容这个问题,这次就好好梳理一下,把所有相关的内容都了解一下,对这些内容做出分类,再从中确定面试热点和实战热点,这样总揽全局,有所取舍,以后再遇到这个问题,就不会头疼了。(这个内容比较多,所以分次完成)


1.

关于内存的问题都有哪些?我手里有两份PDF,是近些年面试题的汇总,先从这里面找,然后再百度,再去牛客网搜索,再无知乎,差不多了。

汇总一下问题:

1)解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法。

2)Java 中会存在内存泄漏吗,请简单描述。

3)int 和 Integer 哪个会占用更多的内存?

4)32 位 JVM 和 64 位 JVM 的最大堆内存分别是多数?

5)怎么获取 Java 程序使用的内存?堆使用的百分比?

6)Java 中堆和栈有什么区别?

7)Java 中的内存映射缓存区是什么?

8)解释 Java 堆空间及 GC?

9)你能保证 GC 执行吗?

10)JVM 内存区域

11)JVM 运行时内存

12)如何在两个线程之间共享数据

13)说一下 JVM 的主要组成部分及其作用?

14)垃圾收集器简述Java垃圾回收机制

15)解释一下对象的创建过程?

16)对象在内存中的存储布局?Object o = new Object()在内存中占用多少字符?

17)描述一下Java的内存模型

不再列出更多的问题了,看了这些,大概可以做一个分类了。


2.

Java面试问的问题,跟内存相关的分类:

1)原理:Java的内存模型(JMM),JVM相关,如区域划分,垃圾回收,各个内存区域的作用等,主要考察理论知识

2)实战:JVM调优,内存对业务的影响,并发编程

3)安全:跟内存有关的安全问题,如内存泄漏

简单分为这三类,对于不同的面试者,问的内容也会有所不同:

1)校招多问原理,因为大部分人还没有实战经验,问原理更合适一些

2)社招多问实战了,不过这里会考虑经验问题,比如工作1年的,基本不会问调优,工作3年以上的,肯定问调优

3)至于安全问题,都会问到,因为内存泄漏总是有机会遇到的,排查方式和解决方案也有比较系统的方法,所以多少能说上来点,当然自己遇到过,并且实际解决过,就更有心得了

有了这些,就可以开始梳理了,这部分内容我只梳理重点的东西,一些旁枝末节这次就不搞了。


3.

准备解决这几个问题:

1)什么是内存?有什么用?用在哪里?怎么用?为什么这样用?

2)Java的内存是什么?......

3)JVM是什么?......

五步解决法:是什么?有什么用?用在哪里?怎么用?为什么这样用?

这是我解决问题的通常思路,下篇文章就从内存本身开始。


大家有什么关于面试想了解的内容,可以在文末留言~