影响Java代码性能的一些细节

  读《Effective
Java》的一些收获,会持续添加。

  Integer和
int的区别:

  int是
Java基本数据类型,表示一个整型值。Integer是对
int基本类型的一个封装(每一个 Integer对象中都包含一个"private final int value;"的成员变量),提供了一系列的通用方法,如
int与 String的相互转换,把 int值转换为 long、char等其他基本类型。相应地,两个封装了相同的 int值的
Integer对象在使用"=="比较的时候不一定会返回 true。例如下边的代码 b的值为 false:

  boolean b = new Integer(10) == new Integer(10);

  Integer类实现了 Comparable接口,具体的实现方法是比较两个
Integer对象封装的 int值:

  public int compareTo(Integer anotherInteger) {
  return compare(this.value, anotherInteger.value);
  }

  public static int compare(int x, int y) {
  return (x < y) ? -1 : ((x == y) ? 0 : 1);
  }

  通过看
Integer的源码我们可以发现,除了包含一个 value成员变量,其他都是
static的成员和方法,这些不会导致性能问题。Integer类所带来的性能问题主要来自于创建
Integer对象的开销,例如:

    public static void main(String[] args) throws InterruptedException {

long sum = 0L;

long start = System.currentTimeMillis();
for (long i = 0; i < Integer.MAX_VALUE; i++) {
sum += i;
}
long end = System.currentTimeMillis();
long time = (end - start) / 1000L;

System.out.println("time=" + time);
}

  运行这段代码,结果是
time=1,如果把 sum定义为 Long型,结果是 time=10。这提示我们除非集合和参数化类型等必要情况下,其他时候应该尽可能少使用
Integer等包装类。

  使用 StringBuilder.append()方法和"+"对字符串进行连接:

    public String statement() {
String result = "";
for (int i = 0; i < 10000; i++) {
result += "哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈";
}
     return result;
}

  上述这段代码,在读第51条之前,我认为在十几毫秒时间内可以执行完成,仍使用 System.currentTimeMillis()打印执行时间,结果是
time=4。把次数改为20000,time=16。改为100000,结果time=486。改为1000000,博文都快写完了,还没跑出来结果..

  看到这里稍微有些编程经验的人都大概会才出来是
Java内部使用了迭代导致开销呈平方级的增长,那"+"操作到底做了什么会在内部使用迭代呢?(编译源码来源:CSDN-zcjl)

   0:   ldc     #2; //String result
2: astore_1
3: iconst_0
4: istore_2
5: iload_2
6: bipush 10000
8: if_icmpge 36
11: new #3; //class StringBuffer
14: dup
15: invokespecial #4; //Method java/lang/StringBuffer."<init>":()V
18: aload_1
19: invokevirtual #5; //Method java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
22: iload_2
23: invokevirtual #6; //Method java/lang/StringBuffer.append:(I)Ljava/lang/StringBuffer;
26: invokevirtual #7; //Method java/lang/StringBuffer.toString:()Ljava/lang/String;
29: astore_1
30: iinc 2, 1
33: goto 5
36: return

  我们可以看第11行,在每次进行"+"操作的时候,都会
new一个 StringBuilder对象来实现字符串的拼装。

  这也是为什么在拼装操作次数未知的情况下,推荐使用
StringBuilder.append()方法的原因。

影响Java代码性能的一些细节

时间: 2024-10-20 20:30:34

影响Java代码性能的一些细节的相关文章

Java 代码性能优化总结

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

影响Java EE性能的十大问题

本文作者是一名有10多年经验的高级系统架构师,他的主要专业领域是Java EE.中间件和JVM技术.他在性能优化和提升方面也有很深刻的见解,下面他将和大家分享一下常见的10个影响Java EE性能问题. 1.缺乏正确的容量规划 容量规划是一个全面的和发展的过程标准,预测当前和未来的IT环境容量需求.制定合理的容量规划不仅会确保和跟踪当前IT生产能力和稳定性,同时也会确保新项目以最小的风险部署到现有的生产环境中.硬件.中间件.JVM.调整等在项目部署之前就应该准备好. 2.Java EE中间件环境

干货 | 云智慧透视宝Java代码性能监控实现原理

这篇图文并茂,高端大气上档次,思维缜密的文章,一看就和我平时的风格不同.对了.这不是我写的,是我家高大英俊,写一手好代码,炒一手好菜的男神架构师老公的大作,曾发表于技术公号,经本人授权转载,如有技术问题,我代为请他本人解答~~ 一.Java平台体系及应用场景 从1995年Sun Microsystems公司正式推出Java,到2006年时Sun公司将其开源,迄今为止已经有了20年的历史.Java本身已不仅仅只是一门面向对象的编程语言,而是由一系列计算机软件和规范形成的技术体系,这个技术体系提供了

Java代码性能优化技巧

流方面: private FileOutputStream writer; writer = new FileOoutputStream(fileName); 使用BufferedOutputStream 对写入FileOutputStream的数据进行缓存 //将writer的类型由FileOutputStream 变更为BufferedOutputStream //private FileOutputStream writer; private BufferedOutputStream wr

35 个 Java 代码性能优化总结

代码优化的目标是: 1.减小代码的体积 2.提高代码运行的效率 代码优化细节 1.尽量指定类.方法的final修饰符 带有final修饰符的类是不可派生的.在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的.为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写.如果指定了一个类为final,则该类所有的方法都是final的.Java编译器会寻找机会内联所有的final方法,内联对于提升Java

[转]Java代码(性能)优化总结

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

java代码性能优化总结(转载)

原文链接:http://developer.51cto.com/art/201511/496263.htm 前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑 的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了.代码优化也是一样,如果项目着眼于尽快无BUG上 线,那么此时可以抓大放小,代码的细节可以不精打细磨:但是如果有足够的时间开发.维护代码,这时候就必须

Java 代码性能优化

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

不得不看的Java代码性能优化总结

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