java 程序优化笔记

1.一个类的代码行数<=2000;
2.包名小写ASCII,一般为公司域名的倒序;
3.类名以大写字母开头;变量定义为Public、Protected、Private;方法和方法间插入空白行;
4.return没必要加();Switch必有default;if最好加{};
5.参数列表中逗号后插入空格,强制类型也是;
6.尽量避免单字符变量名,除非临时变量;常量大写字母,单词间加“_”;
7.不要声明类中变量为Public,除非实在没有办法;
8.尽量使用()来界定表达式的结合顺序;
9.栈内存:常量/静态;堆内存:其他;
10.代码优化:
for(){
Object obj=new Object();
sys(obj);
}
Object obj=null;
for(){
obj=new Object();
sys(obj);
}
11.初始化继承类时,会同时构造父类,尽量不在类的构造器中创新、初始化大量的对象或执行某种复杂耗时的逻辑运算;
12.在应用对象后主动清楚对象的引用,可以加速JVM对垃圾内存的回收;
13.对于固定无更改的函数可用final来缩短时间;
14.拷贝数组采用System.arrayCopy()效率高;
15.采用0值作为判断条件更好->for语句;
16.尽量一个try...catch解决问题;
17.若for语句内有if语句且数目多,最好移到外面。
for(int i=0;i<10000;i++){
if(isTrue){
doThis();
}else{
doThat();
}
}
if(isTrue){
for(){
doThis();
}
}else{
for(){
doThat();
}
}
18.对于数目已知的ArrayList最好用ensureCapacity进行限制;
19.进行List元素插入用LinkedList;进行查找已存在元素用ArrayList;
   List list=new ArrayList();
   List list=new LinkedList();
20.采用StringBuilder处理字符串串联操作;
21.字符串的长度先计算,不要每次都循环进行length();
22.取字符串里的字符,最好先通过tocharArray()方法获取字符数组;
23.字符串->Double效率低于数字->Double
24.直接写入数据ReadWrite效率要低于ReadWriteBuffer
25.最好不要采用预编译或者不预编译,直接采用操作符格式化数据效率高
26.极力避免多次进行对文件的读取,比如文件长度等
27.JNI技术是为了将其他语言转化到java来
28.JNI使用要点:1.使用C语言中的方法前加native;2.导入C的包头;3.C语言编写注意数据的接收的不同
29.如果没有显式的编写不带参数的类的构造函数,系统默认有。但如果写了,就不允许A a=new A();这种形式了
30.子类在初始化时,会递归的调用父类的构造函数
31.对静态变量的赋值在构造函数中应避免重复赋值
32.不要在类的构造函数中创建类的实例
33.接口可以多重继承,使用的是extends而不是implements;
34.当声明类不是Pulic时,该类不能被除该类所在包的以外的其他类继承
35.类的继承层次不宜太深;
36.接口与抽象类的不同:1、接口中所有属性和方法都必须为Public类型;2、接口所有属性必须是常量;3、接口中的方法不能有方法体;4、接口只能被类实现或者被接口多重继承,抽象类只能被类单继承5、接口不能作为主应用程序独立运行,抽象类在特定下可以
37.内部类一般用非Public的具体类代替,设计中尽量使用接口(Interface)
38.Servlet的方法init、service、destroy等方法对应了JSP中的jspInit、jspServer、jspDestory方法。
39.Tomcat应设定最大和最小线程池
40.消息bean、实体bean、会话bean
41.JMS:点对点PTP和发布/订阅Pub/Sub
42.JDBC驱动:JDBC-ODBC网桥、JDBC-Native、JDBC-Net和纯java驱动
43.优化JDBC链接的性能:1、设置合适的预取行值、2、采用连接池技术3、合理应用事务4、选择合适的事务隔离层与及时关闭链接对象
44.Statement(不带参数)+PreparedStatement(参数 IN)+CallableStatement(参数IN OUT)
45.ResutlSet的get方法与字段必须一致,比如将String转成int会消耗很多时间
46.按需select,不要动不动就*
47.创建模式:抽象工厂(Abstract Factory)、单件(Singleton)、原型(Prototype)、构建者(Builder)
48.结构模式:适配器(Adapter)、门面(Facade)、桥接(Bridge)、组合(Composite)、装饰器(Decorator)、共享元(Flyweight)、代理(Proxy)
49.JNDI技术主要可以查找网络以下资源:EJBHome对象、DataSource对象、JMS ConnectionFactory对象、JMS 主题/队列
50.消息门面模式+返回值打包亦可以优化性能
51.采用返回值打包模式,返回的对象必须是可序列化的(可采用Serializable和其他方法把变量转化成可序列化的对象)
52.多进程技术因为每个进程独有自己独立的运行空间,每个进程度需要复制父进程的所有资源,成本昂贵
53.由于添加了必要的同步操作,可能出现客户端得不到及时响应,关于初始化线程池的最大容量,应该根据实际的客观情况,通常情况下的原则是将连接池的最大容量设置为可能出现的最大并发数量的近似值。
54.泛型是JDK5中最具代表性的新特性之一,可以预先设定集合对象所存储的对象类型。
List<String> myList=new ArrayList<String>()而不要用强制转换去获取集合的对象
55.for(String arg:args)
56.弱引用可用于内存泄露的问题,声明为弱引用,虚拟机会优先对该对象进行回收
57.WeakHashMap是解决Java编程中集合对象引起内存泄露的最为有效的类
58.应用会因为对象没有实现Serializable接口而抛出NotSerializableException异常
59.在对集合和数组进行遍历时,最好使用for-each结构,可以保证所有的类型安全且删除了混乱。
60.优美编程:
   public class Frequency{
      public static void main(String [] args){
       Map<String,Integer> m=new TreeMap<String.Integer>();
       for(String word:args){
          Integer freq=m.get(word);
          m.put(word,(freq==null?1:freq+1));
     }
}

你可能感兴趣的:(java,bean,jdbc,jms,jni)