`
lzkyo
  • 浏览: 463943 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

提高J2SE性能的代码技巧

    博客分类:
  • Java
阅读更多

1.JAVA开发工具集(JDK)

  ■ 设计了一组通用用途的类

  ■ 设计的质量和实现多样化

  一 有些部分设计和实现得很好

  一 而有些部分...

  ■ 你可以访问JDK的源代码

  一 %JAVA_HOME%\src.jar

  一 不要直接修改源代码,但如果识别出一个JDK的方法是一个瓶颈 ,检查源代码以理解为什么

2.数据结构和算法

  ■ 推荐JAVA集合框架

  一 指南 java.sun.com /docs/books/tutorial/collections

  ■ 设计得很好的基本的数据结构和算法

  

3.集合框架

  

  ■ 调换实现达到不同的性能特性

4.集合框架:接口与具体类

  ■ 面向接口编程,而不是具体类

  一 特别是对于方法参数

  一 在性能优化时更容易改变实现

  

5.集合框架:具体类

  ■ 当一个集合创建时要消除动态增长的代价,为其指定一个实际初始大小

  一些具体类(如:ArrayList)的动态增长的代价是很高的

  ■ 在适当的地方考虑重用集合对象

  一 调用集合的clear()方法清楚它的所有元素

  ■ Object .hashCode()

  一 选择一个算法保证哈希表的统一分配

  一 覆盖继承的Object.hashCode()方法, 默认的实现返回的是对象引用值,没有展示一个一致的分配

  一 从不返回一个常量

  一 非常小心地改变键的值的底层状态

6.集合框架:实现数据结构

  ■ 如果一定要实现自己的数据结构,依赖于集合接口实现你的类

  一 可以使用java.util.Collections工具方法恰当地实现你的具体数据结构

  ■ 扩大数据结构集合,你可以插入其它的开发成果

7.集合框架:基础算法

  ■ Java .util.Collections类里的算法

  一 sort(…..)

  以升序重新排列List的元素

  轻微地优化MergeSort-O(nlog(n))的版本

  一 binarySearch(….)

  在一个已排序的List里查找指定的元素

  一 极限值

  min(…) max(….)

  一 其它

  reverse(….),fill(….), copy(…)

8.数组

  ■ 数组与ArrayList与Vector

  一 数组的速度大约比ArrayList快十倍

  一 数组的速度大约比Vector快40倍

  一 ArrayList的速度大约比Vevtor快3-4倍

  ■ 当拷贝一个数组的元素到另一个数组时,使用System .arrycopy(…)

9.数组:基础算法

  ■ JAVA2的java.util.Arrays类提供了一组重载方法,为基础数组实现了最佳化的算法(与java.util.Collections类相似)

  ■ Java .util.Arrays类的里的算法

  一 binarySearch(…)

  一 equals(…)

  一 fill(…)

  一 sort(…)

 

10.格式化

  ■ 文本格式化类:

  一 java.text .DateFaormat

  一 java.text.NumberFaormat

  一 java.text.MessageFaormat

  可能非常慢

  ■ 例如:第一次调用DateFormat.geInstance()创建超过12000个对象

  ■ 每次调用DateFormat.format 创建13个对象,加上第一次调用时的那次

  一 重用同一个DateFormat实例而不是重复调用DateFormat.getInstance是很值得做的

  ■ 其它的格式化类有相似的特点

11.XML处理:SAX

  ■ 处理XML文档的低级,事件驱动库

  ■ 最好的选择,如果:

  一 你需要以线性的方式遍历整个文档

  一 你只需要查看几项

  一 内存效率是一个问题

12.XML处理

  ■ 试着在你的应用程序里消除处理特定XML对象

  ■ 通过一个RMI调用传递DOM树,结果会使整个java对象树序列化。。。通常会4倍甚至更多的空间

  4.Buffered I/O

  ■ I/O类默认不缓冲

  ■ 为你的I/O流使用缓冲的包装器

  BufferedOutputStream

  BufferedInputStream

  BufferedReader

  BufferedWriter

  ■ 尝试在构造方法中使用缓冲大小参数

  一 BufferedInputStream:默认2048个字节(JDK1.4.1)

  一 BufferedReader:默认8192个字符(JDK1.4.1)

13.流与Readers

  ■ 在java里有两个并行的I/O接口

  Reader和Writer

  一 BufferedInputStream:字符序列(16-bit)

  InputStream和OutputStream

  一 字节序列(8-bit)

  ■ 处理基于文本的文件,Readers&Writers更快

  更快的幅度达50%

  参考O'Reilly的"java Performance Tuning"第八章

14 .新I/O

  ■ 在JDK1.4或更高版本,java.nio包给出了更多I/O选项

  一 正则表达式匹配

  一 内存映射缓存

  一 非中断 I/O

  ■ 这些能提供更高的I/O性能

15.序列化

  ■ 使一个对象"变平"允许使它流化成一个文件(为了存储 )或者网络连接(为了传输)

  一 添加Serializeable接口标记你的类

  一 通过ObjectInputStream/ObjectOutputStream

  ■ 序列化被远程方法调用广泛使用

  ■ 序列化可能会非常昂贵

  一 当你序列化一个对象时,这个对象可达的每个对象都会被序列化,可能会有非常多的对象

  一 除了内部虚拟机程序,还会大量使用反射

  一 序列化是非常繁冗的

  只有一个int 数据的类占用37个字节

  序列化的对象包括了每个类成员及其值的全限定名

  一 速度是不对称的,反序列化比序列化速度更慢

16.序列化:transient关键字

  ■ 可以重新定义序列化动作

  一 使用transient关键字指出不需要在序列化流中包含的成员变量

  Private transient String name;

  一 这让你可以指出对象里不重要的成员变量或者当对象读入内存时可以重新计算的成员变量

17 .序列化:Externalizable接口

  ■ 消除序列化负载,实现Externalizable接口而不是Serializable

  Public void readExternal(ObjectInput out)

  Public void writerExternal(ObjectOutput out)

  ■ 程序员完全要负责:

  一 管理序列化内容

  一 调用readExternal()/wirteExternal()方法序列化对象

18.Externalizable

  

 

 

分享到:
评论

相关推荐

    j2se坦克大战源代码

    9. **性能优化**:为了确保游戏运行顺畅,源代码可能包含了一些性能优化技巧,如减少不必要的计算,适时更新屏幕,以及利用缓存提高数据访问速度等。 10. **调试与测试**:源代码中可能包含调试代码和日志记录,...

    最基础的J2SE,入门代码

    对于初学者来说,掌握J2SE的基本概念和编程技巧是成为合格Java程序员的第一步。 本资源"最基础的J2SE,入门代码"旨在帮助新手快速入门Java编程。通过CSDN博主persistencegoing的文章,我们可以学习到如何从零开始...

    J2SE资料

    9. **性能优化**:包括代码优化技巧,JVM参数调优,以及使用JProfiler等工具进行性能分析。 这些内容将帮助初学者逐步掌握J2SE,从而能够独立地设计、实现和调试Java程序。对于有经验的开发者来说,这些资料也可能...

    J2SE 1.3,1.4,1.5,1.6,1.7,1.8 API.zip

    还引入了类型安全的集合接口,如List,Set和Map, V>,提高了代码的类型安全性。 4. J2SE 1.6 (Java 6) API: 添加了JSR 223(Scripting for the Java Platform),允许在Java应用程序中嵌入脚本语言。增加了对JavaFX...

    Java基础学习教程J2SE资料学习代码实例

    - `TestMetrics.java`可能是关于性能测试或代码度量的,例如使用JUnit进行单元测试,或者度量代码的复杂性、执行时间等。 10. **转换操作**: - `TestConvert.java`可能包含了不同类型之间的转换,如将字符串转为...

    J2SE实例(Java桌面程序)

    11. **JNI(Java Native Interface)**:允许Java代码和其他语言写的代码进行交互,通常用于提升性能或调用系统级库。 12. **IO流与NIO**:Java I/O流体系结构,以及New IO(NIO)提供的非阻塞I/O操作。 13. **...

    J2SE 全套课件

    本课程围绕J2SE展开,旨在帮助学生掌握Java编程语言的基础知识,提升编程技巧,通过实践操作理解程序设计的思想。 在学习J2SE的过程中,以下几个关键知识点不容忽视: 1. **Java语法**:Java语言以其严谨的语法...

    J2SE连连看小游戏

    总结来说,J2SE连连看小游戏是一个集编程技巧、图形界面设计、事件处理和游戏算法于一体的实践项目,对于Java初学者和有经验的开发者都是一个很好的学习资源。通过深入研究和改造,不仅可以提升编程能力,还能体验到...

    (java)J2SE_核心技术基础

    本教程“J2SE_核心技术基础”针对Java初学者,通过详实的例子代码帮助学习者快速掌握Java编程的基本概念和技巧。 一、Java语言基础 Java是一种面向对象的编程语言,其设计目标是简洁、安全、高效。学习Java首先要...

    J2SE金典例题(包括注释),自己看的时候做的每个例题

    理解它们的区别和应用场景,以及迭代器的使用,是提高代码效率的关键。 5. **IO流**:Java.io包提供了输入/输出流,用于读写文件、网络通信等。理解字节流和字符流、缓冲流以及文件操作的方法,可以有效处理数据...

    j2se视频ppt及源码

    通过阅读和调试源码,可以提高问题解决能力和代码调试技巧。 总之,"j2se视频ppt及源码"资源包是一个全面的学习材料,涵盖了从基础到高级的J2SE知识。通过观看视频、阅读PPT和实践源代码,学习者将能够系统地掌握...

    J2SE6.0-API(中文)-冷冻大雪.chm和java api1.6中文文档.chm

    中文版使得国内开发者可以更方便地学习和查阅,避免了语言障碍,提高学习效率。 《java api1.6中文文档.chm》同样提供了Java 1.6版本的API中文解释,尽管版本略低于J2SE 6.0,但它仍然是许多现有项目的基础。这个...

    J2SE1.6 JDK API中文版(CHM格式)

    泛型提高了代码的类型安全性和可读性,允许开发者在编译时检查类型,避免了运行时的强制类型转换。 2. **并发改进**:1.6版本增强了并发编程的支持,引入了`java.util.concurrent`包,包含了许多高效的线程管理和...

    JAVA参考大全.J2SE.pdf.zip

    14. **性能优化**:学习如何分析和优化Java应用程序的性能,包括内存泄漏检测,代码优化技巧等。 这些知识点构成了Java开发者必备的基础技能,通过深入学习《JAVA参考大全.J2SE》,开发者能够全面理解Java语言,并...

    J2SE.rar_j2se_java公交查询_基于java的公交

    J2SE的特性包括跨平台兼容性、丰富的类库支持以及高性能的执行效率,使得开发像公交查询系统这样的桌面应用变得十分方便。 二、公交信息查询系统设计 本系统主要由以下几个核心模块构成: 1. 数据管理模块:负责...

    java1234:j2se源码2

    源码分析是提升编程技能的重要途径,它能让你看到程序在幕后是如何工作的,从而提高问题解决能力和代码优化技巧。 以下是压缩包中各讲的主要内容概览: 1. 第三十七讲:这一讲可能涉及到基础的面向对象编程概念,...

    java,J2SE 坦克大战

    游戏中的不同部分,如主游戏循环、用户输入处理、动画渲染,可能会在不同的线程中运行,以保证各个任务的并发执行,提高游戏体验。 【文件I/O操作】 在"TankWar2.9"这个压缩包中,可能包含了游戏的配置文件、资源...

    J2SE 课程PPT

    《J2SE课程PPT》是针对Java语言程序学习的教程,旨在帮助初学者掌握Java的基础知识和应用技巧。该教程共分为十一章,涵盖了Java的各个方面,包括概述、语言基础、面向对象编程、异常处理、数组、常用类、容器类、流...

    J2SE2012面试题集

    22. 转换流与缓冲流:提高IO效率的技巧。 七、网络编程 23. Socket编程:创建服务器端和客户端,进行简单的TCP通信。 24. URL与URLConnection:访问网络资源的方法。 八、反射与注解 25. 反射:动态获取类信息,...

    设计J2SE模拟MVC的企业人事管理系统源码及文档.zip

    4. **性能优化**:对数据库查询、并发处理等方面进行优化,提升系统的响应速度和用户体验。 5. **单元测试**:编写单元测试用例,对每个功能模块进行测试,确保其正确性和稳定性。 6. **代码规范**:遵循良好的...

Global site tag (gtag.js) - Google Analytics