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定义我想其中概念应该一样。

 

转载于:https://www.cnblogs.com/likeju/p/5416385.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458072.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Halcon中OCR的实现及关键函数解析

OCR的实现共分为两步&#xff0c;1是使用字符数据来训练OCR。2是使用OCR进行字符的识别。 训练分类器 训练分类器共分为4步&#xff1a; 1是使用阈值来分割字符区域&#xff1b; 2是调用append_ocr_trainf函数将字符加入训练集&#xff1b; 3是创建分类器&#xff1b; 4是…

MATLAB 长度和像素_Matlab中短时傅里叶变换 spectrogram和stft的用法

在Matlab中&#xff0c;做短时傅里叶变换需要使用函数spectrogram&#xff0c;而在Matlab2019中&#xff0c;引入了一个新的函数stft&#xff0c;下面我们就来看下这两个函数都如何使用。短时傅里叶变换的基本原理就是将数据分段加窗&#xff0c;做fft&#xff0c;在分段时会有…

Qt 【关于控件样式,鼠标进入、离开、点击】

比如举以下这个例子: QPushButton * okBtn; okBtn->setstylesheet("QPushButton{border-image:url(:/image/hello);}"); //这个是最常规的样式 okBtn->setstylesheet("QPushButton{border-image:url(:/image/hello);}" //…

图像处理基础——灰度共生矩阵

标准定义如下&#xff1a;对于取定的方向θ 和距离 d, 在方向为θ的直线上, 一个像元灰度为 i, 另一个与其相距为 d 像元的灰度为 j 的点对出现的频数即为灰度共生矩阵第(i, j)阵元的值。 怎样理解呢&#xff1f;看起来好复杂呀 呜呜呜 小白理解&#xff1a;灰度共生矩阵就…

iphone查看删除的短信_iPhone12发布!刚买的苹果手机短信全部消失了怎么办?

原标题&#xff1a;iPhone12发布&#xff01;刚买的苹果手机短信全部消失了怎么办&#xff1f;目前&#xff0c;人们的社交除了面对面交谈&#xff0c;用的最多的就是通过手机进行聊天&#xff0c;比如用QQ、微信和短信、邮件等方式&#xff0c;虽然短信不会用来一般的聊天&…

[唐诗]182宫中行乐词(其一)-李白

宫中行乐词(其一)-李白 小小生金屋&#xff0c; 盈盈在紫微。 山花插宝髻&#xff0c; 石竹绣罗衣。 每出深宫里&#xff0c; 常随步辇归。 只愁歌舞散&#xff0c; 化作彩云飞。

python基础之01数据类型-变量-运算浅解

python的数据类型 1 数字 数字分为整型&#xff08;int&#xff09;&#xff0c;长整型&#xff08;long&#xff09;&#xff0c;浮点型&#xff08;float&#xff09;&#xff0c;复数&#xff08;complex&#xff09; 整型较为常用的功能&#xff1a; >>> a-4 >…

使用Caffe进行手写数字识别执行流程解析

之前在 http://blog.csdn.net/fengbingchun/article/details/50987185 中仿照Caffe中的examples实现对手写数字进行识别&#xff0c;这里详细介绍下其执行流程并精简了实现代码&#xff0c;使用Caffe对MNIST数据集进行train的文章可以参考 http://blog.csdn.net/fengbingchun/…

obs可以装手机吗?_原神PC和手机数据互通吗 PC和手机可以一起玩吗

在原神中&#xff0c;很多玩家都在PC端创建了角色&#xff0c;那么疑问来了&#xff0c;PC端与手机端的账号会是互通的吗&#xff1f;下面小编就为大家带来原神PC和手机数据互通吗的相关内容&#xff0c;一起来看看吧&#xff01;更多攻略&#xff1a;原神攻略大全PC和手机数据…

学习linux第二周作业

第二周作业&#xff1a;本周作业内容&#xff1a;1、Linux上的文件管理类命令都有哪些&#xff0c;其常用的使用方法及其相关示例演示。touch,rm,mv,cp,file,ls,chmod,chown,ln,rename,touch 修改文件atime&#xff0c;如果文件不存在&#xff0c;那么创建该文件。rm&#xff1…

