Java面试必备:内存溢出、对象存活、Error与Exception解析

需积分: 5 0 下载量 172 浏览量 更新于2024-08-04 收藏 9KB TXT 举报
"Java常见基础面试题及答案涵盖了内存溢出、对象创建、垃圾收集、错误与异常分类、hashCode方法的用途以及字符串对象的创建等核心概念。" 1、Java中的内存溢出(OutOfMemoryError)通常是由于Java虚拟机(JVM)在运行时无法分配足够的内存给程序。内存溢出可以发生在不同方面: - PermGen Space:大量使用jar或class导致类空间不足。解决方法是调整JVM参数XX:PermSize和XX:MaxPermSize,减少jar包和重复加载的类。 - Java Heap Space:过多的对象创建使Java堆内存耗尽。可以通过设置Xms和Xmx参数来调整初始堆大小和最大堆大小,同时检查并消除可能导致大量对象创建的死循环或重复创建。 2、字符串对象的创建:"Strings = "123";" 这行代码如果字符串池中已经有"123",则不创建新对象,否则会在池中创建一个对象。"Strings = new String("123");" 则无论池中是否存在"123",都会在堆中创建一个新的对象。 3、循环引用与垃圾收集:现代JVM通常使用可达性分析算法来确定对象是否可被垃圾收集。即使A和B对象相互引用,只要它们与GC Roots之间没有可达路径,依然会被标记为可回收。 4、Error、Exception和RuntimeException的区别: - Error:表示系统级的严重问题,例如系统资源耗尽,这类错误通常不期望应用程序捕获。 - Exception:用于表示程序运行时可能出现但不希望立即终止的情况,可以被捕获并处理。Exception分为已检查异常(需要try-catch或在方法上声明)和未检查异常(如RuntimeException及其子类,如NullPointerException、ArithmeticException等)。 5、hashCode方法:该方法用于提供对象的哈希码,主要用于哈希表(如HashMap)中快速定位对象。相同的对象必须具有相同的hashCode,但不同的对象可能有相同的hashCode,这会导致哈希冲突。 6、HashMap和HashSet的使用:hashCode在HashMap中用于确定键值对的存储位置,而在HashSet中用于快速判断元素是否存在,因为相同的元素会有相同的hashCode。 以上是Java基础面试中常见的问题,理解这些概念对于开发者来说至关重要,它们涉及到了内存管理、异常处理、字符串操作和数据结构的基本原理。