【Android 的GC机制】

Android 的GC机制

主动触发GC:adb shell kill -10 pid

以下总结了几个思考的角度:

1. 角度1 ----》对象引用
强引用、软引用、弱引用、虚引用,java中对象的四种引用方式

  • 强引用 不回收
    只要某个对象有强引用与之关联,JVM必定不会回收这个对象。
    即使内存不足,JVM宁愿抛出OutOfMemory错误也不会回收这种对象
  • 软引用 内存不足回收
    用来描述一些有用但并不是必须的对象。
    对于软引用关联着的对象,只有在内存不足的时候JVM才会回收该对象。
  • 弱引用 有GC操作就回收
    弱引用是用来描述非必须的对象。
    当JVM进行垃圾回收时,无论内存是否充足,都会回收被弱引用关联的对象。
  • 虚引用 相当于没有引用
    不影响对象的生命周期。
    如果一个对象与虚引用关联,则跟没有引用与之关联一样。
    在任何时候都可能被垃圾回收器回收。

问题:如何通过工具查看,对象的引用情况?

2. 角度2 —》 常见GC
GC_OR_ALLOC 分配内存但堆内存不足时
新建的java对象,一般分配在 堆内存中(GC中的 free项)
当堆内存剩余空间不够新建该java对象时,触发此类GC

GC_EXPLICIT 显式GC(如主动调用System.gc()方法、一个线程被杀死、一个连接被停止 )
是唯一一种有用的可以人为控制触发时机的GC。
可在合适的时机(如用户无明显感知的时机)主动触发GC,以减少其他类型GC的出现次数

GC_CONCURRENT 堆对象数多导致的短时并发GC
并发GC,在应用程序继续运行的同时进行的,堆中的对象数量达到一定程度触发的垃圾回收。
一般时间较短,用户不会有明显感知。
但是出现的太频繁说明内存中对象数量增长太快

GC_EXTERNAL_ALLOC 堆以外的内存使用量达到一定阈值时
虚拟机尝试减少用于可回收对象的总的内存空间,为更多的不可回收对象挪地方

GC_HPROF_DUMP_HEAP 不关注
从DDMS打出某个进程堆信息时会触发此GC,正常系统不会自动触发,不需要关注

问题1:如何查看是否发生GC,以及发生的是什么GC?
答:打开GC日志,能看到GC的类型。操作变量为:kLogAllGCs

问题2:多次提到阈值,堆的阈值是多少,堆之外的呢?创建对象内存不足是分配失败吗?
adb shell getprop | grep dalvik.vm.heap

关注的阈值:

  • dalvik.vm.heapgrowthlimit
    应用堆最大可用内存值

  • dalvik.vm.heapmaxfree
    堆最大空闲内存
    当前dlmalloc管理的内存最多可以有的free memory

  • dalvik.vm.heapminfree
    堆最小空闲内存
    当前dlmalloc管理的内存最少需要的free memory

  • dalvik.vm.heapsize
    应用最大可用的堆内存。应用Manifest中配置android:largeHeap="true"时,最大堆内存大小就可使用dalvik.vm.heapsize的值

  • dalvik.vm.heapstartsize
    堆分配的初始值大小,这个值越小,系统内存消耗越慢,但是当应用扩展这个堆,导致 GC 和堆调整时,应用会变慢

  • dalvik.vm.heaptargetutilization
    内存的利用率。dlmalloc管理的内存的理想的使用率(malloc_size / cur_heap_size )
    每次GC之后会评估当前堆内存的大小是否是适合的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/483007.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web API基本认知

作用和分类 作用:就是使用JS去操作html和浏览器 分类:DOM(文档对象模型)、BOM(浏览器对象模型) 什么是DOM DOM(Document Object Model ——文档对象模型)是用来呈现以及与任意 HTM…

《Python基础》之Numpy库

目录 简介 一、创建数组 1、根据列表创建数组 2、创建全0数组 3、创建全1数组 4、创建单位矩阵 5、创建随机数数组 二、查看数组的属性 三、 数组的操作 1、索引和切片 2、变形 3、拼接 (1)、vstack() 纵向拼接 (2)、hs…

人工智能-卷积神经网络(学习向)

一.概述; 卷积神经网络(Convolutional Neural Network, CNN)是一种专门用于处理具有类似网格结构的数据(如图像)的深度学习模型。 主要用于处理机器视觉任务。 主要功能; 1.图像分类 2.目标检测 3.图像分割…

思维导图+实现一个登录窗口界面

QQ2024122-205851 import sys from PyQt6.QtGui import QIcon, QPixmap, QMovie from PyQt6.QtWidgets import QApplication, QWidget, QLineEdit, QPushButton, QLabel, QVBoxLayout# 封装我的窗口类 class LoginWidget(QWidget):# 构造函数def __init__(self):# 初始化父类su…

使用 Pytorch 构建 Vanilla GAN

文章目录 一、说明二、什么是 GAN?三、使用 PyTorch 的简单 GAN(完整解释的代码示例)3.1 配置变量3.2 、PyTorch 加速3.3 构建生成器3.4 构建鉴别器 四、准备数据集五、初始化函数六、前向和后向传递七、执行训练步骤八、结果 一、说明 使用…

Windows常用DOS指令(附案例)

