21、Servlet与内存使用
另外一种办法就是尽快地把会话作废。大多数应用服务器都有设置会话作废间隔时间的选项。另外,也可以用编程的方式调用会话的setMaxInactiveInterval()方法,该方法用来设定在作废会话之前,Servlet容器允许的客户请求的最大间隔时间,以秒计。
22、使用缓冲标记
23、选择合适的引用机制
24、及时清除不再需要的会话
25、不要将数组声明为:public static final 。
26、HashMap的遍历效率讨论
其实就是返回一个私有类KeySet, 它是从AbstractSet继承而来,实现了Set接口。
再来看看for/in循环的语法
在执行阶段被翻译成如下各式
因此在第一个for语句for (String appFieldDefId : appFieldDefIds) 中调用了HashMap.keySet().iterator()
而这个方法调用了newKeyIterator()
Iterator<K> newKeyIterator() {
所以在for中还是调用了
类
private class EntryIterator extends HashIterator<Map.Entry<K,V>> {
此时第一个循环得到key,第二个循环得到HashMap的Entry效率就是从循环里面体现出来的第二个循环此致可以直接取key和value值而第一个循环还是得再利用HashMap的get(Object key)来取value值现在看看HashMap的get(Object key)方法
中而第二个循环取得Entry的值之后直接取key和value,效率比第一个循环高。其实按照Map的概念来看也应该是用第二个循环好一点,它本来就是key和value的值对,将key和value分开操作在这里不是个好选择。
27、array(数组) 和 ArryList的使用
28、尽量使用HashMap 和ArrayList ,除非必要,否则不推荐使用HashTable和Vector ,后者由于使用同步机制,而导致了性能的开销。
29、StringBuffer 和StringBuilder的区别:
StringBuilder。与该类相比,通常应该优先使用 java.lang.StringBuilder类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。为了获得更好的性能,在构造 StirngBuffer 或 StirngBuilder 时应尽可能指定它的容量。当然,如果你操作的字符串长度不超过 16 个字符就不用了。 相同情况下使用 StirngBuilder 相比使用 StringBuffer 仅能获得 10%-15% 左右的性能提升,但却要冒多线程不安全的风险。而在现实的模块化编程中,负责某一模块的程序员不一定能清晰地判断该模块是否会放入多线程的环境中运行,因此:除非你能确定你的系统的瓶颈是在 StringBuffer 上,并且确定你的模块不会运行在多线程模式下,否则还是用 StringBuffer 吧。
30、尽量避免使用split
除非是必须的,否则应该避免使用split,split由于支持正则表达式,所以效率比较低,如果是频繁的几十,几百万的调用将会耗费大量资源,如果确实需要频繁的调用split,可以考虑使用apache的 StringUtils.split(string,char),频繁split的可以缓存结果。
其他补充:
1、及时清除不再使用的对象,设为null
如何优化代码使JAVA源文件及编译后CLASS文件更小
2. 不要两次初始化变量
9. 异常在需要抛出的地方抛出,try catch能整合就整合
with…
10、尽量采用lazy loading 的策略,即在需要的时候才开始创建。
12、不要在循环中使用:
以上所述就是本文的全部内容了,希望能够对大家的java优化有所帮助。
出处:http://www.cnblogs.com/zhaoyan001/p/6078196.html
本文提供了一系列Java性能优化建议,包括合理管理内存使用,如适时作废会话、选择合适的数据结构如HashMap和ArrayList,以及避免在多线程环境下不当使用StringBuilder等。还探讨了循环、异常处理和懒加载策略的优化。
164

被折叠的 条评论
为什么被折叠?



