论坛首页 Java企业应用论坛

关于性能优化

浏览 39924 次
精华帖 (2) :: 良好帖 (10) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2010-11-17  
一个String引发的争论,哈哈

别讨论了,都知道怎么回事就行了,没啥太大意义,总之不支持优化,支持重构。
0 请登录后投票
   发表时间:2010-11-17  
org.eclipse.swt.SWTError: No more handles
SWT开发时,有幸见到这个的请重启电脑。
0 请登录后投票
   发表时间:2010-11-17  
重构,不知道是不是也是一种优化..?
0 请登录后投票
   发表时间:2010-11-17  
抛出异常的爱 写道
对于性能
1.对于新手.不要优化.
2.对于老手.建议不要优化.

确切的说,不要过早的优化,等性能真的出了问题(包括压力测试),才去优化
0 请登录后投票
   发表时间:2010-11-17  
不要过早的花工作量在 优化 这一环节  --赞成

但是积累性能优化技巧,并融合到设计和开发中绝对没有错...
0 请登录后投票
   发表时间:2010-11-17  
先运行,在正确工作,最后考虑是否优化。
一个在优秀的苍蝇,它还是苍蝇。
一个在丑陋的蝴蝶,它依然是蝴蝶。
分清什么时候,什么是关键性问题。否则就是因小失大。
0 请登录后投票
   发表时间:2010-11-17   最后修改:2010-11-17
li445970924 写道
求一段内存泄露的代码


你的代码中肯定有 只是你没发觉而已 或者你代码的对象的生命周期就是那么长
释放不掉的内存就算是内存泄漏
就算是C++ 没有free的内存 在进程结束的时候也会被释放
并不是说 一个map中垃圾数据 你可以通过remove来释放 就不算内存泄漏
一个程序 持续的运行 使用内存不断变大 对象不断增多 肯定是在泄漏

最常见的就是新增需求后 需要观察者模式 然后就简单的增加一个对象加入到listener中 但却不想想什么时候remove




这是让我觉得极品的代码之一
我非常想知道这人写的时候是怎么想的


  • 大小: 25.7 KB
0 请登录后投票
   发表时间:2010-11-17  
kyh23_y 写道
ironsabre 写道
flysnowxf 写道
ironsabre 写道
flysnowxf 写道
汗,这是很基础的概念了。
百度百科:http://baike.baidu.com/view/714962.htm

引用
当以前分配的一片内存不再需要使用或无法访问时,但是却并没有释放它,那么对于该进程来说,会因此导致总可用内存的减少,这时就出现了内存泄漏。


再说一次,向集合里一直加东西不删除,这个不叫内存泄漏。


那是你的理解了。我的理解是,分配了内存,但这些内存不再被使用,比如过期了、没用了,但又没有去删除,造成内存占用越来越多。HashMap的使用就容易出现这个问题。


哎。你这个没过期,也有用。你可以通过HashMap取出来值的,这怎么能叫泄漏呢?
我现在总是你,如果你向cache里放了100个对象,永远keep住,如果我应用程序经常来访问它,叫不叫泄漏?
如果我应用程序再也不来访问它,叫不叫泄漏?
按你的理解,第一种不叫,第二种叫。可这两种没有区别。我不可能用由第三方来判断我自己是不是泄漏,明白吗?

下面这个Stack,在被别人用的时候,可能会引起泄漏。你先找找看哪行会出总是。然后再理解一下跟你这个有什么区别。
import java.util.Arrays;
import java.util.EmptyStackException;

public class Stack {
private Object[] elements;
private int size = 0;
private static final int DEFAULT_INITIAL_CAPACITY = 16;

public Stack() {
elements = new Object[DEFAULT_INITIAL_CAPACITY];
}

public void push(Object e) {
ensureCapacity();
elements[size++] = e;
}

public Object pop() {
if (size == 0)
throw new EmptyStackException();
return elements[--size];
}

/**
* Ensure space for at least one more element, roughly doubling the capacity
* each time the array needs to grow.
*/
private void ensureCapacity() {
if (elements.length == size)
elements = Arrays.copyOf(elements, 2 * size + 1);
}
}


既然那些对象我一直在用,那为什么会被叫做是泄露?难道我用那100个对象也有错?
应该是当我没用那所有对象,或者是某些对象的时候,又没有在Map里面remove掉那些对象,导致了map一直持有引用,根据gc的原理,这样的对象是不会被回收的,这样才造成了泄露吧.这是我的理解

实际上无用,而还被引用的对象,甚至引用名柄程序自身都无法获得..http://javag.iteye.com/blog/157522
0 请登录后投票
   发表时间:2010-11-17  
抛出异常的爱 写道
对于性能
1.对于新手.不要优化.
2.对于老手.建议不要优化.



这个总结的经典啊.一般认为是瓶颈的往往不是哈
0 请登录后投票
   发表时间:2010-11-18   最后修改:2010-11-18
ouchxp 写道
新手避免性能问题,就让他按规范操作就可以.(不许循环里调用数据库....XXXX)


俺是新手,想问一下,如果不在循环里调用数据库,一般都是用什么解决方案?

俺以前写的一个功能,是每次遍历都要查询出几个表的相关数据,然后经过逻辑判断再插入和更新表。

像这样的需求应该怎么实现?

先查询出所有需要的数据分别放入不同集合类,再遍历集合类去做判断,把插入或更新的条件放入集合类X,再遍历X去做批量的update操作吗?

俺做逻辑判断所需要的数据挺多的,例如要先查A表,再查B表,再查C表,再查D表,而A,B,C,D表都超过百万甚至上千万数据。

像这种情况一般都怎么解决呢?望指教!
0 请登录后投票
论坛首页 Java企业应用版

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