Java中栈和堆是很基础的知识点,常被用来考察面试者的Java基础能力。下面介绍一些经典的Java栈和堆面试题。
1、栈和堆有哪些区别?
栈:存储临时变量,基本数据类型和对象的引用。线程私有,每个线程都有自己的栈,栈的大小有限。 堆:存储对象及其实例变量。线程共享,虚拟机只有一个堆,堆的大小可以动态扩展。
2、栈和堆分别存储哪些数据?
栈:存储基本数据类型和对象的引用,如int、double、float、boolean、char、byte、short、long、枚举类型、对象引用等。 堆:存储对象及其实例变量。
3、Java中一个对象的生命周期是怎么样的?
当程序需要创建一个对象时,首先在堆中为对象分配一块存储空间,然后调用构造方法初始化对象的属性值。当对象不再被引用时,成为垃圾对象,虚拟机的垃圾回收器将在以后的某个时间回收这个对象所占用的空间。
4、常见的Java内存泄漏原因有哪些?
内存泄漏是指程序员在编写程序时,由于疏忽或错误没有及时释放不再使用的对象,导致这些对象一直占用着内存空间而无法被垃圾回收器回收,最终导致JVM的内存空间被耗尽。常见的Java内存泄漏原因包括: 1)长生命周期的对象持有短生命周期的对象的引用,造成短生命周期的对象无法被垃圾回收。 2)不正确的缓存对象。 3)未关闭数据库连接等资源。 4)事件监听器未取消注册。 5)过度使用静态变量和单例模式。 6)大量创建字符串对象等。
以上是关于Java栈和堆面试题的介绍,建议面试前多进行相关知识点的复习,以便更好地应对面试中的考察。