抛弃无所谓的对象

简介: 抛弃无所谓的对象

虽然 GC 可以帮助我们很好的管理内存,并且高效的将用不到的对象清理出去,但是这并不意味着我们可以随意创建对象。尤其是在方法中创建很多局部引用对象很有可能会降低程序的性能。 GC 的执行时机与程序所分配的内存数量以及分配的频率有关系,如果总是分配内存就会给 GC 造成很大的压力,从而使得 GC 会运行的很频繁进而降低了程序的性能。一般来说我们会将实现了 IDisposable 接口的类型中的变量提升为成员变量,而非局部变量,并且在类中实现这个接口(这种多用于局部变量是引用类型,且出现在需要频繁运行的 routine 中)。此外,如果在程序中有很多地方都需要用到某个 引用类型 的实例的话,我们就可以将它设置为静态成员变量,这样只有在第一次调用它时才会将其创建出来,以后每次的调用都不会再创建它,直到没有任何地方使用到它后 GC 会将其回收。这种方法虽好,但是也存在一定的风险,有可能会导致对象在内存中呆的时间很久,还意味着开发人员无法释放非托管资源,因为开发人员并不能确定什么时候调用 Dispose 方法。


这里要单独提一下 string ,string 类型是不可变的,在我们创建完字符串后这个字符串就无法再修改,当我们利用 += 操作符对 string 类型的对象进行拼接并赋值的时候,其实执行的时创建对象并将原来的 string 对象的值以及要拼接的值作为一个整体赋值给新创建的对象,这样原先的 string 对象就变为了垃圾,看似这种没问题其实在进行大量字符串拼接的时候会严重影响到系统的性能。要解决这个问题我们有两种方式,一种是我曾今讲过的内插字符串来实现字符串拼接,另一种是利用 StringBuild 类,StringBuild 是一种可变的字符串它提供了针对字符串的修改机制。我们在开发中可以根据 StringBuild 的这个设计思路来设计我们的 build ,令开发人员可以分阶段的来创建不可变类型。


总结

本篇文章是比较简单的,但是是一个比较重要的内容,好多开发人员会在这个地方摔倒,爬起来后也不知道为什么摔倒。


目录
相关文章
|
8天前
|
存储 Java
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
这篇文章详细地介绍了Java对象的创建过程、内存布局、对象头的MarkWord、对象的定位方式以及对象的分配策略,并深入探讨了happens-before原则以确保多线程环境下的正确同步。
24 0
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
|
4月前
|
Java
揭秘Java多态:为何同一消息,对象们却各有“心思”?
【6月更文挑战第17天】Java中的多态性让不同对象对同一方法有独特响应。以动物园为例,抽象类`Animal`定义`makeSound()`,子类如`Tiger`, `Lion`, `Monkey`继承并重写该方法。通过`Animal`引用调用,实际执行子类实现,展示动态绑定的威力。多态提升代码灵活性,支持扩展而无需改动原有代码,体现面向对象的核心思想。
25 2
|
4月前
|
算法 Java
三⾊标记法若不被STW保护可能会导致对象丢失,⽩⾊对象被⿊⾊对象引⽤,灰⾊对象对⽩⾊对象的引⽤丢失(为什么需要这个条件),导致对象丢失。
三⾊标记法若不被STW保护可能会导致对象丢失,⽩⾊对象被⿊⾊对象引⽤,灰⾊对象对⽩⾊对象的引⽤丢失(为什么需要这个条件),导致对象丢失。
|
5月前
|
Java 程序员
揭秘编程世界的构造块:一文教你理解方法的本质与运用
揭秘编程世界的构造块:一文教你理解方法的本质与运用
32 0
|
5月前
this的含义,什么情况下使用this,改变this指针的两种办法。 === 由于this关键字很混乱,如何解决这个问题
this的含义,什么情况下使用this,改变this指针的两种办法。 === 由于this关键字很混乱,如何解决这个问题
40 0
|
存储 编译器 C++
c++ 有趣的动态转换之 delete 崩溃探究兼谈基类虚析构的重要性
c++ 有趣的动态转换之 delete 崩溃探究兼谈基类虚析构的重要性
|
数据可视化 Java Python
join()方法的神奇用处与Intern机制的软肋
照例先总结下本文内容:(1)join() 方法除了在拼接字符串时速度较快,它还是目前看来最通用有效的复制字符串的方法 (2)Intern 机制(字符串滞留)并非万能的,本文探索一下它的软肋有哪些
156 0
join()方法的神奇用处与Intern机制的软肋
|
设计模式 消息中间件 JavaScript
代码越写越乱?那是因为你没用责任链
代码越写越乱?那是因为你没用责任链
代码越写越乱?那是因为你没用责任链
|
缓存 小程序 Java
Java包装类、方法传参机制都有什么值得注意的?来自《卷Ⅰ》的灵魂提问(二)
Java包装类、方法传参机制都有什么值得注意的?来自《卷Ⅰ》的灵魂提问(二)
143 0
Java包装类、方法传参机制都有什么值得注意的?来自《卷Ⅰ》的灵魂提问(二)
|
缓存 Java 编译器
Java包装类、方法传参机制都有什么值得注意的?来自《卷Ⅰ》的灵魂提问(一)
Java包装类、方法传参机制都有什么值得注意的?来自《卷Ⅰ》的灵魂提问(一)
196 0
Java包装类、方法传参机制都有什么值得注意的?来自《卷Ⅰ》的灵魂提问(一)