首页 > 其他分享 >对象的使用与销毁

对象的使用与销毁

时间:2024-08-07 18:39:39浏览次数:11  
标签:销毁 对象 回收 垃圾 myObject 内存 使用 引用

对象的使用与销毁

对象的使用

  1. 创建对象:通过使用new关键字和类的构造器来创建对象。这会分配内存并调用构造器来初始化对象的状态。

    MyClass myObject = new MyClass();
    
  2. 访问对象:通过对象的引用变量来访问对象的属性和方法。

    myObject.someMethod();
    int value = myObject.someProperty;
    
  3. 修改对象状态:通过调用对象的方法或直接访问其属性(如果它们是可访问的)来改变对象的状态。

    myObject.setState("new state");
    
  4. 对象交互:对象之间可以通过方法调用相互交互,传递消息和数据。

    myObject.doSomethingWith(otherObject);java
    
  5. 使用完毕:当对象不再需要时,应该释放与之关联的资源,尤其是那些非内存资源(如文件句柄、网络连接等)。

对象的销毁

  1. 引用释放:当一个对象的引用变量被设置为null或超出作用域时,该引用不再指向原先的对象。这使得垃圾收集器可以识别并回收该对象所占用的内存。

    myObject = null;
    
  2. 垃圾收集:Java和其他一些语言使用自动垃圾收集机制来回收不再被任何引用指向的对象所占用的内存。垃圾收集器会在适当的时候运行,但具体的时机是不确定的。

  3. 终结器(Finalizer):在Java中,可以为对象定义一个finalize()方法,该方法在垃圾收集器确定对象可被回收之前被调用。然而,依赖finalize()方法来释放资源是不可靠的,因为它的执行时机不确定,且从Java 9开始已被标记为过时。

  4. 显式资源管理:对于需要显式关闭或清理的资源,应该在不再使用时立即释放它们。Java的try-with-resources语句可以自动管理实现了AutoCloseableCloseable接口的资源。

    try (Resource resource = new Resource()) {
        // 使用资源
    } // 自动调用resource.close()释放资源
    
  5. 软引用、弱引用:在Java中,还可以使用软引用(SoftReference)和弱引用(WeakReference)来指向对象。这些引用允许垃圾收集器在内存不足时回收它们指向的对象,即使还有其他引用指向这些对象。

  6. 内存泄漏:如果不正确管理对象引用,可能会导致内存泄漏,即不再需要的对象无法被垃圾收集器回收。这通常是由于意外的引用保持活动状态造成的。

*GC垃圾回收器 (System.GC())

GC(Garbage Collection,垃圾回收)是自动内存管理的一种形式,它在许多现代编程语言中用来回收不再使用的对象所占用的内存。垃圾回收器的主要任务是识别和释放那些不再被程序引用的对象,从而防止内存泄漏和提高内存使用效率。

可以回收new的对象,不能回收系统资源

标签:销毁,对象,回收,垃圾,myObject,内存,使用,引用
From: https://www.cnblogs.com/jmy3/p/18347634

相关文章

  • 匿名对象
    匿名对象匿名对象(AnonymousObjects)是在创建时没有明确名称的对象。它们通常是通过直接调用构造函数来创建的,并且只用于调用一个方法或进行短暂的使用。在面向对象编程中,匿名对象常用于以下场景:临时使用:当需要一个对象来调用一个方法,但不需要长时间保留该对象的引用时。回调:在......
  • Python使用Memcached示例
    关注我,持续分享逻辑思维&管理思维&面试题;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;推荐专栏《10天学会使用asp.net编程AI大模型》,目前已完成所有内容。一顿烧烤不到的费用,让人能紧跟时代的浪潮。从普通网站,到公众号、小程序,再到AI大模型网站。干货满满。学成后可......
  • 使用Streamlit构建一个web模拟HTTP请求工具
    目录前言HTTP工具功能点:1.导入库: 2.设置页面配置:3.Markdown格式的说明文本:4.用户输入界面:5.发送请求按钮和逻辑:6.发送HTTP请求并计算请求细节:7.总结 前言    最初就是因为在微信看到一篇文章中,看到此http工具的制作因为觉得Streamlit有无限......
  • 【ES6】使用Set和Map进行全组合判断
    判断数据集是否为全组合关系例如下列表格,字段1包含(甲、乙)值,字段2包含(a、b)值,字段3包含(1、2、3)值,每种组合情况都可以在数据集的行记录中找到有且仅有的一条。字段1字段2字段3甲a1甲a2甲a3甲b1甲b2甲b3乙a1乙a2乙a3乙b1乙b2乙b3要求函数输入以下格式数据,输出布尔值。const......
  • 【QT】Qt中Websocket的使用
    一、WebSocket的定义        WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC6455,并由RFC7936补充规范。WebSocketAPI也被W3C定为标准。                WebSocket使得客户端和服务器之间的数据......
  • Java 基础 (面向对象高级 一)
    static static-static修饰成员变量static叫静态,可以修饰成员变量、成员方法。成员变量按照有无static修饰,分为两种:类变量:有static修饰,属于类在计算机里只有一份,会被类的全部对象共享。实例变量(对象的变量):无static修饰,属于每个对象的。 static-类变量应用场景 在开......
  • 网络钓鱼即服务平台 Greatness 使用量激增
    研究人员近期发现,使用Greatness网络钓鱼工具包针对Microsoft365用户,窃取用户登录凭据的恶意HTML附件活动正在激增。Greatness是一个网络钓鱼即服务平台,由被称为fisherstell的攻击者开发。该工具包自从2022年夏天以来一直保持活跃,能够为任何人提供通用的基础设施和......
  • DockerCompose中使用自定义网络的方式实现部署SpringBoot+Mysql+Redis
    场景Docker中Docker网络-理解Docker0与自定义网络的使用示例:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/140788458Docker中使用自定义网络方式实现Redis集群部署与测试流程:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/140797109上面介绍了D......
  • 使用ansible安装mongodb分片集群
    【说明】使用ansible安装一个分片集群,三台服务器,三个mongos,三个config,三个分片节点,每三个分片有三个副本(每个节点运行三个端口的mongod)  [mongo_servers]10.x.x.21ansible_user=rootansible_ssh_pass=xxxxxxxxcluster_role=mongo1......
  • 【一看就会】国内如何使用Overleaf?Overleaf如何升级标准版专业版?
    1.Overleaf介绍Overleaf是一个基于云的LaTeX编辑器,它允许用户在线编写、编译和查看LaTeX文档。它支持实时预览,版本控制,以及多人协作,非常适合学术写作、项目报告或任何需要高质量排版的工作。它最大优势是:在线编辑、多人共享overleaf分为免费版、标准版和专业版三个不......