首页 > 试题广场 >

关于以下方法调用描述正确的是:() private st

[不定项选择题]
关于以下方法调用描述正确的是:()
private static final List<String> list = new ArrayList<>();
public static String test(String j){
    int i = 1, s = 1, f = 1, a = 1, b = 1,c = 1,d = 1,e = 1;
    list.add(new String("11111111111111111111111111111"));
    return test(s+i+f+a+b+c+d+e+"");
}

  • 一定会发生” OutOfMemoryError: Java heap space”
  • 一定会发生” StackOverflowError”
  • 一定会发生” OutOfMemoryError: Java heap space与StackOverflowError”
  • 当发生内存溢出错误时不需要用try…catch来捕获,需检查代码及jvm参数配置的合理性
StackOverflowError 原因在于 : 无限调用递归函数, 函数是以栈帧的形式存在于虚拟机栈内存中, 一直创建栈帧, 导致栈溢出.
OutOfMemoryError : 
Java堆用于存储对象实例, 只要不断地创建对象, 并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制来清除这些对象, 那么在对象数
量到达最大堆的容量限制后就会产生内存溢出异常. (摘抄自深入理解java虚拟机), 所以一直new String() 并不会造成堆内存溢出.
java异常可以分为checkedException和uncheckedException, 检查异常(不包括runtimeException及其子类的exception的子类)必须使用try catch或者throws处理, 而error属于非检查异常,非检查异常可以使用try catch捕获,但是没必要.
发表于 2019-10-16 20:59:59 回复(6)
StackOverFlowError 原因在于:无限调用递归函数 导致栈帧一直创建,最终导致栈溢出。
OutOfMemoryError 未出现的原因在于,在第二次new的时候,第一次new的对象失去了引用,从而使得GCroot到第一个对象间的可达路径消失了,致使对象被回收。
发表于 2023-02-12 09:26:03 回复(0)