Android Dalvikvm 内存管理理解

Win10/Win11共享打印机0x00000709终极修复指南:从注册表到LPD协议的全面解决方案 本文提供了Win10/Win11共享打印机0x00000709错误的终极修复指南,涵盖从注册表修改到LPD协议的全面解决方案。通过详细分析错误根源、基础修复四步法、高阶LPD协议方案及企业级深度修复策略,帮助用户彻底解决打印机共享问题,提升局域网打印效率。 阅读详情

网上很多文件介绍了 jvm 内存管理的理论,但在 Dalvikvm 中,究竟是如何实现的。

这几天猛看了 Dalvikvm 的源代码,说一下我的理解:


在大层面上讲跟理论一样,jvm 把内存分成了一些区,




关于各区的说明参见。

http://blog.youkuaiyun.com/lengyuhong/article/details/5953544


对于hello world 这样简单程序,发现dalvikvm也就用了一个heap, 就是Eden区了。


dalvikvm 使用 mmap 创建共享内存(堆是多个线程共享的),就是Eden区,再用dlmalloc 中的( mspace_free,mspace_calloc等) 来自己对它进行管理(也就不在调用OS的内存分派了,这样做可能是因为性能可以预测)

代码在:dalvik/vm/alloc/HeapSource.cpp#dvmHeapSourceStartup

值得注意的是,除了使用dlmalloc,dalvikvm 还是用了2个bitmap的来对应整个堆,一个叫liveBitmap, 一个叫markBitmap 是为了做gc的。

1在gc过程中,先把markbitmap清0

2在sweepscan过程中,找到每一object指针,就在对应markbitmap位置置位,这是一个深度优先(使用了stack)搜索算法

3在liveBitmap中有但markbitmap没有标记的对象就是该在sweep时用mspace_free 来释放

4markbitmap成了了liveBitmap 表明live objects

进入下一次循环


由于对象有大有小,而bitmap 是按照object的最小的size来映射一个bit的, 因此肯定有浪费的空间, 但为了现实marksweep 的高效,这点浪费还是值得的。


新建对象 


(  注意:一般 new创建对象多用汇编实现,但也调用到dvmAllocObject)


垃圾回收顺序图







最强解析!CWRU轴承数据集Python实战:从数据加载到模型部署全流程 本文提供了一份完整的CWRU轴承数据集Python实战指南,涵盖从数据加载、预处理、特征工程到模型构建与训练的全流程。详细解析了如何利用1D-CNN、Transformer等深度学习模型进行轴承故障诊断,并介绍了模型评估、可解释性分析以及通过FastAPI部署模型的实用方法,为工业设备智能运维提供了一套可复用的解决方案。 阅读详情

相关推荐

Win10系统下AppScan 10.0.0安装破解全流程(附百度网盘资源)

本文详细介绍了在Windows 10系统上安装和配置AppScan 10.0.0进行Web漏洞扫描的完整流程。内容涵盖环境准备、分步安装、核心文件部署、许可证配置及首次扫描实践,旨在帮助开发人员和安全爱好者快速搭建专业的Web应用安全扫描环境,并提升扫描效率。

u8v9w0x1y的博客 363

dalvikvm 命令调试(转)

当Java程序运行时,都是由一个虚拟机来解释Java的字节码,它将这些字节码翻译成本地CPU的指令码,然后执行。对Java程序而言,负责解释并执行的就是一个虚拟机,而对于Linux而言,这个进程只是一个普通的进程,它与一个只有一行代码的Hello World可执行程序无本质区别。所以启动一个虚拟机的方法就跟启动任何一个可执行程序的方法是相同的,那就是在命令行下输入可执行程序的名称,并在参数中指定...

iteye_1194的博客 283

IC版图设计布局经验90条!

13 如果一个cell调用其它cell,被调用的cell的vssx,vddx,vssb,vddb如果没有和外层cell连起来,要打上PIN,否则通不过diva检查.尽量在布局低层cell时就连起来。48 在匹配电路的mos管左右画上dummy,用poly,poly的尺寸与管子尺寸一样,dummy与相邻的第一个poly gate的间距等于poly gate之间的间距。8 更改cell时查看路径,一定要在正确的library下更改,以防copy过来的cell是在其他的library下,被改错。

weixin_44606964的博客 909

Dalvik——基本Dalvik VM调用

From:http://hi.baidu.com/seucrcr/item/ebd1b34879a168086cc2f078   Dalvik——基本Dalvik VM调用     在android设备上,dalvik vm通常都被嵌入到android应用框架里执行,也可以直接运行vm,就像你要在你桌面系统运行虚拟机一样。    在编译完java源码后,转换并整合.class文件到.

ansondroider的博客 735

Python实战:3步搞定视频去重,告别重复文件烦恼(附完整代码)