三维点云目标提取总结(续)

三维点云目标提取&#xff08;续&#xff09; 3.三维点云目标提取 3.1一般流程 先根据个人认识总结一下目标提取的一般性步骤&#xff1a; 如上所示&#xff0c;三维点云的目标提取关键性的两步即为&#xff1a;特征提取与选择、分类&#xff0c;是不是整个方法流程与图像中的目…

安卓高手之路之java层Binder

很多人一提到Binder就说代理模式&#xff0c;人云亦云的多&#xff0c;能理解精髓的少。 本篇文章就从设计角度分析一下java层BInder的设计目标&#xff0c;以及设计思路&#xff0c;设计缺陷&#xff0c;从而驾驭它。 对于【邦德儿】的理解, 从通信的角度来看&#xff0c;就是…

ftp改为sftp_浅谈 FTP、FTPS 与 SFTP

二狗子最近搭建了一个图片分享网站&#xff0c;每天都有好多人在他的网站上传许多照片&#xff0c;这些照片还会通过内部的逻辑同步到又拍云存储中&#xff0c;非常方便。但不久后问题就来了&#xff0c;由于刚开始的用户照片管理规划没有做好&#xff0c;随着用户上传的图片越…

如何解决秒杀的性能问题和超卖的讨论

2019独角兽企业重金招聘Python工程师标准>>> 最近业务试水电商&#xff0c;接了一个秒杀的活。之前经常看到淘宝的同行们讨论秒杀&#xff0c;讨论电商&#xff0c;这次终于轮到我们自己理论结合实际一次了。 ps&#xff1a;进入正文前先说一点个人感受&#xff0c;…

C# 从Excel中读取时间数据

之前写到从Excel中读取时间数据 //读取Excel数据Excel.Application xapp new Excel.Application();string filepath txt_Excel.Text;Excel.Workbook xbook xapp.Workbooks._Open(filepath, Missing.Value, Missing.Value,Missing.Value, Missing.Value, Missing.Value, Miss…

grid autosport额外内容下载慢_清理大王app下载-清理大王v1.0安卓下载

清理大王&#xff0c;下面由小编给大家介绍一下这款软件&#xff0c;该软件是一款非常不错的手机清理服务应用软件&#xff0c;清理大王app为用户提供了手机垃圾清理&#xff0c;内存加速&#xff0c;优化手机&#xff0c;解决手机卡顿的情况。感兴趣的朋友欢迎使用微侠下载&am…

(转)浏览器兼容的JS写法总结

&#xff0d;、元素查找问题1. document.all[name] (1)现有问题&#xff1a;Firefox不支持document.all[name] (2)解决方法&#xff1a;使用getElementsByName(name)&#xff0c;getElementById(id)等来替代。 2. 集合类对象问题 (1)现有问题&#xff1a;IE中对许多集合类对…

java面试总结(第一天)

临近大学毕业&#xff0c;出来试试找工作&#xff0c;学c#出身&#xff0c;半路出家java&#xff0c;做过几个ssh、stringMVC的项目。基础知识不太扎实&#xff0c;勿喷 以下是我面试过程中遇到的问题 ----------------------------------------------------------------------…

怎么看cudnn的版本好_祖坟风水怎么看,好祖坟有什么征兆?

人们之所以看重祖坟的风水&#xff0c;是因为祖坟的风水与后代子孙的运势密切相关&#xff0c;可以说祖坟的风水好不好关系着子孙后代的运势顺不顺&#xff0c;因此对于祖坟的风水好坏人们是非常在意的&#xff0c;那么祖坟风水怎么看,好祖坟有什么征兆呢&#xff1f;下面是小编…

iOS - Swift SQLite 数据库存储

前言 采用 SQLite 数据库来存储数据。SQLite 作为一中小型数据库&#xff0c;应用 iOS 中&#xff0c;跟前三种保存方式相比&#xff0c;相对比较复杂一些。注意&#xff1a;写入数据库&#xff0c;字符串可以采用 char 方式&#xff0c;而从数据库中取出 char 类型&#xff0c…