锁定老帖子 主题:代码难道不是这么写的?
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-08-04
JustDoNow 写道 RednaxelaFX 写道 (以下说明针对概念中的Java虚拟机)
本贴中最有含金量的回复 特摘出学习 在虚拟机方面RednaxelaFX确实是金子照排 |
|
返回顶楼 | |
发表时间: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对象就行了,我很纳闷。。。。。 |
|
返回顶楼 | |
发表时间:2010-08-04
楼主写得没错。
一般能提出去的也都是不受i影响的内容。 |
|
返回顶楼 | |
发表时间:2010-08-04
這樣的事情怎麼說呢, 現代的JVM的優化是做的很好了。 基本是不用關心了。 但是對於大規模的循環計算。 我一般也會把變量先定義好。 看問題的規模了。 如果代碼非常複雜的情況下, JVM的優化也未必能做的很好。 但是, 對於JAVA程序來說, 如果對性能不是那麼苛求, 實際這些優化的寫法必要性不大。 沒有必要為了這些定義, 把代碼搞的像裹腳布, 看起來簡短有時候更好。
|
|
返回顶楼 | |
发表时间:2010-08-04
sdh5724 写道 這樣的事情怎麼說呢, 現代的JVM的優化是做的很好了。 基本是不用關心了。 但是對於大規模的循環計算。 我一般也會把變量先定義好。 看問題的規模了。 如果代碼非常複雜的情況下, JVM的優化也未必能做的很好。 但是, 對於JAVA程序來說, 如果對性能不是那麼苛求, 實際這些優化的寫法必要性不大。 沒有必要為了這些定義, 把代碼搞的像裹腳布, 看起來簡短有時候更好。 楼上的大大说得很有道理。查个数据库打个日志啥的就把这些定义带来的性能差异给冲掉了。 |
|
返回顶楼 | |
发表时间:2010-08-05
给你个最佳答案吧 评审明显说了相反的话
如果说你的变量只在for循环内使用 肯定应该把变量声明在for循环里面 把变量的作用域最小化 这是谁都知道的最佳实践 |
|
返回顶楼 | |
发表时间:2010-08-05
linliangyi2007 写道 happysalay 写道 你的代码没错,你有错,错在不知道你的代码没错。
这话说的是是而非啊,呵呵呵 如果我是考官,我考你一个问题,然后说你错了,你也许根本不知道自己错哪里,原因是你不知道我要考的是哪个方面的知识点,你也就不会冒然的反驳我。 楼主的代码没错,从程序员的角度上说,他就应该没有错。所谓错在不知道你的代码没错,这就是“欲加之罪”了。 我曾经碰到一个很白痴的领导,在一个公司会议上问我:“说说你这个方案的缺点吧?”他的理由是,“没有方案是完美的”。 我当时真想骂他,NND,我的方案是不可能完美,但是只要是公司内最好的就够了,除非你能拿出更好的,你能吗? 你不能! ![]() |
|
返回顶楼 | |
发表时间:2010-08-06
1.绝没有占用大量的堆内存.
2.告诉那个SB,这个世界还有种东西叫做编译器优化. |
|
返回顶楼 | |
发表时间: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); } 在循环内部和外部实例化就相差就很多了。 不当类比 就是一个对象引用的关系吧 垃圾回收器会选择那些不存在引用关系的对象优先回收 |
|
返回顶楼 | |
发表时间:2010-10-29
我看不到头,只看到大家的评论,难道非得把贴删了???
|
|
返回顶楼 | |