这一部分主要介绍代码层的优化。了解如何编写高效而精炼的代码,正确的使用函数方法。
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程序性能优化》学习笔记 程序优化的更多相关文章

  1. 智能SQL优化工具--SQL Optimizer for SQL Server(帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 )

    SQL Optimizer for SQL Server 帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 SQL Optimizer for SQL Server 让 SQL Serve ...

  2. Pandas 性能优化 学习笔记

    摘要 本文介绍了使用 Pandas 进行数据挖掘时常用的加速技巧. 实验环境 import numpy as np import pandas as pd print(np.__version__) ...

  3. 微信小程序开发:学习笔记[3]——WXSS样式

    微信小程序开发:学习笔记[3]——WXSS样式 快速开始 介绍 WXSS(WeiXin Style Sheets)是一套用于小程序的样式语言,用于描述WXML的组件样式,也就是视觉上的效果. WXSS ...

  4. 深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)

    深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam) 深度学习笔记(一):logistic分类 深度学习笔记(二):简单神经网络,后向传播算法及实现 ...

  5. 微信小程序开发:学习笔记[7]——理解小程序的宿主环境

    微信小程序开发:学习笔记[7]——理解小程序的宿主环境 渲染层与逻辑层 小程序的运行环境分成渲染层和逻辑层. 程序构造器

  6. 微信小程序开发:学习笔记[5]——JavaScript脚本

    微信小程序开发:学习笔记[5]——JavaScript脚本 快速开始 介绍 小程序的主要开发语言是 JavaScript ,开发者使用 JavaScript 来开发业务逻辑以及调用小程序的 API 来 ...

  7. 微信小程序开发:学习笔记[4]——样式布局

    微信小程序开发:学习笔记[4]——样式布局 Flex布局 新的布局方式 在小程序开发中,我们需要考虑各种尺寸终端设备上的适配.在传统网页开发,我们用的是盒模型,通过display:inline | b ...

  8. 微信小程序开发:学习笔记[2]——WXML模板

    微信小程序开发:学习笔记[2]——WXML模板 快速开始 介绍 WXML 全称是 WeiXin Markup Language,是小程序框架设计的一套标签语言,结合小程序的基础组件.事件系统,可以构建 ...

  9. 微信小程序开发:学习笔记[1]——Hello World

    微信小程序开发:学习笔记[1]——Hello World 快速开始 1.前往微信公众平台下载微信开发者工具. 地址:https://mp.weixin.qq.com/debug/wxadoc/dev/ ...

  10. 微信小程序开发:学习笔记[9]——本地数据缓存

    微信小程序开发:学习笔记[9]——本地数据缓存 快速开始 说明 本地数据缓存是小程序存储在当前设备上硬盘上的数据,本地数据缓存有非常多的用途,我们可以利用本地数据缓存来存储用户在小程序上产生的操作,在 ...

随机推荐

  1. 面向对象之集合ArrayList

    using System; using System.Collections; using System.Collections.Generic; using System.Linq; using S ...

  2. tuning-primer.sh mysql 报表

    [root@server-mysql mytop-1.6]# wget http://www.day32.com/MySQL/tuning-primer.sh --2016-07-03 19:42:3 ...

  3. 32和64位的CentOS 6.0下 安装 Mono 2.10.8 和Jexus 5.0

    http://www.cnblogs.com/shanyou/archive/2012/01/07/2315982.html shanyou 博客

  4. DetachedCriteria详细使用

    一.基本使用 1. 说明 Restrictions 是产生查询条件的工具类. 2. 定义 可以直接用class 创建 DetachedCriteria searDc = DetachedCriteri ...

  5. C语言的一点操作(学习笔记)

    #include <stdio.h> #define LENTEST 100 // 采取逐步删除的方法求的素数 //先假设1-100都是素数,然后剔除2的倍数, //3的倍数,直到剔除所有 ...

  6. 导出Excel之Epplus使用教程3(图表设置)

    导出Excel之Epplus使用教程1(基本介绍) 导出Excel之Epplus使用教程2(样式设置) 导出Excel之Epplus使用教程3(图表设置) 导出Excel之Epplus使用教程4(其他 ...

  7. javascript 快速排序

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. PHP: Local 和 Global 作用域

    函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问. 函数内部声明的变量拥有 LOCAL 作用域,只能在函数内部进行访问. 下面的例子测试了带有局部和全局作用域的变量: 在上例中,有 ...

  9. 实战 -- Redis2.4.2集成spring3.2.2

    redis.host=... redis.port= redis.pass= redis.timeout= #最大能够保持idel状态的对象数 redis.maxIdle= #最大分配的对象数 red ...

  10. IIS计数器

    Bytes Total/sec 是 Bytes Sent/sec 与 Bytes Received/sec 的总和.这是 Web 服务每秒传输的总字节数. Cache Total Turnover R ...