java开发常用的性能优化有哪些?
如果你还没有t没有系统整理,只是说一些共性的东西,说说自己的想法,有一些关于代码的细节,有的可能是一些方法和习惯。
避免创建过多的java对象:例如,在循环中创建对象需要时间来创建和回收;
尽量使用局部变量,或者换句话说,根据变量的作用域在适当的地方定义变量;
最小化计算/运算:这里其实有很多需要注意的点。举个简单的例子,如果给定10个id查询数据库,是执行whereid10次还是执行whereidin(list)1次;
使用stringbuffer和collection时,如果可以确认元素的长度/个数,尽量指定元素的长度/个数;因为默认值比较小,所以它们在扩展的时候会有一些性能损失;
基本数据类型转换为字符串,使用tostring()而不是;
关闭finally块中的流,养成好习惯;
尽量少用正则表达式;如果非要用,尽量缓存模式;
如果要多线程,请使用线程池;
如果没有必要,用hashmap和arraylist代替hashtable和vector;根据需要选择是使用arraylist还是link
lru置换算法实现方法?
lru是一种页面替换算法。对于内存中不被使用的数据块,称为lru,操作系统会根据那些属于lru的数据,将它们移出内存,腾出空间来加载其他数据。
lru算法:最近最少使用。简单来说,就是把数据块中每次使用过的数据放在数据块的前端,然后它会存在最长的时间。剔除长数据,即数据块末尾的数据。这是lru算法。
lru的全称最近才被使用,这意味着它没有被使用的时间最长。
lru算法的设计原则是,如果一个数据最近没有被访问过,那么将来也不太可能被访问。也就是说,当有限的空间被数据填满时,最长时间没有被访问的数据应该被淘汰。
实施lru:
1.数组用于存储数据,每个数据项都标有访问时间戳。每次插入新数据项时,数组中现有数据项的时间戳都会递增,新数据项的时间戳设置为0并插入数组。每次访问数组中的数据项时,被访问数据项的时间戳被设置为0。当数组空间已满时,删除时间戳最大的数据项。
2.使用链表,每次插入新数据时,都会在链表的头部插入新数据;每次缓存命中(即数据被访问),数据被移动到链表的头部;然后当链表写满时,链表末尾的数据会被丢弃。
3.使用链表和散列表。当需要插入新数据项时,如果新数据项存在于链表中(一般称为hit),将节点移动到链表的头部;如果不存在,创建一个新的节点,放在链表的头部;如果缓存已满,删除链表的最后一个节点。访问数据时,如果数据项存在于链表中,则将节点移动到链表的头部,否则返回-1。这样,链表末尾的节点就是最长时间没有被访问的最后一个数据项。
原文标题:hashmap负载因子扩容为啥是2倍 JAVA开发常用的性能优化有哪些?,如若转载,请注明出处:https://www.bjtdsx.com/bjtdsx5/34682.html
免责声明:此资讯系转载自合作媒体或互联网其它网站,「天地水秀」登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,文章内容仅供参考。