当前位置: 首页 > 知识库问答 >
问题:

Android - Java Stack vs Native Stack

步德宇
2023-03-14

在Android中,当我使用< code > ADB shell dumpsys meminfo 检查应用程序内存时,我观察到单独的Java和本机堆,但只有一个stack条目。

              Pss  Private  Private  Swapped     Heap     Heap     Heap
             Total    Dirty    Clean    Dirty     Size    Alloc     Free
             ------   ------   ------   ------   ------   ------   ------
Native Heap     4516     4480        0     1848    11520     7412     4107
Dalvik Heap     9726     9668        0    12924    33436    28477     4959
Dalvik Other     1417     1416        0       28                           
      Stack      288      288        0        0

我想问,在Android中,当java类通过JNI使用本机代码时,本机堆栈是从java堆栈分配到连续内存位置,还是不连续(实际上是两个独立的堆栈)?

从JVM的描述来看,Java堆栈和原生堆栈似乎是连续的(但我无法确认这张图片确实表明了这一点,或者只是页面作者将它们彼此相邻绘制)。

另外,是否有人有一张图片展示了在Dalvik/ART中如何进行内存管理?我知道存在几个这样的问题,但我仍然无法很好地理解,特别是:

    < Li > Java堆栈/堆和本机堆栈/堆之间的区别 < li >共享库位置

共有1个答案

马淇
2023-03-14

执行堆栈的合理实现将Java和本机帧混合在单个堆栈中。也就是说,如果一个Java方法调用一个本机函数,该函数调用Java方法,则调用对应的帧都被推送在同一个堆栈上。

一般来说,本机堆是用于动态分配内存的存储区域。Java堆是本机堆中为Java对象保留的区域,其内容由垃圾收集器管理。根据垃圾收集器的实现,Java堆可以是连续的,也可以拆分为单独的区域。

我不熟悉Dalvik或ART的细节,但在这方面,它们可能与其他JVM类似。

 类似资料:
  • JNI绑定 Android上的Java资源 WebView代码组织

  • Native.js for Android封装一条通过JS语法直接调用Native Java接口通道,通过plus.android可调用几乎所有的系统API。 方法: currentWebview: 获取当前Webview窗口对象的native层实例对象 newObject: 创建实例对象 getAttribute: 获取对象(类对象/实例对象)的属性值 setAttribute: 设置对象(类对

  • Android++ 是一个免费的 Visual Studio 扩展,用于支持在 Visual Studio 上开发和调试原生的 Android 应用,主要基于 NDK 的 C/C++ 应用。同时包括可订制的发布、资源管理以及集成了 Java 源码编译。

  • Android(安卓)是一种基于Linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国谷歌公司和开放手机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由谷歌收购注资。2007年11月,谷歌与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后谷歌以Apache许可证的授

  • Android(安卓)是一种基于Linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国谷歌公司和开放手机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由谷歌收购注资。2007年11月,谷歌与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后谷歌以Apache许可证的授

  • 简介 该库提供J2SE的Swing、AWT等类的安卓实现,引用该库便能在Android上运行J2SE应用程序。 该库实现大多数必需功能,但不是全部的J2SE。 成功示例HomeCenter服务器,该服务器基于J2SE,同时完全运行于Android之上。 使用指引 该库依赖于开源工程HomeCenter。 它不含Activity,需另建Android工程,并引用本库。 Activity和res需作为

  • 前言 少年时我们追求激情,成熟后却迷恋平庸,在我们寻找,伤害,背离之后,还能一如既往的相信爱情,这是一种勇气,每个人都有属于自己的一片森林,迷失的人迷失了,相逢的人会再相逢。 没有人觉得自己差人一等,也没有人一直喜欢居于他人之下,身为一个Android程序员,只有不断的学习,不断的付出自己的努力,自己的汗水,自己的时间,才能让自己进步,学无止境。就上篇而言,我接着来讲一下Android面试时And

  • 我的应用程序上有WebView,我在android 7.0上从用户那里得到了许多相同的错误,同时膨胀了WebView片段。 错误日志: Android看法充气异常:二进制XML文件行#8:二进制XML文件行#8:错误充气类android。网络工具包。网络视图导致:android。看法充气异常:二进制XML文件行#8:充气类android时出错。网络工具包。网络视图 网络视图片段布局: 我从这些设备