商业机会 产品大全 企业名录 我商务中心 | | 手机站 网址:xadnitpx.qy6.com 编辑Java程序中挂掉是什么原因?_西安达内科技
西安达内科技
联系人: 先生 (seo)
电 话:029-82222601
手 机:

产品目录

编辑Java程序中挂掉是什么原因?

留言询价
详细说明

    在编辑Java程序中挂掉是为什么呢?下面西安达内Java培训(www.xatarena.cn)讲师为了讲清这个问题,写了一个简单的例子。在本例中,先初始化了一个map,然后用一个无限循环将一些键值对插入到map里面:



  class Wrapper {

  public static void main(String args[]) throws Exception {

  Map map = System.getProperties();

  Random r = new Random();

  while (true) {

  map.put(r.nextInt(), "value");

  }

  }

  }



  你可能也猜到了,这段代码编译执行后无法正常结束。当我用这组参数启动的话:



  java -Xmx100m -XX:+UseParallelGC Wrapper



  我会在终端中看到java.lang.OutOfMemoryError: GC overhead limit exceeded的异常信息。不过如果我调整一下堆大小或者是GC的类型的话,在我的Mac OS X 10.9.2 系统上用Oracle Hotspot JDK 1.7.0_45来运行,就会出现不同的情况。



  比如说,我用一个较小的堆来运行这个程序,就像下面这样:



  java -Xmx10m -XX:+UseParallelGC Wrapper



  应用程序会抛出一段大家更熟悉的错误信息然后挂掉:java.lang.OutOfMemoryError: Java heap space.



  如果你换成ParallelGC以外的GC策略的话,比如说-XX:+UseConcMarkSweepGC or -XX:+UseG1GC,你将会看到由默认的异常处理器所抛出的异常,并且你看不到堆栈信息了,因为堆已经没有空间了,甚至连异常的堆栈信息都没法填充了,因此它在创建异常的时候就挂掉了:



  My Precious:examples vladimir$ java -Xmx100m -XX:+UseConcMarkSweepGC Wrapper



  Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "main"



  这说明了什么?当资源紧缺的时候,你根本没法判断你的应用程序是怎么挂掉的,因此不要指望能出现你所预期的一系列错误提示。从上面这个例子中可以看到,你的程序可能会以三种完全不同的方式挂掉:



  GC的安全性检查失败:一旦GC花费的时间占到98%以上的话,JVM就会宣告投降了: java.lang.OutOfMemoryError: GC overhead limit exceeded.



  无法为下一个操作分配足够的内存:如果无法满足下一条指令所需要分配的内存的话,你会收到一条"java.lang.OutOfMemoryError: Java heap space" 的错误信息。

 
西安达内科技
先生 (seo)  
电  话: 029-82222601
传  真:
移动电话:
在线联系:
公司地址: 中国陕西西安市陕西省西安市兴庆南路10号交大出版大厦6层
邮  编:
公司主页: http://xadnitpx.qy6.com(加入收藏)
 



其它商业信息
 1 直接到第
20 条信息,当前显示第 1 - 20 条,共 1

公司首页 | 公司介绍 | 产品展示 | 供求商机 | 诚信档案 | 联系方法 | 加入收藏
西安达内科技 公司地址:中国陕西西安市陕西省西安市兴庆南路10号交大出版大厦6层
先生 (seo) 电话:029-82222601 传真:
免责声明: 以上所展示的信息由会员自行提供,内容的真实性、准确性和合法性由发布会员负责,企业录对此不承担任何责任。如有侵犯您的权益,请来信通知删除。

机械 仪器 五金 电子 电工 照明 汽摩 物流 包装 印刷 安防 环保 化工 精细化工 橡塑 纺织 冶金 农业 健康 建材 能源 服装 工艺品 家居 数码 家电 通讯 办公 运动、休闲 食品 玩具 商务 广告 展会 综合
提供服务支持 © 企业录 | 移动端