java 内存泄漏测试

steely_chen 2013-04-06 03:59:03
今天看了一道面试题:java会存在内存泄漏吗?请简单描述。
答案是:会.int i1,i2; 将i1-i2 如果i1是足够大的正数,i2是足够大的负数,就会造成溢位。导致错误。
我手痒的去测试了一下。
程序如下:

int i1=Integer.MAX_VALUE;
int i2=Integer.MIN_VALUE;
System.out.println(i1+"\t"+i2);
System.out.println(i1-i2);
int i3 = i1-i2;
System.out.println(i3);

打印结果:
2147483647 -2147483648
-1
-1
我试着将i2-1 得到的值是2147483647 。
出于上面的测试我有以下疑问:
1. 网上的答案是不是有问题或者我的案例写得有问题
2. 据我所知内存溢出是因为jvm已经没有空间再装对象了才会出现内存溢出,两个值的运算为什么会造成内存溢出
3. -2147483648-1 为什么会得到2147483647
...全文
196 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
程序员一灯 2013-04-07
  • 打赏
  • 举报
回复
这道题目不是已经溢出了吗??? 楼主怎么还是这个问题错了? 求解释。
zhkchi 2013-04-06
  • 打赏
  • 举报
回复
最好的办法,看这个英文单词,stack over flow...谁都可以很明白了, 是 这个叫 stack的东西 over flow了...
steely_chen 2013-04-06
  • 打赏
  • 举报
回复
谢谢大家的解答,我总结一下看对不对。 我的示例代码只是计算溢出,而计算溢出导致的是结果不是自己想要的。 内存溢出是指jvm没有更多空间了。 溢出分两种:1. 计算溢出 2. 内存溢出
zhouzhe8013 2013-04-06
  • 打赏
  • 举报
回复
内存泄露和溢出是一码事么 内存泄露的地方产生的对象GC回收不掉,导致JVM内存耗尽. 频繁的full gc导致jvm卡死 静态对象或者集合引用对象容易产生此类问题
leecyz 2013-04-06
  • 打赏
  • 举报
回复
学C的很容易明白,学java可能几年了都还不一定知道。 将其全部转换为二进制进行运算就明白了。 这个运算不是内存溢出,内存溢出是实例化对象在堆中造成的。
a597926661 2013-04-06
  • 打赏
  • 举报
回复
内存溢出一般应该就是指内存不够用了 这个楼主可以百度 楼主给出的代码是不属于内存溢出的 应该算是整形的计算溢出
a597926661 2013-04-06
  • 打赏
  • 举报
回复
楼主 溢出不只是内存不够没有空间装对象 当数据对象装不下用户所要存放的数据时也会出现溢出。就像楼主提出的问题 几行代码而已 楼主可以去自己测试一下 打印结果应该是正确的 为什么会这样呢 int是整形的一种 是基本数据类型 他的最大最小值分别是 2147483647 -2147483648 当这两个数在运算时。运算结果会超出int的值域,于是便会出现溢出,但并不是没有空间来放对象了,jvm有多少空间可用跟这个没关系 这是数据类型所决定的 楼主试试用long类型变量来代替你的 i1 i2 i3,这样应该就不会导致溢出而得到正确的结果了。
steely_chen 2013-04-06
  • 打赏
  • 举报
回复
谢谢楼上的解答,我也是在想那道面试题的答案应该是不正确的,正如我疑问2中提到的. 到于内存溢出的方法有很多种,你的案例是栈溢出的一种。
LCore 2013-04-06
  • 打赏
  • 举报
回复
引用 楼主 yousteely 的回复:
今天看了一道面试题:java会存在内存泄漏吗?请简单描述。
答案是:会.int i1,i2; 将i1-i2 如果i1是足够大的正数,i2是足够大的负数,就会造成溢位。导致错误。
我手痒的去测试了一下。
程序如下:
Java code?123456int i1=Integer.MAX_VALUE;int i2=Integer.MIN_VALUE;System.ou……

什么叫内存溢出:
通俗理解就是内存不够,通常在运行大型软件或游戏时,软件或游戏所需要的内存远远超出了你主机内安装的内存所承受大小,就叫内存溢出。
楼主的案例只是简单的计算溢出,并非内存溢出!
至于3. -2147483648-1 为什么会得到2147483647
转换为补码运算
10000000000000000000000000000000
+11111111111111111111111111111111
=2147483647
至于楼主想尝试java内存可以通过方法1调用方法2,方法2调用方法1
之后就

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