其他分享
首页 > 其他分享> > 美团一面试题

美团一面试题

作者:互联网

一、堆和栈区别

1.栈内存存储的是局部变量而堆内存存储的是实体;

2.栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短;

3.栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收。

二、JVM的内存结构,新建一个对象和引用值分别存在哪里

https://blog.csdn.net/rongtaoup/article/details/89142396

线程私有的运行时数据区: 程序计数器、Java 虚拟机栈、本地方法栈。
线程共享的运行时数据区:Java 堆、方法区。

 新建一个对象存在堆中,引用值存在栈中(虚拟机栈)。

三、怎么判断哪些对象需要回收

引用计数法:设置引用计数器,对象被引用计数器加 1,引用失效时计数器减 1,如果计数器为 0 则被标记为垃圾。会存在对象间循环引用的问题,一般不使用这种方法。
可达性分析:通过 GC Roots 的根对象作为起始节点,从这些节点开始,根据引用关系向下搜索,如果某个对象没有被搜到,则会被标记为垃圾。可作为 GC Roots 的对象包括虚拟机栈和本地方法栈中引用的对象、类静态属性引用的对象、常量引用的对象。

四、引用类型有哪些,怎么使用

强引用: 被强引用关联的对象不会被回收。一般采用 new 方法创建强引用。
软引用:被软引用关联的对象只有在内存不够的情况下才会被回收。一般采用 SoftReference 类来创建软引用。 软引用可用来实现内存敏感的高速缓存。
弱引用:垃圾收集器碰到即回收,也就是说它只能存活到下一次垃圾回收发生之前。一般采用
WeakReference 类来创建弱引用。弱引用对象常常用于Map结构中,引用数据量较大的对象。
虚引用: 无法通过该引用获取对象。唯一目的就是为了能在对象被回收时收到一个系统通知。虚引用必须与引用队列联合使用。

五、开发中遇到的内存泄露有哪些

标签:一面,垃圾,试题,对象,美团,回收,计数器,内存,引用
来源: https://blog.csdn.net/yuyan_jia/article/details/119299304