避免创建不必要的对象

这篇具有很好参考价值的文章主要介绍了避免创建不必要的对象。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、一般来说,最好能重用对象而不是每次需要的时候就创建一个功能相同的新对象

先看一个反例,如下所示:

String s = new String("No way");

该语句每次被执行都会创建一个新的String实例。传递给String构造器的参数"No way"本身就是一个String实例,功能方面等同于构造器创建的对象。如果被频繁调用,会创建成千上万不必要的String实例,加大开销。 

下面这是一个改进版本:

String s = "No way"; 

无须每次执行的时候都创建一个新的String实例,而且它可以保证,对于所有在同一台虚拟机中运行的代码,只要它们包含相同的字符串字面常量,该对象就会被重用。JVM中会有一个常量池,可以保存字符串常量,直接使用"No way"可以直接从常量池中返回对象,而不会重新创建新对象。

2、优先使用静态工厂方法而不是构造器 

特别说明:不可变类是指一旦一个类的对象被创建出来,在其整个生命周期中,它的成员变量就不能被修改。Java平台的类库中包含许多不可变的类,比如说String、基本类型的包装类(Integer)、BigInteger和BigDecimal。存在不可变的类有许多理由:不可变的类比可变的类更加容易设计、实现和使用,它们不容易出错,而且更加安全。

对于同时提供了静态工厂方法和构造器的不可变类,通常优先使用静态工厂方法而不是构造器,以避免创建不必要的对象。例如静态工厂方法Integer.valueOf(String)几乎总是优先于构造器Integer(String)。构造器在每次被调用的时候都会创建一个新的对象,而静态工厂方法则从来不要求这样做,实际上也不会这样做。文章来源地址https://www.toymoban.com/news/detail-722768.html

public class Demo {

    public static void main(String[] args) {
        // 使用带参构造器
        Integer a1 = new Integer("1");
        Integer a2 = new Integer("1");

        //使用valueOf()静态工厂方法
 

到了这里,关于避免创建不必要的对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式第九讲:常见重构技巧 - 去除不必要的!=

    项目中会存在大量判空代码,多么丑陋繁冗!如何避免这种情况?我们是否滥用了判空呢?本文是设计模式第九讲,讲解常见重构技巧:去除不必要的!= 通常是这样的 初步的,使用Apache Commons,Guvava,Hutool等 StringUtils 考虑用Assert断言 逐级判断空,还是抛出自定义异常,还是

    2024年02月11日
    浏览(43)
  • 在应用程序中发现不必要的 Http 响应头

      响应头中多了: Server: nginx/1.24.0   在服务器块下的nginx.conf中添加以下参数 保存nginx.conf文件, 然后重新启动Nginx以查看结果。

    2024年02月12日
    浏览(36)
  • 漏洞修复:在应用程序中发现不必要的 Http 响应头

    blablabla描述,一般是在返回的响应表头中出现了Server键值对,那我们要做的就是移除它,解决方案中提供了nginx的解决方案 第一种解决方案 当前解决方案会隐藏nginx的版本号,但还是会返回nginx字样,如果想再彻底点,参考第二种解决方案 or 第二种解决方案 当前方法需要安装

    2024年02月09日
    浏览(39)
  • nginx解决不必要的 Http 响应头漏洞(自定义server信息及隐藏版本号)

    1.自定义server信息 修改nginx解压目录下的/src/core/nginx.h文件     修改nginx解压目录下的/src/http/ngx_http_header_filter_module.c文件 修改 nginx解压目录下的/src/http/ngx_http_special_response.c文件  全部修改完成后,执行./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_sub_module --w

    2024年02月14日
    浏览(37)
  • idea提交代码到git或svn上时,怎么忽略.class、.iml文件和文件夹等不必要的文件

    在Setings– Editor -- File Types --Ignore files and folders中添加需要忽略的文件和文件夹: 注意事项: 千万不要忽略.class文件, 千万不要忽略.class文件, 千万不要忽略.class文件, 重要的事说三遍,因为如果把class文件也忽略的话,就会导致java自带的类大批量报错,如果要忽略class文

    2024年03月24日
    浏览(78)
  • 【Android】使用对象池(Object Pool)来缓存已经创建的字节数组,避免频繁地进行内存分配和回收操作提高性能

    在Android中,使用new byte[]创建字节数组是在堆上分配内存,不会直接导致Native内存的增长。但是,如果我们频繁地创建和销毁字节数组,就可能会导致堆内存不足,并触发GC,从而影响应用程序的性能。 在Android中,堆内存的大小是有限制的。如果我们频繁地创建和销毁字节数

    2024年02月09日
    浏览(52)
  • JAVA如何创建对象

    在 Java 中创建对象的步骤如下: 定义一个类 :在 Java 中,所有的对象都是通过类来创建的。因此,首先需要定义一个类,即描述对象的属性和行为。 声明变量 :要创建一个对象,需要先声明一个变量来保存对象的引用。变量的类型必须是类名称或其父类或接口类型。 使用

    2024年01月20日
    浏览(31)
  • java对象的创建过程

    一.类的加载与检查 当我们new了一个对象的时候,首先会去检查一下这个指令是否在常量池中存在符号引用,并且检查这个符号引用代表的对象是否被加载,解析初始化过,如果没有就要先去进行类加载过程 二.分配内存 我们通过第一步的检查后,就会在堆中划分出一块对象

    2024年02月06日
    浏览(37)
  • java对象创建的过程

    2024年02月11日
    浏览(35)
  • Java对象创建回收全过程

    目录 1 前言 2 Java对象创建 2.1  类加载检查 2.1.1 谁来加载 2.1.2 如何加载 2.2 分配内存 2.3 初始化零值 2.4 设置对象头 2.5 执行clinit 3 对象回收 4 补充Tomcat打破双亲委派机制 在讲java创建之前,我们先来了解下 Java虚拟机内存 组成,当Java虚拟机启动后,会将系统分配给JVM的空间逻

    2024年02月14日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包