论坛首页 Java企业应用论坛

代码难道不是这么写的?

浏览 66461 次
该帖已经被评为良好帖
作者 正文
   发表时间:2010-08-04  
JustDoNow 写道
RednaxelaFX 写道
(以下说明针对概念中的Java虚拟机)

本贴中最有含金量的回复
特摘出学习

在虚拟机方面RednaxelaFX确实是金子照排
0 请登录后投票
   发表时间:2010-08-04  
Ask your reviewer to kiss your ass.
XTU_xiaoxin 写道
今天代码评审时,评审官看见如下代码,把我是一顿好骂(代码是我写的),大致形式如下:

  
  for(int i = 0;i<arr.len;i++) {
		  A a = arr[i];
		  System.out.println(s);
	  }

  骂我内容:说我会不会编程,把变量写在for循环里面,说如果遍历多次的话会占用大量的堆内存。
  要我改成如下形式:

    
  
   A a = null;
  for(int i = 0;i<arr.len;i++) {
		  a = arr[i];
		  System.out.println(s);
	  }
 

其实我也不知道他说的对不对,但他让我改的那种方式是绝对没问题的。但我觉得如果变量写在for循环里面,如果没被用到,应该会被垃圾回收的,不会占用太多堆内存吧。

其实,我看了一些大牛写的代码,他们都把变量写在for里面,只是说不要在for里new对象就行了,我很纳闷。。。。。

0 请登录后投票
   发表时间:2010-08-04  
楼主写得没错。
一般能提出去的也都是不受i影响的内容。
0 请登录后投票
   发表时间:2010-08-04  
這樣的事情怎麼說呢, 現代的JVM的優化是做的很好了。 基本是不用關心了。 但是對於大規模的循環計算。 我一般也會把變量先定義好。 看問題的規模了。 如果代碼非常複雜的情況下, JVM的優化也未必能做的很好。 但是, 對於JAVA程序來說, 如果對性能不是那麼苛求, 實際這些優化的寫法必要性不大。 沒有必要為了這些定義, 把代碼搞的像裹腳布, 看起來簡短有時候更好。
0 请登录后投票
   发表时间:2010-08-04  
sdh5724 写道
這樣的事情怎麼說呢, 現代的JVM的優化是做的很好了。 基本是不用關心了。 但是對於大規模的循環計算。 我一般也會把變量先定義好。 看問題的規模了。 如果代碼非常複雜的情況下, JVM的優化也未必能做的很好。 但是, 對於JAVA程序來說, 如果對性能不是那麼苛求, 實際這些優化的寫法必要性不大。 沒有必要為了這些定義, 把代碼搞的像裹腳布, 看起來簡短有時候更好。

楼上的大大说得很有道理。查个数据库打个日志啥的就把这些定义带来的性能差异给冲掉了。
0 请登录后投票
   发表时间:2010-08-05  
给你个最佳答案吧 评审明显说了相反的话
如果说你的变量只在for循环内使用 肯定应该把变量声明在for循环里面 把变量的作用域最小化 这是谁都知道的最佳实践
0 请登录后投票
   发表时间:2010-08-05  
linliangyi2007 写道
happysalay 写道
你的代码没错,你有错,错在不知道你的代码没错。


这话说的是是而非啊,呵呵呵

如果我是考官,我考你一个问题,然后说你错了,你也许根本不知道自己错哪里,原因是你不知道我要考的是哪个方面的知识点,你也就不会冒然的反驳我。

楼主的代码没错,从程序员的角度上说,他就应该没有错。所谓错在不知道你的代码没错,这就是“欲加之罪”了。

我曾经碰到一个很白痴的领导,在一个公司会议上问我:“说说你这个方案的缺点吧?”他的理由是,“没有方案是完美的”。 我当时真想骂他,NND,我的方案是不可能完美,但是只要是公司内最好的就够了,除非你能拿出更好的,你能吗?
你不能!


对!至少要有这样的自信。
0 请登录后投票
   发表时间:2010-08-06  
1.绝没有占用大量的堆内存.
2.告诉那个SB,这个世界还有种东西叫做编译器优化.
0 请登录后投票
   发表时间:2010-09-23  
wenshao 写道
laodizhuq 写道
for(int i=0; i<20000; i++) {
	Integer iii = new Integer(1000000);
//	System.out.println(iii);
}



Integer iii = new Integer(1000000);
	for(int i=0; i<20000; i++) {
//	System.out.println(iii);
}


在循环内部和外部实例化就相差就很多了。


不当类比

就是一个对象引用的关系吧
垃圾回收器会选择那些不存在引用关系的对象优先回收
0 请登录后投票
   发表时间:2010-10-29  
我看不到头,只看到大家的评论,难道非得把贴删了???
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics