锁定老帖子 主题:关于性能优化
精华帖 (2) :: 良好帖 (10) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2010-11-17
最后修改:2010-11-17
li445970924 写道 求一段内存泄露的代码
ThreadLocal 会有。 (http://www.0xcafefeed.com/2004/06/of-non-static-threadlocals-and-memory/) 要溢出就简单了。 大数组。 泄露的还是比较少的。 但是写出溢出的还是挺多的。 |
|
返回顶楼 | |
发表时间:2010-11-17
抛出异常的爱 写道 对于性能
1.对于新手.不要优化. 2.对于老手.建议不要优化. ?? |
|
返回顶楼 | |
发表时间:2010-11-17
极端份子。
|
|
返回顶楼 | |
发表时间:2010-11-17
在下的一点愚见:性能优化在于平时开发习惯的积累,新手因为知识深度面的缺乏而想不到程序高效的写法很正常,老手开发一般写出来的代码都是比较高效的,所以在开发过程中对于过于考虑性能优化是没多大必要,关键是开发前考虑的吞吐量,系统框架在I/O上瓶颈,还有热路径等,进入开发后就是代码工作啦,测试,Beta,Release,上线,维护。
|
|
返回顶楼 | |
发表时间:2010-11-17
看了楼上N多人的评论,你们眼中的优化是怎样的?优化完了,性能就嗷嗷好了?
但我看你们嘴里的优化,怎么那么像重构呢?能区分重构和优化么? 项目初期设计的时候就一定考虑性能问题,具体的瓶颈还在数据库,如果数据库设计的深,想的深,在后期能很好的支撑,那项目成功率问题就不大,项目是重构出来的,不是优化出来的,可以一次一次一遍一遍的重构,但你给我测试优化性能,有点扯 把String+=xx;这样的代码用StringBuffer替代,你们认为这是优化还是重构? |
|
返回顶楼 | |
发表时间:2010-11-17
kingkan 写道 在下的一点愚见:性能优化在于平时开发习惯的积累,新手因为知识深度面的缺乏而想不到程序高效的写法很正常,老手开发一般写出来的代码都是比较高效的,所以在开发过程中对于过于考虑性能优化是没多大必要,关键是开发前考虑的吞吐量,系统框架在I/O上瓶颈,还有热路径等,进入开发后就是代码工作啦,测试,Beta,Release,上线,维护。
不要犯错就差不多了 设计的好就不太需要考虑优化的事. 必竟j2ee又不是c 我平时很少进行coding时考虑性能问题. |
|
返回顶楼 | |
发表时间:2010-11-17
kyh23_y 写道 既然那些对象我一直在用,那为什么会被叫做是泄露?难道我用那100个对象也有错? 应该是当我没用那所有对象,或者是某些对象的时候,又没有在Map里面remove掉那些对象,导致了map一直持有引用,根据gc的原理,这样的对象是不会被回收的,这样才造成了泄露吧.这是我的理解 存在对象不代表正在使用. 已经不需要再使用的对象,但没有清除掉引用.仍然是内存泄露. 在Java中内存泄露的概念与C++不同.因为Java有自动的垃圾回收. 所以很少会有C++中的已无引用但是内存未释放的问题. Java中的内存泄露一般指未清除的引用导致的不能释放. 所以C++的内存泄露(狭义)和Java的内存泄露(广义),这个概念是不同的. |
|
返回顶楼 | |
发表时间:2010-11-17
分离的北极熊 写道 看了楼上N多人的评论,你们眼中的优化是怎样的?优化完了,性能就嗷嗷好了?
但我看你们嘴里的优化,怎么那么像重构呢?能区分重构和优化么? 项目初期设计的时候就一定考虑性能问题,具体的瓶颈还在数据库,如果数据库设计的深,想的深,在后期能很好的支撑,那项目成功率问题就不大,项目是重构出来的,不是优化出来的,可以一次一次一遍一遍的重构,但你给我测试优化性能,有点扯 把String+=xx;这样的代码用StringBuffer替代,你们认为这是优化还是重构? +1 把String+=xx;这样的代码用StringBuffer替代 1.5之后编译器会自动优化.手写StringBuffer纯属脱裤子放屁 |
|
返回顶楼 | |
发表时间:2010-11-17
抛出异常的爱 写道 kingkan 写道 在下的一点愚见:性能优化在于平时开发习惯的积累,新手因为知识深度面的缺乏而想不到程序高效的写法很正常,老手开发一般写出来的代码都是比较高效的,所以在开发过程中对于过于考虑性能优化是没多大必要,关键是开发前考虑的吞吐量,系统框架在I/O上瓶颈,还有热路径等,进入开发后就是代码工作啦,测试,Beta,Release,上线,维护。
不要犯错就差不多了 设计的好就不太需要考虑优化的事. 必竟j2ee又不是c 我平时很少进行coding时考虑性能问题. +1 有问题再优化. 新手避免性能问题,就让他按规范操作就可以.(不许循环里调用数据库....XXXX) |
|
返回顶楼 | |
发表时间:2010-11-17
最后修改:2010-11-17
ouchxp 写道 kyh23_y 写道 既然那些对象我一直在用,那为什么会被叫做是泄露?难道我用那100个对象也有错? 应该是当我没用那所有对象,或者是某些对象的时候,又没有在Map里面remove掉那些对象,导致了map一直持有引用,根据gc的原理,这样的对象是不会被回收的,这样才造成了泄露吧.这是我的理解 存在对象不代表正在使用. 已经不需要再使用的对象,但没有清除掉引用.仍然是内存泄露. 在Java中内存泄露的概念与C++不同.因为Java有自动的垃圾回收. 所以很少会有C++中的已无引用但是内存未释放的问题. Java中的内存泄露一般指未清除的引用导致的不能释放. 所以C++的内存泄露(狭义)和Java的内存泄露(广义),这个概念是不同的. j2ee会把一所有的垃圾数据放到 大胃王 数据库中 所以不必保持大多数数据. 有些数据需要保持的比如自写的cache 删除条件很简单, 比如内存不够用了.... 但你什么时间进行扫描是否够用 怎么样扫描内存总量 怎么样在多线程下锁 怎么样决定哪个元素是可以被 清掉的. 哪个元素是过期的 最重要的是以上操作怎么样让这一个周期时间缩短到下一个周期启动之前完成. 以上过程有有非常大的可能会出现内存泄露.. |
|
返回顶楼 | |