java gc 次数_浅谈如何减少GC的次数

2023-11-15

GC会stop the world。会暂停程序的执行,带来延迟的代价。所以在开发中,我们不希望GC的次数过多。

本文将讨论如何在开发中改善各种细节,从而减少GC的次数。

(1)对象不用时最好显式置为 Null

一般而言,为 Null 的对象都会被作为垃圾处理,所以将不用的对象显式地设

为 Null,有利于 GC 收集器判定垃圾,从而提高了 GC 的效率。

(2)尽量少用 System.gc()

此函数建议 JVM进行主 GC,虽然只是建议而非一定,但很多情况下它会触发

主 GC,从而增加主 GC 的频率,也即增加了间歇性停顿的次数。

(3)尽量少用静态变量

静态变量属于全局变量,不会被 GC 回收,它们会一直占用内存。

(4)尽量使用 StringBuffer,而不用 String 来累加字符串

由于 String 是固定长的字符串对象,累加 String 对象时,并非在一个 String对象中扩增,而是重新创建新的 String 对象,如 Str5=Str1+Str2+Str3+Str4,这条语句执行过程中会产生多个垃圾对象,因为对次作“+”操作时都必须创建新的 String 对象,但这些过渡对象对系统来说是没有实际意义的,只会增加更多的垃圾。 避免这种情况可以改用 StringBuffer 来累加字符串,因 StringBuffer是可变长的,它在原有基础上进行扩增,不会产生中间对象

(5)分散对象创建或删除的时间

集中在短时间内大量创建新对象,特别是大对象,会导致突然需要大量内存,JVM 在面临这种情况时,只能进行主 GC,以回收内存或整合内存碎片,从而增加主 GC 的频率。

集中删除对象,道理也是一样的。 它使得突然出现了大量的垃圾对象,空闲空间必然减少,从而大大增加了下一次创建新对象时强制主 GC 的机会。

(6) 尽量少用 finalize 函数

因为它会加大 GC 的工作量, 因此尽量少用finalize 方式回收资源。

(7) 使用软引用类型