本文提供了一套基于Python的视频去重实战方案,通过三步流程(抽帧、生成内容指纹、相似度比对)高效识别重复视频文件。文章详细介绍了使用dHash算法生成视频指纹的核心原理,并提供了完整的代码实现,帮助用户快速构建自己的视频去重工具,告别重复文件管理烦恼。

weixin_29054245的博客 379

手把手教你用vLLM在昇腾910B上部署Qwen3-Embedding-8B模型(保姆级避坑指南)

本文详细介绍了如何在昇腾910B芯片上使用vLLM推理引擎部署Qwen3-Embedding-8B模型的全流程,包括环境准备、vLLM-ascend定制化安装、模型获取与校验、环境变量配置、服务启动参数优化、性能压测及生产级部署建议。特别针对昇腾生态的开发者,提供了保姆级的避坑指南和实用技巧,帮助实现高效稳定的模型部署。

weixin_28726671的博客 462

安卓逆向_3 --- Dalvik 字节码、Smali 详解

Dalvik 字节码、Smali 详解

freeking101的博客 9730

华为OD机试双机位C卷:字符串计数匹配 (C/C++/Py/Java/Js/Go)

华为OD机试双机位C卷 字符串计数匹配,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。 华为OD机试 字符串计数匹配, 华为OD上机考试 - 字符串计数匹配。

qq_45776114的博客 1647

android dalvikvm

以下是一份详细的dalvikvm。

qq_62784677的博客 620

【skill】漫剧 AI 视频创作的知识库 + API 调用手册

方案适用场景在对话中使用,自动触发注入到任何 LLM(Cursor/Windsurf/Claude API)Python 模块集成到自动化管线/批量生成GitHub 又限速了,不过前几轮搜到的已经够用了。根据搜索结果,结合已分析过的项目,给你整理完整对比 🐮。

突围 973

37、基于铁电场效应晶体管(FeFET)的片上深度神经网络(DNN)直接反馈对齐训练

本文提出了一种基于铁电场效应晶体管(FeFET)的深度神经网络(DNN)训练加速器架构,结合直接反馈对齐(DFA)算法和FeFET的独特物理特性,以解决当前DNN训练中反向传播(BP)算法带来的高计算开销、复杂数据依赖和高能耗问题。通过设计基于FeFET的MVM引擎、低功耗ADC和随机数生成器(RNG),该架构在速度和功率效率方面相比现有基于ReRAM的加速器分别提升了1.3倍和2.5倍。研究为未来高效能AI训练硬件的发展提供了新的思路和实现路径。

wine的专栏 162

移动安全Android逆向系列:Dalvik概念&破解实例

Dalvik是google专门为Android操作系统设计的一个虚拟机,Dalvik VM是基于寄存器的,而JVM是基于栈的;Dalvik有专属的文件执行格式dex(dalvik executable),而JVM则执行的是java字节码。Dalvik VM比JVM速度更快,占用空间更少。在Java代码中我们无法修改某个逻辑,所以需要将java代码翻译成smali代码,也就是将dex文件转换为smali文件。

qq_53058639的博客 1157

Java 类与对象 -- Java 语言的类与对象、构造器、static、final、包和 JAR

本篇文章我们将深入了解 Java 语言中的类与对象,探讨构造器、`static`、`final`、包和 JAR 文件。这些概念是面向对象编程的核心,对于理解和掌握 Java 至关重要。

栗筝i的博客 5033

我做了五年Android应用层开发,凭什么比一个两年Framewor开发的“年轻人”工资低10k?(2)

想要更系统的学习framework的朋友,点击这里获取!第一章: 深入解析BinderBinder机制作为进程间通信的一种手段,基本上贯穿了andorid框架层的全部。所以首先必须要搞懂的Android Binder的基本通信机制。本章知识点Binder 系列—开篇Binder Driver 初探Binder Driver 再探Binder 启动 ServiceManager获取 ServiceManager注册服务(addService)获取服务(getService)

2301_82243523的博客 727

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

dalvikvm虚拟机弹出的几种错误

1.  Eclipse开发调试时会弹出如下log信息, 08-29 16:07:47.960: E/dalvikvm(3126): GC_CONCURRENT freed 66K, 18% free 33560K/40647K, paused 13ms+19ms, total 106ms 2. log得种类: GC_MALLOC, 内存分配失败时触发 GC_C

BEIDOUJS的专栏 1206

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

正确认识android内存管理原理

很多开发者都是从j2me或j2ee上过来的,对于内存的使用和理解并不是很到位,Android开发网本次给大家一些架构上的指导,防止出现豆腐渣工程的出现。Android作为以Java语言为主的智能平台对于我们开发一些高性能和质量的软件来说了解Android程序内存管理机制是必须的。

