java频繁new对象的优化方案
在实际开发中,某些情况下,我们可能需要频繁去创建一些对象(new),下面介绍一种,我从书上看到的,可以提高效率的方法。
首先,对于将会频繁创建的对象,我们要让这个类实现Cloneable接口,因为这个优化的核心,就是利用clone。
clone的最大特点就是,不会去调用任何构造方法,所以,在我看来重点应该放在构造方法中。
1.先写一个实体类:
在此实体类中写一个getInstance(),其中就是返回clone()。
import java.io.Serializable; /**
* @ClassName: 生产单ERP
* @author hanwl
* @Description: TODO
*/ public class ErpProduct implements Serializable,Cloneable{
private static final long serialVersionUID = 1L;
private static ErpProduct erpProduct = new ErpProduct(); private String topicNum;//选题号 选填
private String compName;//部件名 必填 (多个部件以 ','分隔 封面,正文)
private String printShop;//印厂名 必填
private String printUser; //分发人 必填
private String reback;//是否撤回 必填 0 默认分发 1撤回分发
private String printNum;//印数 (选填) public ErpProduct() {
super();
} /**
* 调用对象创建优化
*
* @return
*/
public static ErpProduct getInstance(){
try {
return (ErpProduct) erpProduct.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new ErpProduct();
} public String getTopicNum() {
return topicNum;
}
public void setTopicNum(String topicNum) {
this.topicNum = topicNum;
}
public String getCompName() {
return compName;
}
public void setCompName(String compName) {
this.compName = compName;
}
public String getPrintShop() {
return printShop;
}
public void setPrintShop(String printShop) {
this.printShop = printShop;
}
public String getPrintUser() {
return printUser;
}
public void setPrintUser(String printUser) {
this.printUser = printUser;
}
public String getPrintNum() {
return printNum;
}
public void setPrintNum(String printNum) {
this.printNum = printNum;
}
public String getReback() {
return reback;
}
public void setReback(String reback) {
this.reback = reback;
} }
2.在主方法中调用的时候直接getInstance()就可以。
public static void main(String[] args) {
long beginTime = System.currentTimeMillis();
for (int i = 0; i < 100; i++) {
ErpProduct.getInstance();
}
long endTime = System.currentTimeMillis();
System.out.println("采用clone的方法,一共花费的时间:" + (endTime - beginTime));
beginTime = System.currentTimeMillis();
for (int i = 0; i < 100; i++) {
new ErpProduct();
}
endTime = System.currentTimeMillis();
System.out.println("采用new的方法,一共花费的时间:" + (endTime - beginTime));
}
当一个类存在继承关系时,你创建一个子类的对象时,如果在没有明确指定的情况下,子类是会隐式的去调用父类的无参构造的。假设,我们需要频繁创建的对象,是一个继承关系比较深的类的话,调用构造函数的开销不容小窥。
如果一时间内,频繁创建某对象时,这些平时不显眼的消耗一叠加起来,就变得很客观了。但是,当我们使用clone的话,就可以避免这个问题。
java频繁new对象的优化方案的更多相关文章
- Java网络编程-对象编解码方案、优劣对照
书籍推荐: 实例代码 :http://download.csdn.net/detail/jiangtao_st/7677503 watermark/2/text/aHR0cDovL2Jsb2cuY ...
- 【性能优化】面试官:Java中的对象都是在堆上分配的吗?
写在前面 从开始学习Java的时候,我们就接触了这样一种观点:Java中的对象是在堆上创建的,对象的引用是放在栈里的,那这个观点就真的是正确的吗?如果是正确的,那么,面试官为啥会问:"Jav ...
- java、JavaScript获取微信用户信息登录优化方案
1.获取微信用户信息要调用微信的好几个接口,再加上自己系统的接口就会变的很慢,影响用户体验,之前走过的弯路我就不赘述了,直接说新的方案. 2.第一步都是向微信发起获取用户code请求: 请求接口:ht ...
- Adapter优化方案的探索
概要:使用Adapter的注意事项与优化方案本文的例子都可以在结尾处的示例代码连接中看到并下载,如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以提交pull request. ...
- 优秀后端架构师必会知识:史上最全MySQL大表优化方案总结
本文原作者“ manong”,原创发表于segmentfault,原文链接:segmentfault.com/a/1190000006158186 1.引言 MySQL作为开源技术的代表作之一,是 ...
- MySQL 大表优化方案(长文)
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...
- [转帖] 数据库用优化方案 https://segmentfault.com/a/1190000006158186
Mysql大表优化方案 当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部 ...
- 数据库SQL优化百万级数据库优化方案
1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- Android RecyclerView使用 及 滑动时加载图片优化方案
1.控制线程数量 + 数据分页加载2.重写onScrollStateChanged方法 这个我们后面再谈,下面先来看看RecyclerView控件的使用及我们为什么选择使用它 RecyclerView ...
随机推荐
- Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成) 动态表单生成 ElementUI官网引导 Element表单生成 Element动态增减表单,在线代码 关键配置 templa ...
- SQLServer修改登陆账户信息
修改登陆账户信息注意事项 如果 CHECK_POLICY设置为ON,则无法使用 HASHED参数. 如果 CHECK_POLICY更改为ON,则将出现以下行为: 用当前的密码哈希值初始化密码历史记录. ...
- sql 按年月日统计
1.每年select year(ordertime) 年,sum(Total) 销售合计from 订单表group by year(ordertime) 2.每月select year(orderti ...
- 015_python原生在线调试工具
一.pdb https://docs.python.org/3/library/pdb.html
- 014_zk路径过滤分析
一.线上zk访问延迟特别高需要统计一段时间内的zk写入路径top10,实现如下: #!/usr/bin/env python # -*- coding:utf-8 -*- import re,trac ...
- 面试中被问Spring循环依赖的三种方式!!!
什么是循环依赖? 循环依赖其实就是循环引用,也就是两个或则两个以上的 Bean 互相持有对方,最终形成闭环.比如A依赖于B,B依赖于C,C又依赖于A.如下图: 如果在日常开发中我们用new 对象的方式 ...
- easyUI的常见属性
datagrid (数据表格) $("#tg").datagrid({url:"TaskList",//请求的地址fit: false, //当true时设置他 ...
- Ubutun 16.04添加操作命令审计
1.启用/var/log/messages,监控系统命令 说明:由于需要把操作命令记录到/var/log/messages,但是ubuntu默认并没有开启日志写入到这个文件 tchua@ubuntu: ...
- 开发工具之Vscode编辑器
Visual Studio Code(以下简称vscode)是一个轻量且强大的代码编辑器,支持Windows,OS X和Linux.内置JavaScript.TypeScript和Node.js支持, ...
- bzoj 2049: [Sdoi2008]Cave 洞穴勘测 (LCT)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2049 题面: 2049: [Sdoi2008]Cave 洞穴勘测 Time Limit: 1 ...