DZM.528
Life is a voyage, not a destination.

java代码优化

Java程序中的内存管理机制是通过GC完成的,“一个对象创建后被放置在JVM的堆内存中,当永远不在应用这个对象的时候将会被JVM在堆内存中回收。被创建的对象不能再生,同时也没有办法通过程序语句释放”(这个是《Java的GC机制》中提到的定义,呵呵,还依稀记得)这就是GC对垃圾对象的定义。个人感觉这么解释或许会比较快理解:在运行环境中JVM会对两种内存进行管理,一种是堆内存(对象实例或者变量),一种是栈内存(静态或非静态方法),而JVM所管理的内存区域实际上就是堆内存+栈内存(MS:对象实例+实例化变量+静态方法+非静态方法),当JVM在其所管理的内存区域的中无法通过根集合到达对象的时候就会将此对象作为垃圾对象实施回收。


下面是我在项目中对代码进行优化的几点尝试,备忘

1.循环优化
缺:

List alist=uSvr.getUserinfoList();

          for(int i=0;i
<alist.size();i++){

}
此种方式会一直去执行alist.size()方法,带来性能消耗,改为
for(int i=0 p=alist.size();i<p;i++){
   
}

2.循环内不要创建对象
缺;
for(int i=1;i<=domainCount;i++){
        .            
AuditResult auditResult 
= new AuditResult();
                ..
}

这种做法会在内存中保存N份这个对象的引用//会浪费大量的内存空间,改为

AuditResult auditResult;
for(int i=1;i<=domainCount;i++){
        .            
auditResult
=new AuditResult();
                ..
}

 3.  什么样的对象可以将其认定为不可视阶段呢?举个例子吧,在try{...}catch(Exception){...}代码中,如果在try的代码块中声 明了一个obj,那么当整个 try{...}catch(Exception){...}代码段执行完毕以后这个obj实际上就已经属于不可视阶段了。

所以,应该采用如下方式

try{
   
   Object obj
=new Object();
}
catch(Excepione e){
obj
=null;
}


4.少用new创建对象
用new关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用。但如果一个对象实现了Cloneable接口,我们可以调用它的clone()方法。clone()方法不会调用任何类构造函数。
缺:
在使用设计模式(Design Pattern)的场合,如果用Factory模式创建对象,则改用clone()方法创建新的对象实例非常简单。例如,下面是Factory模式的一个典型实现:

public static Credit getNewCredit() 
  
{ 
     
return new Credit(); 

  }
 


改为

private static Credit BaseCredit = new Credit(); 
  
public static Credit getNewCredit()  { 
   
return (Credit) BaseCredit.clone(); 
  }
 


当new创建对象不可避免时,注意避免多次的使用new初始化一个对象。 尽量在使用时再创建该对象。
缺:

NewObject object = new NewObject();
int value;
if(i>0 )
{
 value 
=object.getValue();
}
 

改为

int value;
if(i>0 )
{
 NewObject object 
= new NewObject();
 Value 
=object.getValue();
}
 

5.乘法和除法考虑

缺:

 for (val = 0; val < 100000; val +=5) { 
   alterX 
= val * 8; 
   myResult 
= val * 2; 
  }
 

改为:

for (val = 0; val < 100000; val += 5) { 
   alterX 
= val << 3; 
   myResult 
= val << 1; 
  }
 

6.尽量多的使用stringbuffer
7清除Session
  通常情况,当达到设定的超时时间时,同时有些Session没有了活动,服务器会释放这些没有活动的Session,.. 不过这种情况下,特别是多用户并访时,系统内存要维护多个的无效Session。
当用户退出时,应该手动释放,回收资源,实现如下:

HttpSession theSession = request.getSession();
// 获取当前Session
if(theSession != null){
 theSession.invalidate(); 
// 使该Session失效
}
 




