关键词:
引言
在开发过程中,因为编程经验不足,经常会导致各种各样的溢出,今天本文就举例说明几种常见的溢出
堆溢出
堆溢出是最常见的一种溢出。
导致原因:堆中没有足够的空间储存新生成的实例对象
public static void main(String[] args) {
List<TestCase> cases = new ArrayList<TestCase>();
while(true){
cases.add(new TestCase());
}
}
解决办法:调大堆空间大小
-Xmx2048M
栈溢出
导致原因:方法调用太深,每执行一个方法,就有一次进栈操作,方法执行完就会出栈,无边界递归调用就会导致此问题
public void plus() {
i++;
plus();
}
此方法一旦被调用就会产生栈溢出
常量池溢出
导致原因:常量池空间有限,无法储存更多的常量了
public static void main(String[] args) throws Exception {
try {
List<String> strings = new ArrayList<String>();
int i = 0;
while (true) {
strings.add(String.valueOf(i++).intern());
}
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
方法区溢出
方法区用来储存类定义信息
导致原因:大量的动态类生成,导致方法区空间不足
public static void main(String[] args) {
while (true) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(TestCase.class);
enhancer.setUseCache(false);
enhancer.setCallback(new MethodInterceptor() {
@Override
public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable {
return arg3.invokeSuper(arg0, arg2);
}
});
enhancer.create();
}
}
直接内存溢出
通过Unsafe在直接内存分配空间
导致原因:直接内存不足
public static void main(String[] args) {
try {
Field field = Unsafe.class.getDeclaredField("theUnsafe");
field.setAccessible(true);
Unsafe unsafe = (Unsafe) field.get(null);
while (true) {
unsafe.allocateMemory(ONE_MB);
count++;
}
} catch (Exception e) {
System.out.println("Exception:instance created " + count);
e.printStackTrace();
} catch (Error e) {
System.out.println("Error:instance created " + count);
e.printStackTrace();
}
}
java常见的几种运行时异常runtimeexception
常见的几种如下: NullPointerException-空指针引用异常ClassCastException-类型强制转换异常。IllegalArgumentException-传递非法参数异常。ArithmeticException-算术运算异常ArrayStoreException-向数组中存放与声明类型不兼容对象异常IndexOutOfBo... 查看详情
java内存溢出的几种情况
本文通过几段代码模拟实际的内存溢出异常。文中代码都是基于Oracle公司的HotSpot虚拟机运行的。1. Java堆溢出1.1模拟场景Java堆用于存储对象,只要不断的创建对象,并保证GCRoots到对象之间有可达路径来避免垃圾回收机制清除... 查看详情
异常堆内存溢出oom的几种情况
1、堆内存溢出【情况一】: Java.lang.OutOfMemoryError:Javaheapspace:这种是java堆内存不够,一个原因是真不够,另一个原因是程序中有死循环; 如果是java堆内存不够的话,可以通过调整JVM下面的配置来解决: <jvm-arg>-X... 查看详情
java字符串反转常见的几种方式?
(1)通过StringBuilder的reverse()方法,速度最快:1publicclassStringReverse{2publicstaticvoidmain(String[]args){3Stringstr="hello";4System.out.println(reverse(str));56}7publicstaticStringBuilderreverse(Stringstr){8 查看详情
ajaxjquery中ajax请求常见常用的几种方法(代码片段)
文章目录jQuery中AJAX请求常见常用的几种方法1.$.ajax()方法2.$.get()方法和$.post(方法)3.$.getJSON()方法jQuery中AJAX请求常见常用的几种方法1.$.ajax()方法可以在服务器端请求失败后依然调用回调函数 $.ajax( "url":"send/array/one.html&... 查看详情
loadrunner的几种常见错误
转自网络loadrunner的几种常见错误及解决办法1录;解决:、;在录制选项option-network-;2在回放脚本时出现的错误;Action.c(33)Error-35061;解决方法:可以用web_set_max_html;ParamName=Correlat;LB=c,;RB=nloadrunner的几种常见错误及解决办法1... 查看详情
java常见的几种设计模式
设计模式 1、概述 1)设计模式(Designpattern):是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结; 2)分类: 创建型模式(创建对象的): 单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。 行... 查看详情
常见的几种异常类型exception
常见异常类型:Java中的异常分为两大类: 1.CheckedException(非RuntimeException) 2.UncheckedException(RuntimeException) 算数异常类:ArithmeticExecption 空指针异常类型:NullPointerException 类型强制转换类型:Cl 查看详情
常见的几种算法?
1、冒泡排序冒泡排序可以算是最经典的排序算法了,两层for循环,里层循环中判断相邻两个元素比较大小,如果前者比后者大,两个元素交换位置;外层循环一次,就能将数组中剩下的元素中最小的元素“浮”到最前面,所以... 查看详情
常见的几种限流算法代码实现(java)(代码片段)
...;在此记录一下以下是原文链接。年轻人,来手撸几种常见的限流算法!限流算法接口publicinterfaceRateLimiter/***判断请求是否能够通过*@return能通过返回true否则false*/booleantryAcquir 查看详情
常见的几种限流算法代码实现(java)(代码片段)
...;在此记录一下以下是原文链接。年轻人,来手撸几种常见的限流算法!限流算法接口publicinterfaceRateLimiter/***判断请求是否能够通过*@return能通过返回true否则false*/booleantryAcquir 查看详情
ajax中xmlhttprequest对象中readystate与status的几种常见状态
XMLHttpRequest对象的readyState与status的几种状态码表示的意思:readyState有五种状态:0(未初始化):(XMLHttpRequest)对象已经创建,但还没有调用open()方法;1(载入):已经调用open()方法,但尚未发送请求;2(载入完成):请求已经发送完成;... 查看详情
函数指针常见的几种
获取post请求的几种常见方式
通常从httppost请求获取数据的方法如下:1.request.getInputStream()2.request.getReader()3.request.getParameterMap()系列4.通过spring框架中的RequestBody或RequestParampublicstaticStringreq2RawString(HttpServletRequestrequest)&nbs 查看详情
常见的几种魔术变量
如果在类中变量,方法被设置权限,外部想要设置,访问可以使用参考以下:__set和__getclassTets{private$a=‘‘;publicfunction__set($var,$val){$this->$val=$val;}publicfunction__get($var){return$this->$var;}}$test=newTest();$test->a=‘ab 查看详情
java程序员必备:常见oom异常分析
前言放假这几天,温习了深入理解Java虚拟机的第二章,整理了JVM发生OOM异常的几种情况,并分析原因以及解决方案,希望对大家有帮助。Java堆溢出Java堆用于存储对象实例,只要不断地创建对象,并且保证GCRoots到对象之间有可... 查看详情
访问注解(annotation)的几种常见方法
java的注解处理器类主要是AnnotatedElement接口的实现类实现,为位于java.lang.reflect包下。由下面的class源码可知AnnotatedElement接口是所有元素的父接口,这时我们通过反射获得一个类的AnnotatedElement对象后,就可以通过下面表格的几个... 查看详情
常见的几种索引扫描类型
一、如何查看SQL语句的执行计划1、在SQL*PLUS环境中 执行SETAUTOTRACEON可以打开启动自动跟踪功能,如下(下面的红色字体是敲入的命令):ChenZw> setautotraceonChenZw> select*fromemp; EMPNOENAME JOB& 查看详情