您的位置:首页 > 编程语言 > Java开发

《Java程序性能优化》学习笔记 程序优化

2017-10-12 23:16 190 查看
这一部分主要介绍代码层的优化。了解如何编写高效而精炼的代码,正确的使用函数方法。
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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: