java finalize方法总结、GC执行finalize的过程

2023-11-04

注:本文的目的并不是鼓励使用finalize方法,而是大致理清其作用、问题以及GC执行finalize的过程。

1. finalize的作用

  • finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。
  • finalize()与C++中的析构函数不是对应的。C++中的析构函数调用的时机是确定的(对象离开作用域或delete掉),但Java中的finalize的调用具有不确定性
  • 建议用finalize方法完成“内存资源”的清理工作,但建议用于:① 清理本地对象(通过JNI创建的对象);② 作为确保某些非内存资源(如Socket、文件等)释放的一个补充:在finalize方法中显式调用其他资源释放方法。其原因可见下文[finalize的问题]

2. finalize的问题

  • 一些与finalize相关的方法,由于一些致命的缺陷,已经被废弃了,如System.runFinalizersOnExit()方法、Runtime.runFinalizersOnExit()方法
  • System.gc()与System.runFinalization()方法增加了finalize方法执行的机会,但不可盲目依赖它们
  • Java语言规范并不保证finalize方法会被及时地执行、而且根本不会保证它们会被执行
  • finalize方法可能会带来性能问题。因为JVM通常在单独的低优先级线程中完成finalize的执行
  • 对象再生问题:finalize方法中,可将待回收对象赋值给GC Roots可达的对象引用,从而达到对象再
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java finalize方法总结、GC执行finalize的过程 的相关文章

  • Java - 红、绿、蓝获取RGB

    通过致电getRGB int x int y with a BufferedImage对象 得到一个负数 如何将三个不同的值 红色 绿色和蓝色 转换为这个单个负数 使用颜色类 new Color r g b getRGB
  • 按位运算符简单地翻转整数中的所有位?

    我必须翻转整数的二进制表示形式中的所有位 鉴于 10101 输出应该是 01010 当与整数一起使用时 完成此操作的按位运算符是什么 例如 如果我正在编写类似的方法int flipBits int n 什么会进入身体 我只需要翻转数字中已经
  • 如果主引用指向 null,WeakReference 或 SoftReference 有何不同

    我正在读关于WeakReference https docs oracle com javase 10 docs api java lang ref WeakReference html and SoftReference https do
  • 我应该使用 JDBC getNString() 而不是 getString() 吗?

    我们正在构建一个由 Oracle 数据库支持的 Java 应用程序 我们使用 JDBC 驱动程序 访问该数据库ojdbc6 jar and orai18n jar 数据库模式主要使用以下方式存储文本列NVARCHAR2数据类型 The JD
  • 为什么这个动作不抽象? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我很难理解为什么一个类中的一个操作是抽象的 而另一个类中的操作不是 源代码1 编译时出错 https gyazo com cd3c
  • 如何添加 Java 正则表达式实现中缺少的功能?

    我是 Java 新手 作为一名 Net 开发人员 我非常习惯Regex Net 中的类 Java 实现Regex 正则表达式 还不错 但它缺少一些关键功能 我想为 Java 创建自己的帮助器类 但我想也许已经有一个可用的了 那么 是否有任何
  • 如何修复maven错误JAVA_HOME环境变量未正确定义

    当我在虚拟环境中检查maven的版本时 出现以下错误 The JAVA HOME environment variable is not defined correctly This environment variable is need
  • 欧拉项目 45

    我还不是一名熟练的程序员 但我认为这是一个有趣的问题 我想我应该尝试一下 三角形 五边形 六边形 数字由以下生成 公式 三角形 T n n n 1 2 1 3 6 10 15 五边形 P n n 3n 1 2 1 5 12 22 35 六角
  • 使用java在网页中进行字符编码

    如何使用java找出网页中的字符编码类型 打开与 URL 的连接 使用URL openConnection http download oracle com javase 6 docs api java net URL html openC
  • java数学中的组合“N选择R”?

    java库中是否有内置方法可以为任何N R计算 N选择R 公式 实际上很容易计算N choose K甚至不需要计算阶乘 我们知道 公式为 N choose K is N N K K 因此 公式为 N choose K 1 is N N N
  • 单元测试、集成测试还是设计中的问题?

    我编写了我的第一个单元测试 我认为它过于依赖其他模块 我不确定是否是因为 这是一个复杂的测试 我实际上已经编写了集成测试或 我的设计有问题 我首先要说的是 虽然我有大约 4 年的开发经验 但我从未学过 也没有人教过自动化测试 我刚刚使用 H
  • java中的第三个布尔状态是什么?

    虽然我知道根据定义 布尔值仅包含两种状态 真或假 我想知道布尔值在用这些状态之一初始化之前有什么值 它默认为 false http java sun com docs books tutorial java nutsandbolts dat
  • 用于安装 R 软件包的备用编译器:clang:错误:不支持的选项“-fopenmp”

    我正在尝试在 OS X 10 11 6 上使用 R 版本 3 4 0 安装 rJava 包 install packages rJava type source 我收到以下错误 clang o libjri jnilib Rengine o
  • 在片段之间切换时底部导航栏会向下推

    在我的活动中 我有一个底部导航栏和框架布局来显示片段 一切正常 但问题是当我开始按顺序从 1 4 移动时 底部导航栏保持在其位置 但当我突然从 4 跳到2 然后底部导航栏就会超出屏幕 当再次单击同一项目时 它就会回到正常位置 该视频将清楚地
  • 使用 Commons 或 Guava 将文本文件转换为 Java Set

    我想将文件中的每一行加载到 HashSet 集合中 有没有一种简单的方法可以做到这一点 怎么样 Sets newHashSet Files readLines file charSet 使用番石榴 参考 文件 readLines http
  • Javac 版本 1.7 无法为目标 1.7 构建

    我试图在 Linux Mint 系统上使用 Sun Java JDK 1 7 0 17 编译 Java 代码 但遇到了这个问题 javac version target 1 7 javac 1 7 0 17 javac invalid ta
  • 在java中创建一个XML树并将其转换为json对象

    我尝试创建也能够转换为 json 的树 但对于只有一个xpath 当我尝试实现多个 xpath 时 我无法获得所需的输出 这里我分享一下我的实现 private static Document addElemtbypath List
  • 乔达时间中两个日期之间的天数

    如何找到两次之间的天数差异乔达时间 http www joda org joda time DateTime http www joda org joda time apidocs org joda time DateTime html实例
  • 膨胀类 android.support.design.widget.CoordinatorLayoute 时出错

    我正在尝试运行我的应用程序 但不断收到标题中列出的错误 我读过周围的内容 人们说尝试将主题更改为 AppCombat 主题 但这似乎不起作用 以下是我遇到的错误 Process com example jmeyer27 crazytiles
  • Swing:创建可拖动组件...?

    我在网上搜索了可拖动 Swing 组件的示例 但我发现示例不完整或不起作用 我需要的是一个摇摆组件那可以是dragged通过鼠标 在另一个组件内 被拖拽的时候 应该已经 改变它的位置 而不仅仅是 跳 到目的地 我很欣赏无需非标准 API 即

