Java技巧:提高J2SE性能的代码技巧
■ 设计了一组通用用途的类
■ 设计的质量和实现多样化
一 有些部分设计和实现得很好
一 而有些部分...
■ 你可以访问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倍甚至更多的空间
13.Buffered I/O
■ I/O类默认不缓冲
■ 为你的I/O流使用缓冲的包装器
BufferedOutputStream
BufferedInputStream
BufferedReader
BufferedWriter
■ 尝试在构造方法中使用缓冲大小参数
一 BufferedInputStream:默认2048个字节(JDK1.4.1)
一 BufferedReader:默认8192个字符(JDK1.4.1)
14.流与Readers
■ 在java里有两个并行的I/O接口
Reader和Writer
一 BufferedInputStream:字符序列(16-bit)
InputStream和OutputStream
一 字节序列(8-bit)
■ 处理基于文本的文件,Readers&Writers更快
更快的幅度达50%
参考O'Reilly的"java Performance Tuning"第八章
15.新I/O
■ 在JDK1.4或更高版本,java.nio包给出了更多I/O选项
一 正则表达式匹配
一 内存映射缓存
一 非中断I/O
■ 这些能提供更高的I/O性能
16.序列化
■ 使一个对象"变平"允许使它流化成一个文件(为了存储)或者网络连接(为了传输)
一 添加Serializeable接口标记你的类
一 通过ObjectInputStream/ObjectOutputStream
■ 序列化被远程方法调用广泛使用
■ 序列化可能会非常昂贵
一 当你序列化一个对象时,这个对象可达的每个对象都会被序列化,可能会有非常多的对象
一 除了内部虚拟机程序,还会大量使用反射
一 序列化是非常繁冗的
只有一个int数据的类占用37个字节
序列化的对象包括了每个类成员及其值的全限定名
一 速度是不对称的,反序列化比序列化速度更慢
17.序列化:transient关键字
■ 可以重新定义序列化动作
一 使用transient关键字指出不需要在序列化流中包含的成员变量
Private transient String name;
一 这让你可以指出对象里不重要的成员变量或者当对象读入内存时可以重新计算的成员变量
18.序列化:Externalizable接口
■ 消除序列化负载,实现Externalizable接口而不是Serializable
Public void readExternal(ObjectInput out)
Public void writerExternal(ObjectOutput out)
■ 程序员完全要负责:
一 管理序列化内容
一 调用readExternal()/wirteExternal()方法序列化对象
19.Externalizable
via:http://webservices.ctocio.com.cn/java/213/8974213.shtml
via:http://webservices.ctocio.com.cn/java/249/8974249.shtml
转载于:https://www.cnblogs.com/iocn/archive/2011/06/22/2086863.html
Java技巧:提高J2SE性能的代码技巧相关推荐
- PHP 提高PHP性能的编码技巧以及性能优化
0.用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这 么做,它是 一种可以把多个字符串当作参数的"函数&qu ...
- GAN最新进展:8大技巧提高稳定性
生成对抗网络GAN很强大,但也有很多造成GAN难以使用的缺陷.本文介绍了可以克服GAN训练缺点的一些解决方案,有助于提高GAN性能. 生成对抗网络 (GAN) 是一类功能强大的神经网络,具有广泛的应用 ...
- OneAPM大讲堂 | 提高JavaScript性能的30个技巧
文章系国内领先的 ITOM 管理平台供应商 OneAPM 编译呈现. 您是网站管理员还是网页开发人员?想创建超快速的网站吗? 今天我们来看看 JavaScript,这项神奇而又复杂的技术.它使网站内容 ...
- 10个提升MySQL性能的小技巧
从工作量分析到索引的三条规则,这些专家见解肯定会让您的MySQL服务器尖叫. 在所有的关系数据库中,MySQL已经被证明了完全是一头野兽,只要通知停止运行就绝对不会让你多等一秒钟,使你的应用置于困境之 ...
- php7.0 java 性能,php7代码性能常见优化技巧
目录概述 php7代码性能常见优化技巧 参考文档 概述 这是关于php进阶到架构之php7性能优化学习的第一篇文章:php代码性能常见优化技巧.第一篇:php代码性能常见优化技巧 php7代码性能常见 ...
- java format 补足空格_11个简单的Java性能调优技巧
想要保持程序高效运行?您可以采取一些步骤来消除瓶颈,缓存提示以及其他性能调整建议. 大多数开发人员期望性能优化是一个复杂的主题,需要大量的经验和知识.好的,那不是完全错误的.优化应用程序以获得最佳性能 ...
- 提高PHP性能的53个技巧
提高PHP性能的53个技巧 用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字 符串当作参数的 ...
- 11 个简练的 Java 性能调优技巧
转载自 11 个简练的 Java 性能调优技巧 想要让你的项目一直高性能运作吗?以下有一些技巧你可以拿去消除缓存瓶颈,还有一些其他的性能调优建议. 大多数开发者认为性能优化是一个复杂的话题,它需要大量 ...
- 性能php 教程,提高PHP性能效率的几个技巧
如何提高效率问题,往往同样的功能,不一样的代码,出来的效率往往大不一样. ● 用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有ec ...
最新文章
- 节点部署_国际电联设定大星座部署节点要求
- php使用file,PHP中is_file()函数使用指南
- oracle 选择最频繁出现之前,5文章数据
- SAP MM 评估类型 评估类别
- RocketMQ初探(五)之RocketMQ4.2.6集群部署(单Master+双Master+2m+2s+async异步复制)
- 使用glew和glad 新建窗口
- 微软:中国市场XP主流支持服务结束时间未定
- vaex 处理海量数据_爱了爱了!0.052 秒打开 100GB 数据,这个Python开源库火爆了!...
- 电脑连接android智能电视的一种方法
- matlab中gui选择一个文件,matlabgui中定义函数
- 华为设备推送syslog到日志服务器配置
- python将二维数组升为一维数组 或 二维降为一维
- sigmod 求导计算
- 拼多多Temu如何批量养国外买家账号进行拉新?
- android 4.4 按键分析三
- [Flask] [Python3] 第一个flask APP
- 在html table 标签的中background和bgcolor两个属性有什么关系?
- 计算机体系结构:Chapter 5 :ILP(指令级并行)
- Android 安卓状态栏工具类(沉浸式、字体颜色等)
- 计算机学术硕士招生,计算机和信息科学学院2019年学术型硕士研究生招生目录.doc...
热门文章
- 算法移植优化(七)cmake常用函数记录
- 差分隐私 python_[宜配屋]听图阁
- python 作用域从大到小排序_Python 内置函数、作用域、闭包、递归
- html字幕滚动条,html中滚动条的代码是什么?如何设置html滚动条?
- linux csh错误,运行lampp时报错,错误信息如下,求解决方案
- linux桌面2k分辨率,解决ubuntu下外接2k显示器却没法调2k分辨率问题
- mavros 仿真与飞行器控制
- 微信小程序中 tabbar的icon图标格式大小
- 小汤学编程之JAVA基础day05——数组
- mac下ssh免密登陆远程服务器(linux)