java中常见的几种的溢出

你是人间四月天      2022-06-01     669

关键词:

引言

在开发过程中,因为编程经验不足,经常会导致各种各样的溢出,今天本文就举例说明几种常见的溢出

堆溢出

堆溢出是最常见的一种溢出。
导致原因:堆中没有足够的空间储存新生成的实例对象

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& 查看详情