如果需要使用经常用到的图片, 可以使用软引用类型, 它可以尽可能将图片保存在内存中, 供程序调用, 而不引起 OutOfMemory。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java gc 次数_浅谈如何减少GC的次数 的相关文章

  • Maya删除被锁定的节点

    问题描述 在Maya中如果节点被锁定 则无法被修改或删除 这种情况下需要通过Maya的命令对节点的状态进行修改 解决方法 首先选中被锁定的节点 然后在Python脚本编辑器中执行以下的代码 import maya cmds as mc li
  • 运用@Transactional,自己抛出异常时不会回滚的原因

    近日测试用例 发现这样一个现象 在业务代码中 有如下两种情况 比如 throw new RuntimeException xxxxxxxxxxxx 事务回滚 throw new Exception xxxxxxxxxxxx 事务没有回滚 自
  • 中缀表达式转后缀表达式C语言实现

    解决思路 依次扫描字符串元素 遇到左括号 直接入栈 遇到数字 输出当前数字 遇到乘除符号 除非栈顶遇到为 外进栈 否则遇到栈顶为 时 栈顶出栈 遇到加减符号 除非栈顶遇到 否则栈顶出栈 遇到右括号 除非栈顶遇到 否则栈顶出栈 遍历完后 弹出
  • 中文汉字 hex十六进制 互转

    工具地址 http stool chinaz com hex
  • 关于STM32调试器CMSIS_DAP的使用及注意事项

    说明 最近在淘宝上买了一个STM32F4x1系列的最小系统板 提供CMSIS DAP固件 进群领取固件 秒变CMSIS DAP调试器 技术交流QQ群 970663546 售后QQ群 1055686596 凭订单号进入 1 关于KEIL设置
  • 2021-07-26 WSL2 的安装和联网

    0 说明 最近在学习 Data Assimilation Research Testbed DART 相关内容 其软件是在 Unix Linux 操作系统下编译和运行的 由于我的电脑是 Windows 10 的 DART 推荐可以使用 Wi
  • go搭建服务器基础

    goweb应用工作原理 用于个人学习 客户端发送请求给多路复用器 多路复用器根据请求 gt 处理器处理器 gt 模型 gt 数据库 数据库找到相应的数据反馈给模型 模型将数据封装发给处理器 处理器给模板引擎然后生成模板 go里面有相应的ht
  • CUDA安装及环境配置——最新详细版

    确定安装版本 在安装之前呢 我们需要确定三件事 第一 查看显卡支持的最高CUDA的版本 以便下载对应的CUDA安装包 第二 查看对应CUDA对应的VS版本 以便下载并安装对应的VS版本 vs需要先安装 第三 确定CUDA版本对应的cuDNN
  • Forrester研究报告:Information Fabric——企业数据虚拟化(Part I、摘要翻译)

    Information Fabric 企业数据虚拟化Forrester研究报告EXECUTIVE SUMMARY总览Enterprises are facing the growing challenges of using dispara
  • 计算宽度_如何通过紫外可见漫反射光谱计算带隙/禁带宽度(图的绘制:tauc plot&KM法)...

    微信公众号试行乱序推送 为了不错过更新 请点击本页面最上方的 结构分析表征 进入公众号主页 点击右上角的三个小点点 在弹出的界面点击 设为星标 并在看完图文或视频后点击右下角的 在看 和 赞 本公众号以各类仪器的测试 分析教程 欢迎关注同名
  • 安装Windows时提示Windows无法安装到这个磁盘

    出现这种情况一般是因为安装程序的启动模式与目标磁盘的格式不一致导致 比如用UEFI启动时 目标安装盘是mbr 或用 Legacy启动时 目标安装磁盘是GPT分区 出现这种情况时 按shift F10可以打开命令提示符窗口 输入diskpar
  • ProFrom套EditableProTable如何进行表单验证

    import React useRef from react import Button from antd import BetaSchemaForm DrawerForm ProCard from ant design pro comp
  • 解决win10中无法打开CHM文件的方法

    CHM文件是非常常见的帮助文件格式 由于其便携性 很多语言的API会采用chm格式 win7 win8 1 win10系统 由于采用了UAC 致使原本在xp里浏览正常的chm文件出现空白而无法正常显示 解决方法 右键选择需要打开的文件 选择
  • SpringBoot中运行测试:java.lang.NullPointerException

    问题展示 SpringBoot中运行测试类报 java lang NullPointerException 问题描述 提示 这里描述项目中遇到的问题 在SpingBoot中当我们在它原有的测试基类BaseSpringBootTest jav
  • 7年经验之谈 —— 如何高效的开展app的性能测试?

    APP性能测试是什么 从网上查了一下 貌似也没什么特别的定义 我这边根据自己的经验给出一个自己的定义 如有巧合纯属雷同 客户端性能测试就是 从业务和用户的角度出发 设计合理且有效的性能测试场景 制定各性能场景下的客户端性能指标 内存 CPU
  • 微信小程序服务器域名怎么填,微信小程序合法域名配置方法

    在微信小程序的开发过程中 当需要请求第三方网站数据时 各种教程就直接说调用wx request接口即可 但是当初学者自己用的时候就会出现问题 比如我们这里请求聚合数据的API 里边有不少免费的数据申请就可以使用 调用邮编查询的接口 getP
  • Mybatis嵌套查询与嵌套结果

    一对多关系 一是用户 多是订单 实体类User public class User private Integer id private String name private Integer age private List
  • 后台获取前端提交数据的GET、POST方法遇到的问题

    在写代码的时候 总发现前端数据获取不到 最后发现了问题是因为get和post要一起出现 缺一不可 protected void doGet HttpServletRequest request HttpServletResponse res

