1.JVM 管理两种类型的内存:堆内存(heap), 栈内存(stack), 堆内在主要用来存储程序在运行时 创建或实例化的对象与变量.而栈内存则是用来存储程序代码中声明为静态(static)( 或非静态) 的方法. 2.JVM 中对象的生命周期,创建阶段,应用阶段,不可视阶段,不可到达阶段,可收集阶段,终结阶 段,释放阶段 3. 避免在循环体中创建对象,即使该对象点用内存空间不大. for(int i=0;i<10000;++i){ Object obj = new Object(); System.out.println("obj="+obj); } 应改成 Object obj = null; for(int i=0;i<10000;++i){ obj = new Object(); System.out.println("obj="+obj); } 4. 软引用的主要特点是具有较强的引用功能.只有当内存不够的时候,才回收这类内存,因此在 内存足够的时候,它们通常不被回收.它可以用于实现一些常用资源的缓存,实现Cache 的功能 A a = new A(); SoftReference sr = new SoftReference(a); a = null; if(sr !=null){ a = sr.get(); }else{ a = new A(); sr = new SoftReference(a); } 5. 弱引用对象与 Soft 引用对象最大不同就在于:GC 在进行回收时,需要通过算法检查是否回 收 Soft 引用对象,而对于 Weak 引用对象,GC 总是进行回收. A a = new A(); WeakReference wr = new WeakReference(a); a = null; if(sr !=null){ a = wr.get(); }else{ a = new A(); wr = new WeakReference(a); } 6. 共享静态变量存储空间 7. 有时候我们为了提高系统性能,避免重复耗时的操作,希望能够重用一些创建完成的对象,利 用对象池实现.类似 JDBC 连接池. 8. 瞬间值,序列化对象大变量时,如果此大变量又没有用途,则使用 transient 声明,不序列化此变 量.同时网络传输中也不传输. 9. 不要提前创建对象 void f(){ int i; A a = new A(); if(....){ a.showMessage(); } } 改成 void f(){ int i; A a = null; if(....){ // 用到时才实例化 a = new A(); a.showMessage(); } } 10 .(1) 最基本的建议就是尽早释放无用对象的引用 A a = new A(); a = null; // 当使用对象 a 之后主动将其设置为空 (2) 尽量少用 finalize 函数. (3) 如果需要使用经常用到的图片展,可以使用软引用. (4) 注意集合数据类型,包括数组,树等数据,这些数据结构对 GC 来说,回收更为复杂, (5) 尽量避免在类的默认构造器中创建,初始化大量的对象,防止在调用其自类的构造器 时造成不必要的内存资源浪费. (6) 尽量避免强制系统做垃圾内存回收. (7) 尽量避免显式申请数组空间. (8) 尽量在合适的场景下使用对象池技术以提高系统性能,缩减系统内存开销. 11. 当做数组拷贝操作时,采用 System.arraycopy() 方法完成拷贝操作要比采用循环的办法完成 数组拷贝操作效率高 12. 尽量避免在循环体中调用方法,因为方法调用是比较昂贵的. 13. 尽量避免在循环体中使用 try-catch 块,最好在循环体外使用 try--catch 块以提高系统性 能. 14. 在多重循环中,如果有可能,尽量将最长的循环放在最内层,最短的循环放在最外层,以减 少循环层间的变换次数. 15. 在需要线程安全的情况下,使用 List list = Collections.synchronizedList(new ArrayList()); 16. 如果预知长度,就设置 ArrayList 的长度. 17. ArrayList 与 LinkedList 选择,熟悉底层的实现原理,选择适当的容器. 18. 字符串累加采用 StringBuffer. 19. 系统 I/O 优化,采用缓冲和压缩技术.优化性能. 20. 避免在类在构造器的初始化其他类 21 尽量避免在构造中对静态变量做赋值操作 22. 不要在类的构造器中创建类的实例 23. 组合优化继承 24. 最好通过 Class.forname() 动态的装载类 25. JSP 优化,采用 out 对象中的 print 方法代替 println() 方法 26 . 采用 ServletOutputStream 对象代替 JSPWriter 对象 27. 采用适当的值初始化 out 对象缓冲区的大小 28. 尽量采用 forward() 方法重定向新的 JSP 29. 利用线程池技术处理客户请求 30.Servlet 优化 (1) 通过 init() 方法来缓存一些静态数据以提高应用性能. (2) 用 print() 方法取代 println() 方法. (3) 用 ServletOutputStream 取代 PrintWriter. (4) 尽量缩小同步代码数量 31. 改善 Servlet 应用性能的方法 (1) 不要使用 SingleThreadModel (2) 使用线程池 ThreadPool 32. EJB 优化 实体 EJB: (1) 实体 EJB 中常用数据缓存与释放 (2) 采用延迟加载的方式装载关联数据 (3) 尽可能地应用 CMP 类型实体 EJB (4) 直接采用 JDBC 技术处理大型数据 33. 优化 JDBC 连接 (1) 设置合适的预取行值 (2) 采用连接池技术 (3) 全合理应用事务 (4) 选择合适的事务隔离层与及时关闭连接对象 34. PreparedStatemetn 只编译解析一次,而 Statement 每次都编译解析. 35. 尽可能地做批处理更新 36. 通过采用合适的 getXXX 方法提高系统性能 37. 采用设计模式. 作者:潘修艳
还剩3页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 15 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

javajiwei

贡献于2010-11-12

下载需要 15 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf