- 浏览: 599087 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
1、使用StringBuilder
一般来说,使用 StringBuilder 的效果要优于使用 + 操作符。如果可能的话请在需要跨多个方法传递引用的情况下选择 StringBuilder,因为 String 要消耗额外的资源。JOOQ在生成复杂的SQL语句便使用了这样的方式。在整个抽象语法树(AST Abstract Syntax Tree)SQL传递过程中仅使用了一个 StringBuilder 。
更加悲剧的是,如果你仍在使用 StringBuffer 的话,那么用 StringBuilder 代替 StringBuffer 吧,毕竟需要同步字符串的情况真的不多。
2、不要使用iterator()方法
这条建议不适用于一般的场合,仅适用于在 N.O.P.E 分支深处的场景。尽管如此也应该有所了解。Java 5格式的循环写法非常的方便,以至于我们可以忘记内部的循环方法,比如:
当每次代码运行到这个循环时,如果 strings 变量是一个 Iterable 的话,代码将会自动创建一个Iterator 的实例。如果使用的是 ArrayList 的话,虚拟机会自动在堆上为对象分配3个整数类型大小的内存。
也可以用下面等价的循环方式来替代上面的 for 循环,仅仅是在栈上“浪费”了区区一个整形,相当划算。
如果循环中字符串的值是不怎么变化,也可用数组来实现循环。
小结
无论是从易读写的角度来说,还是从API设计的角度来说迭代器、Iterable接口和 foreach 循环都是非常好用的。
但代价是,使用它们时是会额外在堆上为每个循环子创建一个对象。
3、使用entrySet()
当我们想遍历一个用键值对形式保存的 Map 时,必须要为下面的代码找到一个很好的理由:
更不用说下面的写法:
在我们使用 N.O.P.E. 分支应该慎用map。因为很多看似时间复杂度为 O(1) 的访问操作其实是由一系列的操作组成的。而且访问本身也不是免费的。至少,如果不得不使用map的话,那么要用 entrySet() 方法去迭代,这样的话,我们要访问的就仅仅是Map.Entry的实例。
小结
在需要迭代键值对形式的Map时一定要用 entrySet() 方法。
4.for循环优化
list.size()每次循环都会被执行一次,这无疑会影响程序的性能,所以应该将其放到循环外面,用一个变量来代替。
避免在for循环中捕捉异常
提取与循环无关的表达式避免在for循环中进行一些无用的运算
5.集合初始化时初始化个数
6.尽量实现对象重用
系统要花时间生成对象,以后还需花时间对这些对象进行垃圾回收和处理。因此,生成过多的对象将会给程序的性能带来很大的影响。
7.将闲置的资源进行释放
Java 编程过程中,进行数据库连接、I/O流操作时务必小心,在使用完毕后,及时关闭以释放资源。因为对这些大对象的操作会造成系统大的开销,稍有不慎,会导致严重的后果。
8.StringTokenizer代替substring()和indexOf()
StringTokenizer是java中object类的一个子类,继承自 Enumeration( public interface Enumeration实现 Enumeration(列举) 接口的对象,它生成一系列元素,一次生成一个)接口。
9.System.arraycopy()实现数组值的拷贝
两个数组间的复制建议不要使用循环,Java提供了一个数组拷贝的方法。
10.尽量指定类、方法的final修饰符
一般来说,使用 StringBuilder 的效果要优于使用 + 操作符。如果可能的话请在需要跨多个方法传递引用的情况下选择 StringBuilder,因为 String 要消耗额外的资源。JOOQ在生成复杂的SQL语句便使用了这样的方式。在整个抽象语法树(AST Abstract Syntax Tree)SQL传递过程中仅使用了一个 StringBuilder 。
更加悲剧的是,如果你仍在使用 StringBuffer 的话,那么用 StringBuilder 代替 StringBuffer 吧,毕竟需要同步字符串的情况真的不多。
2、不要使用iterator()方法
这条建议不适用于一般的场合,仅适用于在 N.O.P.E 分支深处的场景。尽管如此也应该有所了解。Java 5格式的循环写法非常的方便,以至于我们可以忘记内部的循环方法,比如:
for (String value : strings) { // Do something useful here }
当每次代码运行到这个循环时,如果 strings 变量是一个 Iterable 的话,代码将会自动创建一个Iterator 的实例。如果使用的是 ArrayList 的话,虚拟机会自动在堆上为对象分配3个整数类型大小的内存。
private class Itr implements Iterator<E> { int cursor; int lastRet = -1; int expectedModCount = modCount; // ...
也可以用下面等价的循环方式来替代上面的 for 循环,仅仅是在栈上“浪费”了区区一个整形,相当划算。
for (int i = 0; i < size; i++) { String value : strings.get(i); // Do something useful here }
如果循环中字符串的值是不怎么变化,也可用数组来实现循环。
for (String value : stringArray) { // Do something useful here }
小结
无论是从易读写的角度来说,还是从API设计的角度来说迭代器、Iterable接口和 foreach 循环都是非常好用的。
但代价是,使用它们时是会额外在堆上为每个循环子创建一个对象。
3、使用entrySet()
当我们想遍历一个用键值对形式保存的 Map 时,必须要为下面的代码找到一个很好的理由:
for (K key : map.keySet()) { V value : map.get(key); }
更不用说下面的写法:
for (Entry<K, V> entry : map.entrySet()) { K key = entry.getKey(); V value = entry.getValue(); }
在我们使用 N.O.P.E. 分支应该慎用map。因为很多看似时间复杂度为 O(1) 的访问操作其实是由一系列的操作组成的。而且访问本身也不是免费的。至少,如果不得不使用map的话,那么要用 entrySet() 方法去迭代,这样的话,我们要访问的就仅仅是Map.Entry的实例。
小结
在需要迭代键值对形式的Map时一定要用 entrySet() 方法。
4.for循环优化
list.size()每次循环都会被执行一次,这无疑会影响程序的性能,所以应该将其放到循环外面,用一个变量来代替。
避免在for循环中捕捉异常
提取与循环无关的表达式避免在for循环中进行一些无用的运算
5.集合初始化时初始化个数
6.尽量实现对象重用
系统要花时间生成对象,以后还需花时间对这些对象进行垃圾回收和处理。因此,生成过多的对象将会给程序的性能带来很大的影响。
7.将闲置的资源进行释放
Java 编程过程中,进行数据库连接、I/O流操作时务必小心,在使用完毕后,及时关闭以释放资源。因为对这些大对象的操作会造成系统大的开销,稍有不慎,会导致严重的后果。
8.StringTokenizer代替substring()和indexOf()
StringTokenizer是java中object类的一个子类,继承自 Enumeration( public interface Enumeration实现 Enumeration(列举) 接口的对象,它生成一系列元素,一次生成一个)接口。
9.System.arraycopy()实现数组值的拷贝
两个数组间的复制建议不要使用循环,Java提供了一个数组拷贝的方法。
10.尽量指定类、方法的final修饰符
发表评论
文章已被作者锁定,不允许评论。
-
java WeakHashMap学习(key是弱引用)
2018-06-21 09:31 1232在Java集合中有一种特殊的Map类型:WeakHashMap ... -
java HashMap TreeMap(key顺序) LinkedHashMap(插入顺序)学习
2018-06-07 10:27 950java为数据结构中的映射定义了一个接口java.util.M ... -
java RESTful 详解
2018-04-27 11:35 642(1)每一个URI代表一种资源,独一无二; (2)客户端 ... -
java 通过HttpsUrlConnection访问接口数据
2018-04-19 11:25 986server: ssl: key-stor ... -
java 使用多线程的场景总结
2018-04-10 14:35 1702在一个高并发的网站中,多线程是必不可少的。下面先说一下多线程在 ... -
java Enum枚举设置
2018-04-10 10:55 478/** * 数据状态:0:无效,1:有效 **/ ... -
java RestTemplate访问restful服务
2018-03-01 15:02 1620REST的基础知识 当谈论REST时,有一种常见的错误就是将其 ... -
java FYOpenApi实现短信发送
2018-01-02 17:10 11721.配置文件 sms.OpenUrl = http://s ... -
java JSONObject序列化包含Date类型数据的Java对象
2017-12-26 16:31 1616如果Date.class无法进行转换则使用Timestamp. ... -
java 用HttpsURLConnection进行传递中文时错误总结
2017-12-07 16:42 653传递中文时需要用Writer而不是OutputStream ... -
java 内存泄漏
2017-11-27 13:51 4931.内存溢出 out of memory ... -
ActiveMQ 三种发送消息方式(同步,异步,单向)
2017-11-17 10:25 2452MQ 发送普通消息有三种实现方式:可靠同步发送、可靠异步发送、 ... -
java Guava ListenableFuture实现线程回调功能
2017-11-14 10:17 1774java Future具有局限性。在实际应用中,当需要下 ... -
java Curator实现分布式锁
2017-09-05 14:39 1089Curator实现分布式锁主要依赖于zookeeper ... -
java Guava工具集学习(强大)
2017-09-05 10:28 431import java.util.Iterator ... -
java CyclicBarrier进行并发编程
2017-08-25 15:44 671CyclicBarrier允许一组线程相互等待达到一个公共的障 ... -
java 使用kyro进行高性能序列化对象和集合
2017-08-23 14:05 2151import java.io.ByteArrayInp ... -
java 对重复电话号码进行排除的优化(排序和前后对比)
2017-08-22 14:14 7891.先对10万数据排序; 2.对比前后两条数据 ; 3.筛 ... -
ActiveMQ 结合Spring进行数据同步
2017-07-19 15:27 583注意事项hibernate配置文件必须设置自动提交否则不能插入 ... -
java 通过反射原理进行复制操作
2017-07-10 14:24 508// 这些实例的对象字段[sCode] String ...
相关推荐
本文将详细介绍10种Java性能优化策略,并重点解析文档中提到的几个关键点。 #### 二、hashCode() 方法优化 1. **背景**:`hashCode()` 方法在Java中用于快速查找对象。当对象存储在哈希表中时,例如`HashMap`,其...
### 35个Java代码性能优化总结 #### 前言 代码优化是软件开发中的一个重要环节,尤其在Java这样的大型应用开发中更是至关重要。合理的优化不仅能够显著提高应用程序的性能,还能降低资源消耗,提升用户体验。本文将...
java调用本地dll的几种方法性能对比测试。 JNA消耗的总时间(ms):5406 bridj消耗的总时间(ms):984 JNI消耗的总时间(ms):47 包含c++源码和java源码,部署和使用方法。在win7和winxp下测试用过。 部分源码是...
以上介绍了几种常见的Java程序性能优化技巧,包括避免在循环条件中使用复杂表达式、合理设置集合类的初始大小、在`finally`块中关闭资源、使用`System.arraycopy()`代替循环复制数组以及将简单的getter/setter方法...
### Java IO性能优化 #### 4.1 基本IO操作 在Java开发中,`java.io`包是处理输入输出操作的核心组件。虽然它旨在简化开发人员的工作流程,但初学者常常会因为不了解其内部机制而做出降低IO性能的选择。通过深入...
### JAVA线程安全及性能优化的关键知识点 #### 一、JAVA内存模型与线程安全的基础概念 **JAVA内存模型**是理解线程安全的核心。不同的操作系统平台可能有不同的内存管理方式,但Java虚拟机(JVM)提供了一套统一的...
### Java性能优化关键知识点 #### 一、合理运用单例模式 **单例模式**是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。在Java性能优化中,合理使用单例模式可以带来以下优势: 1. **...
《实战Java虚拟机——JVM故障诊断与性能优化》是一本深入探讨Java开发中的关键环节——Java虚拟机(JVM)的专著。本书聚焦于实际应用中的问题解决和性能调优,对于Java开发者和系统管理员来说,是提升技术水平的重要...
本篇文章将详细介绍在Java中连接Oracle数据库的几种常见方法,以及相关的源码示例。 1. JDBC-ODBC桥连接: JDBC-ODBC桥是Java早期连接数据库的一种方式,它依赖于操作系统上的ODBC数据源。首先,你需要在系统中...
Java性能优化存在以下几点挑战: 1. 应用程序的设计和编码:应用程序的设计和编码对性能的影响非常大。 2. 虚拟机执行字节码的速度:虚拟机的执行速度对性能的影响也非常大。 3. 运行库的运行速度:运行库的运行...
本文将深入探讨几种不同的XML解析方法,并通过实际的“Java解析XML性能对比分析Demo”来展示它们的性能差异。我们将讨论DOM、SAX、JDOM、DOM4J和JAXB这五种解析器,以及它们各自的特点和适用场景。 1. DOM(文档...
通过实例分析了JVM内存泄漏的几种情况,并展示了如何使用JProfile等工具来跟踪内存泄漏问题。 ### 性能测试与调优案例分析 文档中提供了一个性能测试案例,对比了采用client和server版本JVM的Tomcat 5.5.28服务器在...
### Java代码循环的优化 在Java编程中,循环是...通过以上几种方法,可以有效地优化Java中的循环结构,从而提升程序的整体性能。在实际开发过程中,开发者应该根据具体情况灵活运用这些技巧,以达到最佳的性能效果。
观察机器性能的方法多种多样,具体包括但不限于以下几种: - **监控工具**: 使用专业的监控工具来实时监控系统各项指标; - **日志分析**: 通过对系统日志的分析来发现潜在的问题; - **压力测试**: 模拟高负载场景...
10. **JVM参数调优**:根据应用程序的需求,调整JVM启动参数,如-Xms, -Xmx控制堆大小,-XX:MaxHeapFreeRatio和-XX:MinHeapFreeRatio控制堆空闲比例,-XX:NewRatio调整新生代和老年代的比例等,都是性能优化的重要...
### Java问题定位技术+性能优化知识点详述 #### 一、Java线程堆栈分析 **1.1 如何输出线程堆栈?** - **命令行方式**: 使用`jstack`命令可以输出指定Java进程的线程堆栈信息。 - `jstack <pid>`: 输出指定PID的...
在软件开发领域,特别是在企业级应用中,Java作为一种广泛应用的编程语言,其程序性能优化是至关重要的环节。本文将从几个方面介绍如何进行Java程序性能优化,包括循环优化、初始化大小设置、异常处理、数组复制以及...