zoukankan      html  css  js  c++  java
  • 《Java程序性能优化》之程序优化

    这一部分主要介绍代码层的优化。了解如何编写高效而精炼的代码,正确的使用函数方法。
    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;

  • 相关阅读:
    JavaScript跳转到指定页面并且到指定的tab切换窗口
    三层架构之基础篇(对数据库增删改查)
    三层架构之基础篇(三层架构模型)
    过一天不登QQ的生活
    MVC + EF 框架 对数据库做增删改查
    想说的话
    新的2019年,向上
    C#读取txt文档
    C#写的 电子邮件客户端(winform窗体)
    C# 鼠标任意拖动无边框窗体(调用API函数)。
  • 原文地址:https://www.cnblogs.com/binyue/p/3890228.html
Copyright © 2011-2022 走看看