《Java程序性能优化》学习笔记 程序优化
2017-10-12 23:16
246 查看
这一部分主要介绍代码层的优化。了解如何编写高效而精炼的代码,正确的使用函数方法。
1.字符串优化处理
Java语言中,String对象可以认为是对char数组的眼神和进一步封装。它主要由3部分组成:
char数组、偏移量和String的长度。
String对象的三个基本特点:不变性,针对常量池的优化,类的final定义。
不变性:是指String对象一旦生成,不能再对它进行改变,即immutable模式。不变模式的作用在于当一个对象需要被多线程共享,并且访问频繁时,可以省略同步和所等待的时间,大幅提高系统性能。可以提高多线程程序的性能。
针对常量池的优化:当两个String对象拥有相同的值时,他们只引用常量池中同一个拷贝。可以大幅度节省内存空间。
下面是调试截图,可以通过id的值来验证。
类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接去访问;非静态成员(变量和方法)属于类的对象,
所以只有在类的对象产生(创建类的实例)时才会分配内存,然后通过类的对象(实例)去访问。在类的静态成员中肯定不能发出对非静态
方法或变量的调用。
类的final定义:不能有任何子类,保护系统安全。
subString()方法的内存泄露:String类中提供了两个截取字符串的方法,public String substring(int beginIndex(,int endIndex))
该方法的源码:
这种通过偏移量截取字符串的方法,容易造成内存空间浪费。
字符串分割和查找:
2.核心数据结构
主要讨论List、Map等常用结构的使用方法和优化技巧。
3.使用NIO提升性能
jAVA NIO的特性:
为所有的原始类提供Buffer缓存支持;
使用Java.nio.charset.Charset作为字符集编码解码解决方案;
增加Channel对象,作为新的原始I/O抽象;
支持锁和内存映射文件的文件访问接口;
提供了基于Selector的异步网络IO;
1.字符串优化处理
Java语言中,String对象可以认为是对char数组的眼神和进一步封装。它主要由3部分组成:
char数组、偏移量和String的长度。
String对象的三个基本特点:不变性,针对常量池的优化,类的final定义。
不变性:是指String对象一旦生成,不能再对它进行改变,即immutable模式。不变模式的作用在于当一个对象需要被多线程共享,并且访问频繁时,可以省略同步和所等待的时间,大幅提高系统性能。可以提高多线程程序的性能。
针对常量池的优化:当两个String对象拥有相同的值时,他们只引用常量池中同一个拷贝。可以大幅度节省内存空间。
String str1="abc"; String str2="abc"; String str3=new String("abc"); System.out.println(str1==str2);//true System.out.println(str1==str3);//false System.out.println(str1==str3.intern());//true
下面是调试截图,可以通过id的值来验证。
类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接去访问;非静态成员(变量和方法)属于类的对象,
所以只有在类的对象产生(创建类的实例)时才会分配内存,然后通过类的对象(实例)去访问。在类的静态成员中肯定不能发出对非静态
方法或变量的调用。
类的final定义:不能有任何子类,保护系统安全。
subString()方法的内存泄露:String类中提供了两个截取字符串的方法,public String substring(int beginIndex(,int endIndex))
该方法的源码:
public String subString(int beginIndex,int endIndex) { ...... return ((beginIndex==0)&&(endIndex==count))?this: new String(offset+beginIndex,endIndex-beginIndex,value); }
这种通过偏移量截取字符串的方法,容易造成内存空间浪费。
字符串分割和查找:
2.核心数据结构
主要讨论List、Map等常用结构的使用方法和优化技巧。
3.使用NIO提升性能
jAVA NIO的特性:
为所有的原始类提供Buffer缓存支持;
使用Java.nio.charset.Charset作为字符集编码解码解决方案;
增加Channel对象,作为新的原始I/O抽象;
支持锁和内存映射文件的文件访问接口;
提供了基于Selector的异步网络IO;
相关文章推荐
- 《Java程序性能优化》学习笔记 Ⅱ程序优化
- CUDA学习笔记之程序优化
- CUDA学习笔记之程序优化
- 《Java程序性能优化》学习笔记 JVM和并发优化
- CUDA学习笔记之程序优化
- JDBC基础学习笔记_05_jdbc的程序优化_DTC相关
- CUDA学习笔记一:CUDA+OpenCV的图像转置,采用Shared Memory进行CUDA程序优化
- JAVA程序性能优化-让你的java程序更快、更稳定学习笔记一性能优化一般步骤
- 基于node的websocket学习笔记二:一个简单的聊天室程序与优化方案
- java程序性能优化学习笔记day1
- JDBC基础学习笔记_05_jdbc的程序优化_Dao
- Java学习笔记4--程序的进一步优化
- 《Java程序性能优化》学习笔记 设计优化
- JDBC基础学习笔记_05_jdbc的程序优化_单立Connection并编写调用配置文件
- 深入理解计算机系统学习笔记(二)之程序优化
- 汇编学习笔记:第一个程序,Hello World!!!
- Spark学习笔记7-在eclipse里用scala编写spark程序(单机和集群运行)
- AM335x(TQ335x)学习笔记——Linux CAN测试程序的编译
- C++ Primer 学习笔记_88_用于大型程序的工具 -错误处理[续1]
- C++ Primer 学习笔记_93_用以大型程序的工具 -命名空间[续2]