Java性能优化
1.public static void main(String args)
{
HashMap<String, String> hm = new HashMap<String, String>;
hm.put("111", "222");
Set<Map.Entry<String, String>> entrySet = hm.entrySet;
Iterator<Map.Entry<String, String>> iter = entrySet.iterator; while (iter.hasNext)
{
Map.Entry<String, String> entry = iter.next;
System.out.println(entry.getKey + "\t" + entry.getValue);
}
}
2.尽量重用对象,因为jvm不仅要创建对象还要管理它们给它们分配内存空间,回收它们
这一点上,尽量用StringBuild 和StringBuffer
3.尽量把类定义成final类型,因为性能调优,jvm会内联final
4.尽可能使用局部变量,因为局部变量当方法运行时它存在,当方法运行完了,那么它就会消失,不会增加Java虚拟机的负担,不用去垃圾回收,
不会,而且因为是在栈中所以速度快,静态变量,实例变量都在堆中创建,
5.减少对变量的计算,尤其是在for循环中
6.尽量采用懒加载的策略
7.慎用异常,因为异常会影响性能。
8.不用在循环中使用try catch
9.给以数组为底层实现的工具类和集合设定初始化容量,大大提升性能,
HashMap设置大一些,因为自己table表,包括StringBuild和StringBuffer
10.当复制大量的数据时用System.arraycopy
11.乘法和除法,最好采用移位操作,因为可以大大提高性能,底层对于这种移位除法
很好的实现,而且效率高,但要加好注释,不易理解,这个移位是8421码,移一位代表2,移2位代表是4
12.三元操作符虽然和if else 差不多,但是性能上比if else 好太多,尽量用
13.循环体内不要创建对象,在外边的话,内存中就只有一个对象,每次只是指向不同的引用,
14.尽量避免使用静态变量,因为Java虚拟机不会回收这些内存空间,
15.使用数据库连接池和线程池,这两者全是重用对象,前者是避免了重复建立连接和释放连接,后者是避免了线程的创建和销毁
16.把基本类型转变为字符串用.toString是最快的,String.value()次之,+是最慢的,
(1)、String.valueOf方法底层调用了Integer.toString方法,但是会在调用前做空判断
(2)、Integer.toString方法就不说了,直接调用了
(3)、i + “”底层使用了StringBuilder实现,先用append方法拼接,再用toString方法获取字符串
17程序运行过程中避免使用反射
18.如果是单线程尽量使用线程不安全的,因为线程安全的有同步机制,同步机制会降低性能。
19.避免使用finalize,该方法会给GC增加很大负担。
20.尽量使用基本类型,因为包装类型一般存的都是堆,而且Java虚拟机还要进行拆箱装箱操作,十分浪费性能
21.尽量使用迭代来代替递归,
22.避免使用Map,不得不使用的话用Entry
23.如果键值非常小使用EnumSet或EnumMap来代替HashSet 或 HashMap

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
C++入门:与Python对比第一弹
因为下学期会学c++面向对象编程,还有接下来的项目中可能会用到c++,所以决定先提前学习下,顺便与python做个比对,还是有许多相似之处的。=v= 下面是两个简单例子对比。 1,for循环 C++ #include <iostream> using namespace std; int main() { int a = 5; for (a; a < 10; a += 1) { cout << "a的值为:" << a << endl; } system("PAUSE"); return 0; } Python for a in range(5, 10): if a < 10: print('a的值为:', a) a += 1 else: break 输出都为: a的值为: 5 a的值为: 6 a的值为: 7 a的值为: 8 a的值为: 9 2,while循环 C++ #include <iostream> using namespace std; int main () { int a = 5; while( a...
- 下一篇
Python全栈工程师(面向对象)
ParisGabriel 每天坚持手写一天一篇 决定坚持几年 为了梦想为了信仰 开局一张图 Python人工智能从入门到精通 day16补充: 异常处理 文件操作综合练习示例 src_filename = input("请输入源文件路径名: ") dst_filename = input('请输入目标文件路径名: ') try: src = open(src_filename, 'rb') # 打开源文件用来读数据 try: try: dst = open(dst_filename, 'wb') # 打开目标文件用来写 try: while True: b = src.read(4096) # 4096当前Linux系统内核字节大小 if not b: # 已经再也读不到数据了 break dst.write(b) # 写字节到文件 print("复制成功") finally: dst.close() # 必须关闭文件 except OSError: print("打开写文件失败") finally: src.close() # 必须关闭文件 except OSE...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,CentOS7官方镜像安装Oracle11G
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2全家桶,快速入门学习开发网站教程
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- MySQL8.0.19开启GTID主从同步CentOS8
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池