随机推荐

  • PyQt5-多线程的使用

    PyQt中的多线程 它能实现多任务 让界面用一个线程更新 让逻辑代码在另外一个线程中 互不影响 如果不使用多线程的话 在运行一个时间较长的代码时 程序会卡住 使用多线程 import sys import time from PyQt5 i
  • Linux中使用Docker安装ElasticSearch7.10.x集群

    使用Docker安装ElasticSearch7 10 x单节点请访问这里 一 集群环境说明 服务器IP地址 192 168 137 1 192 168 137 2 192 168 137 3 二 前期准备 1 拉取镜像 docker pu
  • linux下percona-toolkit工具包的安装和使用(超详细版)

    一 检查和安装与Perl相关的模块 PT工具是使用Perl语言编写和执行的 所以需要系统中有Perl环境 依赖包检查命令为 rpm qa perl DBI perl DBD MySQL perl Time HiRes perl IO Soc
  • 【Python】只需2行代码,轻松将PDF转换成Word(含示范案例)

    文章目录 一 前期准备 二 pdf2docx功能 三 限制 四 案例 一 前期准备 可将 PDF 转换成 docx 文件的 Python 库 该项目通过 PyMuPDF 库提取 PDF 文件中的数据 然后采用 python docx 库解析
  • 来自对Socket的深度剖析

    Socket是什么 socket 的中文解释为 插座 非常的生动形象 在计算机通信领域 socket 被翻译为 套接字 它是计算机之间进行通信的一种约定或一种方式 通过 socket 一台计算机可以接收其他计算机的数据 也可以向其他计算机发
  • 【技巧】easyUI的datagrid,如何在翻页以后仍能记录被选中的行

    easyUI的datagrid在复选框多选时 如何在翻页以后仍能记录被选中的行 注意datagrid中需要配置idField属性 一般为数据的主键 转载于 https www cnblogs com yx007 p 8081522 html
  • 接口测试面试题含答案

    1 解释一下正向和逆向测试 正向测试 针对接口设计预期的功能和行为 验证接口是否按照预期工作 逆向测试 针对错误输入 不合理的条件或非预期的使用方式 验证接口是否能够适当地处理这些情况并提供合理的错误处理 2 什么是API和Web服务 AP
  • 支持CUDA运算的显卡算力表

    GPUs supported Supported CUDA level of GPU and card CUDA SDK 1 0 support for compute capability 1 0 1 1 Tesla CUDA SDK 1
  • c++17 using继承所有构造函数

    include tmp h include
  • 三维坐标系怎么画?

    在中学时代主要接触的是二维平面坐标需系 但是在学习空间几何图形时 会需要用到三维坐标系 这就需要我们也要掌握其绘制方法 在黑板上画三维坐标系有点困难 所以要借助专业的绘图工具来完成 下面就一起来学习具体绘制技巧 几何画板作为专业的几何绘图软
  • 智能手机普及游戏 国内外巨头上演GPU芯片争霸

    转自 http tech sina com cn t 2014 02 12 16139155996 shtml 新浪科技讯 2月12日下午消息 随着近日国家解除游戏机禁令以及游戏向手机终端转移 国内外移动通信芯片厂商高通 75 62 0 9
  • umi-request设置请求头_scrapy_splash 设置随机请求头

    本文为 霾大 scrapy splash 爬取 js 加载网页初体验 zhuanlan zhihu com 的补充 在上面的文章中我们仅仅是初步完成了 scrapy splash 的简单使用 接下来我们将介绍如何是使得 splash 在 r
  • 时间序列模型(二):AR模型

    全文共8000余字 预计阅读时间约18 30分钟 满满干货 建议收藏 介绍 在时间序列分析中 我们经常遇到一种强大而灵活的模型 即ARIMA模型 这个模型已经在各种领域 如经济学 气候学 股票市场分析等 发挥了巨大的作用 尽管ARIMA模型
  • 掌握react,这一篇就够了

    react众所周知的前端3大主流框架之一 由于出色的性能 完善的周边设施风头一时无两 本文就带大家一起掌握react jsx语法 前端MVVM主流框架都有一套自己的模板处理方法 react则使用它独特的jsx语法 在组件中插入html类似的
  • vue 的指令

    目录 一 vue 的指令 1 v text 2 v html 3 v show 4 v if v esle if v else 1 v if 2 v if 与 v show 5 v for 1 v for 渲染一个数组 2 v for 渲染
  • node-sass安装后,启动本地环境爆出,Error: Node Sass does not yet support your current environment: Windows 64-bit

    最近有个很老的项目各种依赖库都很老 在本地环境中出现 Error Node Sass does not yet support your current environment Windows 64 bit with Unsupported
  • springboot运行出现 错误: 找不到或无法加载主类 com.xxxx.xxxx.Application

    项目打成jar包放在服务器上之后就未在使用 今天打开一运行居然报错 错误 找不到或无法加载主类 com fdway omui OmUiApplication 解决办法 1 项目 右键 Debug As 或 Run As Maven inst
  • 一些有趣的 js 功能函数

    一些有趣的 js 功能函数 数组 生成数组 打乱数组 数组简单数据去重 数组唯一值数据去重 多数组取交集 查找最大值索引 查找最小值索引 找到最接近的数值 压缩多个数组 拉链函数 矩阵交换行和列 数字转换 进制转换 正则 手机号格式化 去除
  • Docx:docx.opc.exceptions.PackageNotFoundError: Package not found at

    Docx docx opc exceptions PackageNotFoundError Package not found at https blog csdn net python reported article details 1
  • java finalize方法总结、GC执行finalize的过程

    注 本文的目的并不是鼓励使用finalize方法 而是大致理清其作用 问题以及GC执行finalize的过程 1 finalize的作用 finalize 是Object的protected方法 子类可以覆盖该方法以实现资源清理工作 GC在