java基本类型溢出,java int 溢出

发布时间:2022-11-20

本文目录一览:

  1. java中的溢出问题
  2. java内存溢出的问题如何排查
  3. JAVA 内存溢出的几种类型
  4. java内存溢出怎么解决?
  5. java 溢出是什么意思

java中的溢出问题

(1)这你要理解基本类型之间的相互转换还有8中基本类型所占的位数; 除去boolean外;byte 8位,char 16位,double 64,float 32,int 32,long 64;short 16; 其中 byte, char, short可以自动转换为int; byte,int,short,可以自动转换为double; byte,int,double,short可以自动转换为double/float因为double和float可应用科学计数法表示无穷大; 整形默认类型是int值为0; 浮点数默认类型为double值为0.0; 下面说一说溢出: 例如 byte i=3;是错误的; 因为3是int型,而i是byte,JVM(java虚拟机)认为int型赋给byte越界了。 byte i=(byte)3;进行强制类型转换才行; 同理 float i=3.0;也是错的; float i=(float)3.0或i=3.0f; 还有: byte i1=(byte)1; byte i2=i1+i2;也是错的 因为在"+"过之后i1+i2自动转换成int型,所以不能赋给i3; 但是 byte i2+=i1;是对的 因为它只是在执行完i2+=i1;之后还是把byte型赋给了byte型;

java内存溢出的问题如何排查

java程序大家都知道,内存溢出是经常见的错误,下面从基本的开始分析! 内存溢出是由于没被引用的对象(垃圾)过多造成JVM没有及时回收,造成的内存溢出。如果出现这种现象可行代码排查: 一)是否App中的类中和引用变量过多使用了Static修饰 如public static Student s;在类中的属性中使用 static修饰的最好只用基本类型或字符串。如public static int i = 0; //public static String str; 二)是否App中使用了大量的递归或无限递归(递归中用到了大量的建新的对象) 三)是否App中使用了大量循环或死循环(循环中用到了大量的新建的对象) 四)检查App中是否使用了向数据库查询所有记录的方法。即一次性全部查询的方法,如果数据量超过10万多条了,就可能会造成内存溢出。所以在查询时应采用“分页查询”。 五)检查App中是否使用了数组,List,Map中存放的是对象的引用而不是对象,因为这些引用会让对应的对象不能被释放。会大量存储在内存中。 六)检查是否有数组,List,Map中存放的是对象的引用而不是对象,因为这些引用会让对应的对象不能被释放。会大量存储在内存中。 七)检查是否使用了“非字面量字符串进行+”的操作。因为String类的内容是不可变的,每次运行"+"就会产生新的对象,如果过多会造成新String对象过多,从而导致JVM没有及时回收而出现内存溢出。 如:

String s1 = "My name";
String s2 = "is";
String s3 = "xuwei";
String str = s1 + s2 + s3 +.........; // 这会容易造成内存溢出

但是:

String str = "My name" + " is " + " xuwei" + " nice " + " to " + " meet you"; // 这种就不会造成内存溢出

因为这是"字面量字符串",在运行"+"时就会在编译期间运行好。不会按照JVM来执行的。 在使用String,StringBuffer,StringBuilder时,如果是字面量字符串进行"+"时,应选用String性能更好;如果是String类进行"+"时,在不考虑线程安全时,应选用StringBuilder性能更好。 知道原因了,解决起来就非常简单了。

JAVA 内存溢出的几种类型

主要有三种类型:

  1. OutOfMemoryError: PermGen space 发生这种问题的原因是Java虚拟机装载类的空间不够,与Permanent Generation space有关。可以通过增加Java虚拟机中的-XX:PermSize-XX:MaxPermSize参数的大小,其中-XX:PermSize是初始永久保存区域大小,-XX:MaxPermSize是最大永久保存区域大小。
  2. OutOfMemoryError: Java heap space 发生这种问题的原因是Java虚拟机创建的对象太多,在进行垃圾回收时,虚拟机分配的堆内存空间已经满了,与Heap space有关。可以通过增加Java虚拟机中-Xms(初始堆大小)和-Xmx(最大堆大小)参数的大小。例如:-Xms256m -Xmx1024m
  3. OutOfMemoryError: unable to create new native thread 在Java线程数很多的情况下易发生。

java内存溢出怎么解决?

第一,对所有的代码包括页面中的Java代码都进行一遍彻底的回顾检查:

  1. 对那些静态(static)的对象要特别留神,特别是类型为Map,List,Set的,静态的变量会一直驻存在内存中,生命周期比较长,不会被垃圾器回收。
  2. 对于代码,要审查是否生成了大量的冗余的对象,还有一些逻辑业务处理的类,算法是否过于复杂,调整算法,对于代码认真审查,再仔细重构一遍代码,能提高代码质量,提高程序运行稳定性。
  3. Java中的内存溢出大都是因为栈中的变量太多了。其实内存有的是。建议不用的尽量设成null以便回收,多用局部变量,少用成员变量。
    • 变量所包含的对象体积较大,占用内存较多。
    • 变量所包含的对象生命周期较长。
    • 变量所包含的对象数据稳定。
    • 该类的对象实例有对该变量所包含的对象的共享需求。
  4. 在我的程序中对静态变量的优化后,使程序占用内存量至少提升了5k-10k。所以也不容忽视。 第二,还有就是String类相关的东西:
  5. 字符串累加的时候一定要用StringBuffer的append方法,不要使用+操作符连接两个字符串。差别很大。而且在循环或某些重复执行的动作中不要去创建String对象,因为String对象是要用StringBuffer对象来处理的,一个String对象应该是产生了3个对象(大概是这样)。
  6. 字符串length()方法来取得字符串长度的时候不要把length放到循环中,可以在循环外面对其取值。特别是循环次数多的时候,尽量把length放到循环外面。
    int size = xmlVector.size();
    for (int i = 2; i < size; i++) {
        ...
    }
    
  7. 写代码的时候处理内存溢出:
    try {
        // do sth
        ...
    } catch (OutOfMemoryError e) { // 可以用一个共通函数来执行
        System.out.print("no memory!");
        System.gc();
        // do sth again
        ...
    }
    
  8. 对于频繁申请内存和释放内存的操作,还是自己控制一下比较好,但是System.gc()的方法不一定适用,最好使用finalize强制执行或者写自己的finalize方法。Java中并不保证每次调用该方法就一定能够启动垃圾收集,它只不过会向JVM发出这样一个申请,到底是否真正执行垃圾收集,一切都是个未知数。

java 溢出是什么意思

你说的这个溢出属于数值范围溢出,low和high都是int型,int类型由它定义的变量的数值范围是有限的,想必你也知道,你在执行(low+high)/2的时候,求和操作可能使求和后的结果大于int类型所能表示的数值范围,这样就会产生数据溢出。改为减,可以避免。不过我觉得这样的情况仅发生在high和low的数值都很大的情况下。其实没必要考虑这样的问题,若溢出,会有异常提醒你,一般的int足够你用了,嫌小改为long。欢迎大家一起讨论