提高J2SE性能的代码技巧

2024-02-21 20:38
文章标签 代码 技巧 性能 提高 j2se

本文主要是介绍提高J2SE性能的代码技巧,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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性能的代码技巧的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/733000

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

黑神话,XSKY 星飞全闪单卷性能突破310万

当下,云计算仍然是企业主要的基础架构,随着关键业务的逐步虚拟化和云化,对于块存储的性能要求也日益提高。企业对于低延迟、高稳定性的存储解决方案的需求日益迫切。为了满足这些日益增长的 IO 密集型应用场景,众多云服务提供商正在不断推陈出新,推出具有更低时延和更高 IOPS 性能的云硬盘产品。 8 月 22 日 2024 DTCC 大会上(第十五届中国数据库技术大会),XSKY星辰天合正式公布了基于星

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能