jacky choise 1541

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

android main 日志 中dalvikvm 虚拟机日志,[摘]Android GC日志简单分析

前言测试反馈的日志中有大量的dalvikvm,如下:D/dalvikvm( 723): GC_CONCURRENT freed 658K, 38% free 1168K/1876K, paused 1ms+1ms, total 11msD/dalvikvm( 526): GC_FOR_ALLOC freed 87K, 2% free 7449K/7580K, paused 8ms, total...

weixin_35120567的博客 363

Android内存管理分析

很多开发者都是从j2me或j2ee上过来的,对于内存的使用和理解并不是很到位,Android开发网本次给大家一些架构上的指导,防止出现豆腐渣工程的出现。Android作为以Java语言为主的智能平台对于我们开发一些高性能和质量的软件来说了解Android程序内存管理机制是必须的。 Android的Dalvik VM在基础方面和SUN JVM没有什么大的区别仅仅是字节码的优化,我们要知道什么时候

小邓(Java) 1596

Android程序内存管理必读

<br />http://www.android123.com.cn/androidkaifa/534.html<br />http://www.android123.com.cn/androidkaifa/534.html<br />http://www.android123.com.cn/androidkaifa/534.html<br /> 发布时间:2010-06-18 作者:Android开发网原创<br /> <br />如作者不允许转载请告知,本人将会删除,谢谢 !!<br /> <br />

铁锹在手,天下我有 1566

android 内存管理

很多开发者都是从j2me或j2ee上过来的,对于内存的使用和理解并不是很到位,Android开发网本次给大家一些架构上的指导,防止出现豆腐渣工 程的出现。Android作为以Java语言为主的智能平台对于我们开发一些高性能和质量的软件来说了解Android程序内存管理机制是必须的。 Android的Dalvik VM在基础方面和SUN JVM没有什么大的区别仅仅是字节码的优化,我们要...

jguangyou的专栏 78

android内存管理

<br />很多开发者都是从J2ME或J2EE上过来的,对于内存的使用和理解并不是很到位,Android开发网本次给大家一些架构上的指导,防止出现豆腐渣工程 的出现。Android作为以Java语言为主的智能平台对于我们开发一些高性能和质量的软件来说了解Android程序内存管理机制是必须的。 Android的Dalvik VM在基础方面和Sun JVM没有什么大的区别仅仅是字节码的优化,我们要知道什么时候用gc什么时候用recycle以及到底用不用finalization,因为Java对 内存

angle_rupert 836

android中应用启动过程,Android应用开发android 启动过程的分析

本文将带你了解Android应用开发android 启动过程的分析,希望本文对大家学Android有所帮助。android 启动过程的分析基本核心过程引导ROM >引导加载程序 >内核 > init过程> Zygote > Dalvik V M >系统服务器>管理器该过程是Android启动的核心过程,下面让我来详细介绍每一步及其并行操作(如果有的话)。引...

weixin_39824020的博客 101

Android 内存管理(二)

很多开发者都是从j2me或j2ee上过来的,对于内存的使用和理解并不是很到位,Android开发网本次给大家一些架构上的指导,防止出现豆腐渣工程的出现。Android作为以Java语言为主的智能平台对于我们开发一些高性能和质量的软件来说了解Android程序内存管理机制是必须的。Android的Dalvik VM在基础方面和SUNJVM没有什么大的区别仅仅是字节码的优化,我们要知道什么时候用...

weixin_30241919的博客 76

Android学习之内存管理机制

很多开发者都是从J2ME或J2EE上过来的,对于内存的使用和理解并不是很到位,Android开发网本次给大家一些架构上的指导,防止出现豆腐渣工程的出现。Android作为以Java语言为主的智能平台对于我们开发一些高性能和质量的软件来说了解Android程序内存管理机制是必须的。 Android的Dalvik VM在基础方面和Sun JVM没有什么大的区别仅仅是字节码的优化,我们要知道什么时候用g...

iteye_19339的博客 140

Android dalvik虚拟机内部机制详解(2)____内存管理原理

为了保证Android系统的正常运行和应用程序的稳定性,Dalvik虚拟机的内存管理机制在整个虚拟机系统中占用非常重要的位置。此文章会解决以下五个问题: 1.内存管理机制中涉及的关键数据结构 2.内存管理机制中涉及到的关键函数 3.内存分配的算法和流程 4.当前主要的垃圾回收算法 5.垃圾回收的流程 首先来看一下,内存管理机制在dalvik虚拟机中,与其他模块的协助关系,如下图: ...

Adversity reveals genius; fortune conceals it. 1405
上一篇: 用buildroot qemu 运行 Android 系统
下一篇: 编译Linux Kernel
span76
博客等级 码龄18年 117粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值