NOTE:堆内存是在JVM启动的时候创建,堆内存分为新对象与老对象。对于新对象好像会分三个区域。当优先级最高的区域的堆栈满了以后JVM将会进行测试,测试内容是那些对象不可到达,不可到达的对象将会放入到老对象区域。同时JVM会将所有对象拷贝到另外两个区域中,然后经过一段时间依然没有引用的对象会进入老对象区域。对于老对象区域而言基本上就是等待被GC回收的对象了。(这些还是在大学时学.net时候的知识,直接换成java定义我想其中概念应该一样。

发表于 2009-11-11 09:23 DZM.528 阅读(248) 评论(0)  编辑  收藏
 
新用户注册  刷新评论列表  

只有注册用户登录后才能发表评论。


网站导航:
博客园  博客园最新博文  博问  管理
 
 
<2009年11月>
日一二三四五六
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

 导航

  • 语源科技BlogJava
  • 首页
  • 发新随笔
  • 发新文章
  • 聚合
  • 管理

 统计

  • 随笔: 92
  • 文章: 0
  • 评论: 18
  • 引用: 0

随笔分类(70)

  • IDE/Tools(9) (rss)
  • IM(7) (rss)
  • Java Security(5) (rss)
  • JavaEE(16) (rss)
  • JS/jQuery(12) (rss)
  • Linux(10) (rss)
  • XHtml/CSS(3) (rss)
  • 人生规划(2) (rss)
  • 性能测试(2) (rss)
  • 数据库(2) (rss)
  • 网络编程(2) (rss)

收藏夹(4)

  • JavaSE学习系列(4) (rss)

左邻右舍

  • 1-2-3.cnblogs
  • DANCE WITH JAVA
  • downpour博客
  • fangang
  • java加密解密/压缩
  • Ken Wu`s Blog
  • Max On Java
  • Openfire研究小组
  • robbin的自言自语
  • zwt2001267
  • 不朽的飞翔
  • 大鹏的工作笔记
  • 缪小东博客
  • 股海e程
  • 都市淘沙者

我的链接

  • Apache Mina学习
  • apache2 安装与配置
  • blogjava-google搜索
  • Core Java学习
  • Dom4j 学习笔记
  • Epoch Converter
  • Hibernate annotations reference[zh_cn]
  • httpclient入门
  • IBM's developerWorks 中国
  • Java1.5泛型指南
  • java开源大全
  • Java性能优化技巧集锦
  • Java数字证书实例
  • java知识点
  • Java程序员应该好好看看的书籍
  • Java编程实现支持中文的Base64编码转换
  • Java网络编程从入门到精通
  • Java网络编程-清华java教程笔记
  • jQuery api
  • jQuery1.1 API 中文版
  • jQuery中文社区
  • jQuery官方网站
  • Js-FAQ贴
  • jsonlint-测验json
  • json介绍
  • Maven权威指南
  • PostgreSQL 8.0.0 中文文档
  • struts2.0系列
  • thickbox-对话框插件
  • Ubuntu中文
  • 亚当学院
  • 基于 SSH 的远程操作以及安全,快捷的数据传输
  • 播布客
  • 满江红-RedsagaTeam
  • 精通JS正则表达式

最新评论

  • 1. re: 用Keytool和OpenSSL生成和签发数字证书
  • @wyh
    index.txt删掉再新建一个就可以了
  • --silence.lc
  • 2. rewq
  • 但是而且我日
  • --黄山
  • 3. re: Ubuntu下安装和配置Apache2
  • 受益!
  • --王老五
  • 4. re: JSP防止重复提交,重复刷新,后退
  • 顶顶顶
  • --搜索
  • 5. re: JSP防止重复提交,重复刷新,后退
  • sss
  • --搜索

阅读排行榜

  • 1. Ubuntu下安装和配置Apache2(65662)
  • 2. 用Keytool和OpenSSL生成和签发数字证书(12993)
  • 3. Ubuntu中安装Chrome小记[解决 错误:依赖关系没有满足:libnss3-1d (>= 3.12.3)](12371)
  • 4. REFERER及jsp中request.getHeader() 相关详细(11759)
  • 5. Tsung安装与使用(7364)

Powered by: 博客园
模板提供:沪江博客
Copyright ©2026 DZM.528