学号:16030140019

姓名:   莫益彰

【嵌牛导读】:代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑 的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上 线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化 点累积起来,对于代码的运行效率绝对是有提升的。

【嵌牛鼻子】计算机编程

【嵌牛提问】Java程序优化的目标是什么?

【嵌牛正文】

1、尽量指定类、方法的final修饰符

带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是 final的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,则该 类所有的方法都是final的。Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,具体参见Java运行期优 化。此举能够使性能平均提高50%。

2、尽量重用对象

特别是String对象的使用,出现字符串连接时应该使用StringBuilder/StringBuffer代替。由于Java虚拟机不仅要花时间生成对象,以后可能还需要花时间对这些对象进行垃圾回收和处理,因此,生成过多的对象将会给程序的性能带来很大的影响。

3、尽可能使用局部变量

调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中速度较快,其他变量,如静态变量、实例变量等,都在堆中创建,速度较慢。另外,栈中创建的变量,随着方法的运行结束,这些内容就没了,不需要额外的垃圾回收。

4、及时关闭流

Java编程过程中,进行数据库连接、I/O流操作时务必小心,在使用完毕后,及时关闭以释放资源。因为对这些大对象的操作会造成系统大的开销,稍有不慎,将会导致严重的后果。

5、慎用异常

异常对性能不利。抛出异常首先要创建一个新的对象,Throwable接口的构造函数调用名为fillInStackTrace()的本地同步方 法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,Java虚拟机就必须调整调用堆栈,因为在处理过程中创建 了一个新的对象。异常只能用于错误处理,不应该用来控制程序流程。

6、++不要在循环中使用try…catch…,应该把其放在最外层

除非不得已。如果毫无理由地这么写了,只要你的领导资深一点、有强迫症一点,八成就要骂你为什么写出这种垃圾代码来了

7、如果能估计到待添加的内容长度,为底层以数组方式实现的集合、工具类指定初始长度

8、当复制大量数据时,使用System.arraycopy()命令

9、尽量减少对变量的重复计算

明确一个概念,对方法的调用,即使方法中只有一句语句,也是有消耗的,包括创建栈帧、调用方法时保护现场、调用方法完毕时恢复现场等。所以例如下面的操作:

for (int i = 0; i

{...}

建议替换为:

for (int i = 0, int length = list.size(); i

{...}

这样,在list.size()很大的时候,就减少了很多的消耗

10、不要对超出范围的基本数据类型做向下强制转型

这绝不会得到想要的结果:

public static void main(String[] args)

{

long l = 12345678901234L;

int i = (int)l;

System.out.println(i);

}

我们可能期望得到其中的某几位,但是结果却是:

1942892530

解释一下。Java中long是8个字节64位的,所以12345678901234在计算机中的表示应该是:

0000 0000 0000 0000 0000 1011 0011 1010 0111 0011 1100 1110 0010 1111 1111 0010

一个int型数据是4个字节32位的,从低位取出上面这串二进制数据的前32位是:

0111 0011 1100 1110 0010 1111 1111 0010

这串二进制表示为十进制1942892530,所以就是我们上面的控制台上输出的内容。从这个例子上还能顺便得到两个结论:

1、整型默认的数据类型是int,long l = 12345678901234L,这个数字已经超出了int的范围了,所以最后有一个L,表示这是一个long型数。顺便,浮点型的默认类型是 double,所以定义float的时候要写成”"float f = 3.5f”

2、接下来再写一句”int ii = l + i;”会报错,因为long + int是一个long,不能赋值给int

java优化方法_JAVA程序性能优化的10个简单方法相关推荐

  1. java split()方法_Java编程性能优化一些事儿

    点击上方 "程序员小乐"关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 Smile and stop complaining about the t ...

  2. java 单例 性能_java程序性能优化之设计优化---单例pk

    对于单例,很多人就要问了.为什么要使用单例,单例意义何在? 单例的产生是由于类的频繁使用,每次生成对象都要new,使用完值后GC要释放对象.这样一来系统性能降低,GC承受着巨大的压力.为了能够提升系统 ...

  3. C++应用程序性能优化

    C++应用程序性能优化 C++应用程序性能优化系列博客主要依据<C++应用程序性能优化>(第2版)学习整理而来,同时参考部分网络博客. C++应用程序性能优化(一)--应用程序性能优化简介 ...

  4. 一文了解 Java 应用程序性能优化指南

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 在<2018 最具就业前景的 7 大编程语言>一文中,通过分析了来自 Indee ...

  5. vector java 复制_Java代码性能优化的 40+ 细节

    点击上方"占小狼的博客",选择"设为星标" 来源:http://t.cn/EMze6kc 在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本 ...

  6. Java程序性能优化——设计优化

    原文出自:http://blog.csdn.net/anxpp/article/details/51914119,转载请注明出处,谢谢! 1.前言 OK,之前写了一篇文章:"23种设计模式介 ...

  7. java程序性能优化(实例)

    java程序性能优化(实例) 一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子: i ...

  8. Java程序性能优化——性能调优层次

    为了提升系统性能,开发人员可以从系统的各个角度和层次对系统进行优化.除了最常见的代码优化外,在软件架构上.JVM虚拟机层.数据库以及操作系统层都可以通过各种手段进行调优,从而在整体上提升系统的性能. ...

  9. Java程序性能优化 读书笔记(十)并行设计模式:Future模式

    转载:Java多线程编程中Future模式的详解<转> 参考:葛一鸣,Java程序性能优化.清华大学出版社. 随着多核时代的到来,CPU的并行能力有了很大的提升.在这种背景下,传统的串行程 ...

最新文章

  1. LLVM与Clang局部架构与语法分析
  2. 【PP】其他类型BOM备忘录
  3. javase哪部分最难_高中物理哪部分最难?这里有答案和方法!一定要收藏
  4. vc读取北通手柄按键_《噬血代码》手柄怎么操作 北通手柄按键功能详解
  5. java 托盘开发_java托盘开发界面记录
  6. 远播教育集团PHP面试题,远播教育金牌升学规划师陈煜雯:如何规划孩子的升学?【摇号】...
  7. POJ-1001 求高精度幂
  8. 万稞pw80线切割编程软件_零基础如何快速学习UG数控编程?
  9. 2021年 win10 Flash 不可用解决方法
  10. Excel百“练“成钢,从题库随机抽取题目 V 2.0版本
  11. 【STC15】串行口1的相关寄存器解读
  12. 如何申请Gmail邮箱?_manok_新浪博客
  13. XMU 1612 刘备闯三国之桃园结义 【二分】
  14. syslinux 的EFI启动以及中文菜单
  15. php报错_STORAGE_WRITE_ERROR_:./Application/Runtime/Cache/Admin/df12aa1edf6tt330187a6514aae4fda4.php
  16. 编写一个 spootboot 程序,有二个方法,一个问早上好,一个说再见
  17. 用户态协议栈之tcp/ip设计
  18. win11桌面改成win7桌面的设置方法
  19. linux执行rm -rf /*命令后的效果原来是这样
  20. 一个体育生的编程之路(一)

热门文章

  1. C语言位操作--判断整数的符号
  2. 【Unity】场景异步加载、卸载
  3. 辨别支付宝各种支付场景
  4. html5 游戏制作教程,【整理】一步一步学做HTML5游戏教程
  5. 推荐一款图表功能强大的可视化报表工具
  6. linux获取系统时间戳
  7. Centos7中病毒排查[tsm][kswapd0]
  8. EPUB阅读器聚合-Android
  9. 移动web开发要点总结
  10. 创新的时机 – 黄金点游戏