博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
云时代架构阅读笔记一——Java性能优化(一)
阅读量:4313 次
发布时间:2019-06-06

本文共 2058 字,大约阅读时间需要 6 分钟。

Java语言学习了这么长时间之后,自己对于Java编程的一些细节还是稍微有点总结,正好根据云时代架构中《Java高级开发必会的50个性能优化的细节(珍藏版)》来叙述一些我和里面的点比较相符且有点感悟的地方。

1)尽量在合适的场合使用单例

  单例模式我们并不陌生,软件设计的设计模式中单例模式相对来说是比较重要的一个。单例模式的优点非常明显,就是避免多次创建同一个对象,这样可以减轻系统加载的负担,减少内存的占用,使系统的总体效率有所提高。这里我也举一个单例模式的例子:

public class Singleton {        private static Singleton singleton;    private Singleton(){}    public static Singleton getInstance() {        if (singleton == null) {            singleton = new Singleton()        }        return singleton;    }}

可以看到单例模式的特点:1)有一个静态成员变量,变量的类型为本类;2)构造方法为私有,这是为了防止在外面调用构造函数。

通过这段代码:单例模式在当前成员变量已经创建了之后即已经存在了之后就不会再次创建而是直接返回这一个对象,这样可以防止对象的重复创建。

但是这种方法也有局限:这种写法是懒汉式的一种,但它只适用于单线程下的使用,当使用多线程的时候,如果有两个同时访问这段代码,第一个判断为空后就会创建一个对象,但此时第二个也已经执行完毕,也判断其为空,同样也会创建一个对象,这就使单例模式的作用没有发挥出来,有兴趣的可以多去研究研究。

2)尽量避免过多过常的创建Java对象。

这句话看着确实有道理,但是很少有人注意,感觉这句话没有很适合的场景,自己从来没有过多的创建过Java对象,这里我写一段大家非常之熟悉的代码:

PreparedStatement preparedStatement = connection.prepareStatement(sql); ResultSet rs = preparedStatement.executeQuery();List
users = new ArrayList
();while(rs.next()) { User user = new User(); user.setUserName(rs.getString("username")); user.setPassword(rs.getString("password")); users.add(user);}return users;

这端代码相信经历过JavaWeb开发的人员们并不陌生甚至来说是非常熟悉,这段代码实现的就是从数据库查询出所有的用户并返回,当然这段代码本身是没有错误的,但是我现在稍微进行改进一下:

在while循环上面加一句话:User user = null; 然后将红色标注的部分改成user = new User();

这两个一对比就会发现,第一种虽然可以实现,但是没执行一次while循环就会创建一个User类的对象,假如数据库中有100000条数据,执行这一次查询之后就会创建100000个对象,这对系统造成的压力可想而知,虽然以现在的电脑配置等的处理这么多问题不是事。但是这种优化我们还是应该知道的;然后我们再来看第二写法,先是声明了一个对象,但并没有赋值;然后每执行一次while循环就只会给之前创建的这个对象赋值然后返回,也就是说,通过100000次循环之后,我们只是创建了一个对象,这和之前相比起来改进还是挺大的吧。

3)尽量在finally块中释放资源

异常的处理一直是被开发人员关注但却怎么也达不到完美的技术。可以这样说,如果一个程序员开发的系统将所有的异常都处理的非常好,那他绝对是超乎常人的存在。在日常开发中,我们也会遇到异常的问题,常见的有空指针、下标越界等,所以,异常的处理就显得特别重要,要不然将来让用户看到HTTP 500的时候用户会怎么想。而在异常处理中,finally一直没有被我们重视,一般我们在使用异常的时候仅仅使用try...catch并没有考虑到finally,但其实finally的存在使得我们在考虑什么时候关闭资源的问题不复存在,我不管你再try还是catch里面执行什么操作,在我finally这里就执行最后的收尾就可以了。日常使用的比如文件的关闭、对象的释放、使用最多的还有数据库对象的关闭等在finally中写上不仅使得程序的结构更加清晰,而且不会出现这样那样的问题。

转载于:https://www.cnblogs.com/guo-xu/p/11019267.html

你可能感兴趣的文章
消息队列
查看>>
WPF进阶教程 - 使用Decorator自定义带三角形的边框
查看>>
SQLServer之FOREIGN KEY约束
查看>>
redis 系列2 知识点概述
查看>>
图像滤镜艺术---图像滤镜晕影调节算法研究
查看>>
Win8Metro(C#)数字图像处理--2.21二值图像腐蚀
查看>>
MVC5 + EF6 入门完整教程
查看>>
SQL Server如何在变长列上存储索引
查看>>
Replication的犄角旮旯(八)-- 订阅与发布异构的问题
查看>>
Sliverlight实例之 绘制扇形和环形图
查看>>
Visual Studio 2012使用水晶报表Crystal Report
查看>>
你不知道的 页面编码,浏览器选择编码,get,post各种乱码由来
查看>>
SQLSERVER PRINT语句的换行
查看>>
Windows 8.1 应用开发 – 触控操作
查看>>
PowerDesigner创建物理模型
查看>>
使用Git、Git GUI和TortoiseGit
查看>>
vue---canvas实现二维码和图片合成的海报
查看>>
检查项目里是否有IDFA的方法
查看>>
64位系统使用Access 数据库文件的彻底解决方法
查看>>
注释,字符串
查看>>