关注对象的new
对象创建得不好,会引发OOM,和常见的代码难维护问题。
优先通过静态方法替换构造器
通过静态方法而不是构造器的优势
Maps.newHashMap(); public static <K, V> HashMap<K, V> newHashMap() { return new HashMap<K, V>(); }
1:有方法名可以用来区分场景(valueof,of,getInstance,newInstance,getXXX,newXXX)
2:帮助复用对象(valueof,of)和单例(getInstance)
3:通过声明接口可以返回任意实现类
4:减少多余的范型声明
劣势
1:静态方法往往配合私有构造器,导致类本身无法extends
2:调用的时候没有语法支持,无法快速识别这是一个构造方法
Builder
当有多个构造器的常见的时候,用Builder模式。
public class Person { private final String name; private final int age; private Person(Builder builder) { this.name = builder.name; this.age = builder.age; } public static class Builder{ private String name; private int age; public Builder(String name){ this.name=name; } public Builder age(int age){ this.age = age; return this; } public Person build(){ return new Person(this); } } }
复用对象
1:可以“string”的时候,不要new String(“string”)
2:对象是不可变是,能不new 的尽量共同同一个。参考数据库连接池
3:能long的时候,不要用Long,避免触发装箱拆箱产生多余消耗
4:当对象是pojo是,不要为了复用反复拷贝。
对象无用的时候,记得消除对象的引用
array[i] = null;可以让gc有效
单例的创建
1:final static instance配合private 构造函数{throw new Runtime();}
2:单个的枚举本身
3:扩展的provider 模式,如guice ,spring,guava等包装过的单例

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
纯Python实现鸢尾属植物数据集神经网络模型
尝试使用过各大公司推出的植物识别APP吗?比如微软识花、花伴侣等这些APP。当你看到一朵不知道学名的花时,只需要打开植物识别APP,拍摄一张你所想辨认的植物照片并上传,APP会自动识别出该花的品种及详细介绍,感觉手机中装了一个知识渊博的生物学家,是不是很神奇?其实,背后的原理很简单,是一个图像分类的过程,将上传的图像与手机中预存的数据集或联网数据进行匹配,将其分类到对应的类别即可。随着深度学习方法的应用,图像分类的精度越来越高,在部分数据集上已经超越了人眼的能力。 相对于传统神经网络的方法而言,深度学习方法一般对数据集规模、硬件平台有着比较高的要求,如果只是单纯的想尝试了解图像分类任务的基本流程,建议采用小数据集样本及传统的神经网络方法实现。本文将带领读者采用鸢尾属植物数据集(Iris Data Set)
- 下一篇
从面试到技术提升(Java篇-上卷)
背景 其实,这系列文章我构思了很久。从我大概2016年初断断续续在CSDN上写博客开始,我就想好好整理一篇Android的综合文章。奈何那个时候功力尚浅,没办法驾驭(虽然现在依然彩笔一支)。 时至今日,算是正式开始动笔,其实之前想过很多文章计划,比如2018年开年的周期计划。不过写了8篇便放弃了。今天借着正正经经写公众号(IT面试填坑小分队)的机会,把这个《地表有点强》系列坚持下去,加油! OK,闲话不说。先从Java开始~ 《Java篇-上卷》 1、new一个类会发生什么? Model model= new Model () JVM会通过双亲委派机制将Model .class加载到内存中。 执行类里的静态代码块(如果有的话)。 在堆内存中申请内存空间,并分配内存地址给我们真正的Model对象。 在堆/栈内存里建立对象的属性(基本类型在栈中,引用类型和数组在堆中),并进行初始化赋值。 开始对象的构造代码块初始化(如果有的话)。 调用对象对应的构造方法进行初始化。 将对象的被分配的内存地址赋值给model变量。 概念性的描述: 加载:首相将类的全部信息加载到JVM的方法区中,然后在堆区中...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Hadoop3单机部署,实现最简伪集群
- MySQL8.0.19开启GTID主从同步CentOS8