Java面试题:写代码使得分别出现StackOverflowError和OutOfMemoryError
转载自:http://www.cnblogs.com/xudong-bupt/p/3360206.html
今天做了个笔试,这是其中的一道题目:写代码使得分别出现StackOverflowError和OutOfMemoryError。
1.StackOverflowError
堆栈溢出错误一般是递归调用嘛。下面的代码就可以出现:

package T20131009;
public class StackOverflowTest {
public static void main(String[] args) {
method();
}
public static void method(){
for(;;)
method();
}
}

运行结果:
深入分析:JVM 虚拟内存分为 堆内存和 栈内存,而栈内存存储的是局部变量和方法调用,因此如果要让程序发生 StackOverflowError,即栈溢出的话。那么最简单的方法就是将栈塞满,也就是递归调用方法,不断往栈里面塞入信息。这样到一定程度,栈就爆了。有的人问了,那我往栈里塞局部变量行不行,这个应该可行,不过好像很少这么做。我猜原因应该是:局部变量所需要的存储空间很小,而方法调用需要存储的除了方法调用地址之外,可能还要保存现场信息,所以需要的存储空间也多一些,从而也更容易发生栈溢出。
2.OutOfMemoryError
内存溢出一般是出现在申请了较多的内存空间没有释放的情形。下面的代码就可以出现:

package T20131009;
import java.util.ArrayList;
import java.util.List;
public class OutOfMemoryTest {
public static void main(String[] args){
List list=new ArrayList();
for(;;){
int[] tmp=new int[1000000];
list.add(tmp);
}
}
}

运行结果:
深度解析:JVM 虚拟内存分为 堆内存和 栈内存,对象的具体内容是存储在堆内存的。当堆内存不足的时候就会发生 OutOfMemoryError,即内存不足。因此当我们存储的数据太多,塞满堆内存的时候,就会报这个错误。本例就是通过往堆内存塞很大的数组来实现 OutOfMemoryError 的。
Java面试题:写代码使得分别出现StackOverflowError和OutOfMemoryError的更多相关文章
- 优秀 Java 程序员写代码的风格,不再留坑给别人
往 期 精 彩 推 荐 [1]Java Web技术经验总结 [2]15个顶级Java多线程面试题及答案,快来看看吧 [3]面试官最喜欢问的十道java面试题 [4]从零讲JAVA ,给你一条清晰 ...
- 优秀 Java 程序员写代码的风格
往 期 精 彩 推 荐 [1]Java Web技术经验总结 [2]15个顶级Java多线程面试题及答案,快来看看吧 [3]面试官最喜欢问的十道java面试题 [4]从零讲JAVA ,给你一条清晰 ...
- Java面试题 静态代码块 构造代码块 构造方法 的执行顺序
JAVA中的静态代码块 构造代码块 构造方法执行顺序: 静态代码块(类加载时执行)>>构造代码块>>构造方法 下面展示一个简单的例子,推荐大家动手运行一遍: public cl ...
- Java面试手写代码题
1.栈实现 2.Iterator实现 3.单例 4.多线和控制(暂停,恢复,停止) 5.生产者消费者
- java面试题及答案(基础题122道,代码题19道)
JAVA相关基础知识 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分, ...
- 转 java面试题及答案(基础题122道,代码题19道)
JAVA相关基础知识1.面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时 ...
- Java 10 的 10 个新特性,将彻底改变你写代码的方式!
Java 9才发布几个月,很多玩意都没整明白,现在Java 10又快要来了.. 这时候我真尼玛想说:线上用的JDK 7 甚至JDK 6,JDK 8 还没用熟,JDK 9 才发布不久不知道啥玩意,JDK ...
- 《java入门第一季》之面向对象面试题(代码块一网打尽)
<pre name="code" class="java">/* 代码块:在Java中,使用{}括起来的代码被称为代码块. 根据其位置和声明的不同, ...
- 请注意写代码的习惯与态度(Java)
注: 以下内容引自http://blog.csdn.net/xtayfjpk/article/details/52136686 请注意写代码的习惯与态度(Java) 原创 2016年08月06日 16 ...
随机推荐
- 【转】解决UpdatePanel 与 jQuery的冲突
现在越来越多的朋友喜欢将jQuery和ASP.NET AJAX 一起来用,最近,许多印度人在forum里抱怨说UpdatePanel和jQuery不兼容,许多jQuery效果在UpdatePanel更 ...
- [译]如何在Web开发中使用Python
[译]如何在Web开发中使用Python 原文:HOWTO Use Python in the Web 摘要 这篇文档展示了Python如何融入到web中.它介绍了几种Python结合web服务器的方 ...
- 平面上的地图搜索--Java学习笔记(四)
版权声明: 本文由Faye_Zuo发布于http://www.cnblogs.com/zuofeiyi/, 本文可以被全部的转载或者部分使用,但请注明出处. 这一个月以来,都在学习平面上的地图搜索,主 ...
- Angular2 路由问题修复 、求解
Angular2 提供了比angular1 更为强大的路由功能,但是在具体使用路由过程中,可是出现了很多路由不按照预想的方式执行的问题.为了说明今天的问题,我特地新建了一个测试工程.欢迎交流. 首先介 ...
- Spring Data JPA: 实现自定义Repository
一.前言 由于项目中的 实体(entity)默认都是继承一个父类(包含一些公共的属性,比如创建时间,修改时间,是否删除,主键id).为了实现逻辑删除,一般会自己实现RepositoryFactoryB ...
- 2017-2-18 net 输入输出语句
控制台程序的创建,输出,输入语句,定义变量,变量赋值,值覆盖,值拼接,值打印两种数据类型,整形类型转换 知识点: 1.输出语句 Console.WriteLine("");光标换行 ...
- 信号处理——Hilbert端点效应浅析
作者:桂. 时间:2017-03-05 19:29:12 链接:http://www.cnblogs.com/xingshansi/p/6506405.html 声明:转载请注明出处,谢谢. 前言 ...
- ERP实施顾问工作中应努力做到哪些?
1.树立并分享信誉 准确的为自己定位,并积极树立自己的信誉.从这样两个角度去考虑问题,一是从高层管理者的角度去思考行业竞争和公司运作的问题,一是从专业.细致的角度去考虑单据.报表.界面等数据处理的问题 ...
- ReactiveSwift框架
最近项目不多,所以就研究了一下RxSwift和RAS,RAC以前项目中用过了,在这里我就先简单的介绍一下什么是RAS.总述:在RAC 5.0这个版本,有了很大的改动,API已经重新命名.在和Swift ...
- [LeetCode]Rotate Image(矩阵旋转)
48. Rotate Image Total Accepted: 69437 Total Submissions: 198781 Difficulty: Medium You are give ...