随机推荐

  • JavaWeb之添加数据,显示到页面

    需求 从jsp页面添加一条记录到数据库 且显示到界面 分析 创建jsp页面 创建EmailServlet gt addEmail方法 设置请求编码 获取所有parameter的值 封装对象 调用addEmail方法 重定向到email sh
  • 游戏开发unity杂项知识系列:SetActive使用注意

    static public void SetActive GameObject go bool state if go null return if go activeSelf state go SetActive state 项目中类似上
  • JSP语法:setProperty

    JSP语法 13 setProperty 时间 2009 03 21 20 37 来源 作者 CSDN IE QQ 百度 Google POCO 新浪 365Key 天极 和讯 博拉 Live 奇客 收客 饭否 叽歪
  • 互联网未来发展方向

    都知道马云带来了互联网以及互联网的高潮 随着国家推动一带一路经济带 以及国内互联网大局的发展 很明显未来是互联网的天下 而互联网将来会怎样哪 第一 网购或者终端购物成为主流 随着经济发展 社会文明进步 智能制造 智能社会越来越凸显 智能手机
  • Python和C语言哪个难?零基础学哪个好?

    Python和C语言哪个难 零基础学哪个好 Python上手简单有交互性强的开发环境 还有众多的第三方库 学习起来会比C C 容易的多 C过于底层强在内存操作 功能实现起来却十分复杂并不适合新手作为上手语言 Python和C语言各有各的优势
  • Elastic Search 学习笔记

    来自尚硅谷 ES 教程 背景知识 从MySQL 到 ES 这一小节是我的一点点理解 如果有不对的话 欢迎指正 ES 是一个开源的高扩展的分布式全文搜索引擎 这样讲似乎还是有点抽象 那我们用一个更加熟悉的东西 MySQL来辅助理解 既然是搜索
  • 程序员技术面常用知识点

    转自 http blog csdn net qq 15437629 article details 52388685 在这里只做备份 计算机网络 TCP IP 模型 TCP IP协议集的分层实施 为什么要给网络划分层次 1 各层之间相对独立
  • 接口(interface)的实现

    接口 interface 的实现 usb插槽就相当于现实中的接口 其实现实生活和编程相对应的 即程序就是事件 1 java中的接口是怎么实现的呢 接口就是给出一些没有实现的方法 到了某个类要使用的时候就去实现他 语法 interface 接
  • Python多层字典取值

    usr bin python coding utf 8 author Bingo he file get target value py time 2017 12 22 def get target value key dic tmp li
  • 对于vue项目整理增删改查

    模板是来源于官方文档 清除tabledata里的模拟数据先
  • Pytorch相关操作(2)

    PyTroch相关操作 1 21 torch cuda Event 记录GPU的运行时间 start torch cuda Event enable timing True end torch cuda Event enable timin
  • Android Handler 的基本使用

    1 前言 https developer android google cn reference android os Handler html Handler 是 Android 中线程通信的常用方式 文档如是说 A Handler al
  • 【从零开始学c++】——string

    学好STL 一 STL简介 了解 1 什么是STL 2 STL的六大组件 3 STL的缺陷 2 string 1 string的简单了解 如何对stl的查阅 2 string常用接口说明 1 string类 对象常见的构造 2 string
  • Kotlin入门学习(非常详细),从零基础入门到精通,看完这一篇就够了

    文章目录 kotlin的历史 Kotlin的工作原理 语言类型 编译型 解释型 Java的语言类型 Kotlin的运行原理 创建Kotlin项目 语法 变量 变量的声明 基本类型 var和val的本质区别 函数 函数的声明 声明技巧 函数的
  • 找准边界,吃定安全

    创新的资源管理算法 基于会话的全分布式处理流程 山石网科全分布式架构 打破了传统架构的限制 找准边界 吃定安全 往期文章 从访问控制谈起 再看零信任模型 威胁情报加持 泛边界下的全局主动防御体系如何着手 随着 2019 年我国以信息网络等新
  • 连 连 看

    1 案例介绍 连连看是一款曾经非常流行的小游戏 游戏规则 点击选中两个相同的方块 两个选中的方块之间连接线的折点不超过两个 接线由X轴和Y轴的平行线组成 每找出一对 它们就会自动消失 连线不能从尚未消失的图案上经过 把所有的图案全部消除即可
  • C/C++之01背包问题

    问题描述 给定N个物品 每个物品有一个重量W和一个价值V 你有一个能装M重量的背包 问怎么装使得所装价值最大 每个物品只有一个 输入格式 输入的第一行包含两个整数n m 分别表示物品的个数和背包能装重量 以后N行每行两个数Wi和Vi 表示物
  • <form>表单

    1 form表单
  • osgEarth的Rex引擎原理分析(三十六)为什么要删除设置过的垂直水准面

    目标 二十九 中的问题86 椭球体 水平面 应该不是删除 而是信息创建出一个没有垂直水准面的Profile 待继续分析列表 9 earth文件中都有哪些options 九 中问题 10 如何根据earth文件options创建不同的地理信息
  • java gc 次数_浅谈如何减少GC的次数

    GC会stop the world 会暂停程序的执行 带来延迟的代价 所以在开发中 我们不希望GC的次数过多 本文将讨论如何在开发中改善各种细节 从而减少GC的次数 1 对象不用时最好显式置为 Null 一般而言 为 Null 的对象都会被