文章目录 1.dir 查看当前目录2.cd 进入指定目录3.md 创建指定目录4.cd> 创建指定文件5.rd 删除指定空目录6.del 删除指定文件7.copy 复制文件8.xcopy 批量复制9.ren 改名10.type 在命令行空窗口打开文件11.cls 清空DOS命令窗口12.chkdsk 检查磁盘使用情况13.time 显示和设置…

【Maven】Nexus私服

6. Maven的私服 6.1 什么是私服 Maven 私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的远程仓库(中央仓库、其他远程公共仓库)。一些无法从外部仓库下载到的构件,如项目组其他人员开发的…

【CSS】小球旋转loading加载动画

效果 css小球旋转loading动画 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document<…

Web day07 项目实战

目录 Restful风格&#xff1a; 代码结构&#xff1a; 1). Controller层 2). Service层 3). Mapper&#xff08;dao&#xff09;层 4).yml文件&#xff1a; 数据封装&#xff1a; 1). 手动结果映射 2). 起别名 3). 开启驼峰命名(推荐) 删除部门&#xff1a; 新增部门&a…

rest-assured multiPart上传中文名称文件,文件名乱码

rest-assured是一个基于java语言的REST API测试框架&#xff0c;在使用rest-assured的multipart 上传文件后&#xff0c;后端获取的文件名称乱码。截图如下&#xff1a; 原因是rest-assured multipart/form-data默认的编码格式是US-ASCII&#xff0c;需要设置为UTF-8。 Befo…

【Git操作】-- 将已存在的项目复制一份到另一个分组空间下

目录 1、需求描述 2、操作步骤 2.1 配置 2.2、git 上创建新项目 2.3 添加到旧的项目中 2.3、将新项目添加到待复制的项目上 3、Push an existing Git repository 4、浏览器打开新项目 nn_bigdata 5、其他&#xff1a;如果项目已经拉取到本地&#xff0c;那么可以使用以…

搭建环境-PHP简介及环境搭建教程

搭建环境-PHP简介及环境搭建教程 前言 在现代Web开发中,PHP是一种广泛使用的服务器端脚本语言,它以简洁、高效和跨平台的特性受到开发者的青睐。无论是小型网站还是大型企业应用,PHP都能提供强大的支持。本文将为您详细介绍PHP的基本概念、特点,以及如何搭建PHP开发环境。…

Python中通过点运算符来访问命名空间中参数args方法

Python中通过点运算符来访问命名空间中参数args方法 在Python中&#xff0c;在使用args进行参数传入时&#xff0c;通常是调用argparse模块的ArgumentParser来创建对象。这种设计虽然使得访问命令行参数更加方便&#xff0c;可以通过点运算符来访问命名空间中的参数。但是当封装…

Unity类银河战士恶魔城学习总结(P156 Audio Settings音频设置)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址&#xff1a;https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了音频的大小设置与保存加载 音频管理器 UI_VolumeSlider.cs 定义了 UI_VolumeSlider 类&#xff0c;用于处理与音频设置相关的…

基于单片机的WIFI、语音、储存、时钟、闹钟、定位系统

所有仿真详情导航&#xff1a; PROTEUS专栏说明-CSDN博客 目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;采用DS1302时钟模块&#xff0c;通过LCD1602显示实时时间&#xff0c;也可以储存时间在AT2DC02中&#xff0c…

贪心算法专题(四)

目录 1. 单调递增的数字 1.1 算法原理 1.2 算法代码 2. 坏了的计算器 2.1 算法原理 2.2 算法代码 3. 合并区间 3.1 算法原理 3.2 算法代码 4. 无重叠区间 4.1 算法原理 4.2 算法代码 5. 用最少数量的箭引爆气球 5.1 算法原理 ​5.2 算法代码 1. 单调递增的数字…

Creating Server TCP listening socket *:6379: bind: No error

启动redis报错&#xff1a;Creating Server TCP listening socket *:6379: bind: No error 解决方案&#xff1a; 1、直接在命令行中输入 redis-cli.exe 2、输入shutdown&#xff0c;关闭 3、输exit&#xff0c;退出 4、重新输入 redis-server.exe redis.windows.conf&…

【HM-React】02. React基础-下

React表单控制 受控绑定 概念&#xff1a;使用React组件的状态&#xff08;useState&#xff09;控制表单的状态 function App(){const [value, setValue] useState()return (<input type"text" value{value} onChange{e > setValue(e.target.value)}/>) …

基于python的汽车数据爬取数据分析与可视化

一、研究背景 基于提供的代码片段和讨论&#xff0c;我们可以得出一个与网络抓取、数据处理和数据可视化相关的研究背景&#xff0c;该背景涉及到汽车行业。以下是研究背景的陈述&#xff1a; "在迅速发展的汽车行业中&#xff0c;准确和及时的数据对各方利益相关者至关…

BWO-CNN-BiGRU-Attention白鲸优化算法优化卷积神经网络结合双向门控循环单元时间序列预测,含优化前后对比

BWO-CNN-BiGRU-Attention白鲸优化算法优化卷积神经网络结合双向门控循环单元时间序列预测&#xff0c;含优化前后对比 目录 BWO-CNN-BiGRU-Attention白鲸优化算法优化卷积神经网络结合双向门控循环单元时间序列预测&#xff0c;含优化前后对比预测效果基本介绍模型描述程序设计…