Articles of dalvik

Android NDK:Dalvik Heap和Native Heap – 两者之间的区别

我知道在Android平台上有Dalvik(JVM)堆和Native堆。 并且Dalvik GC在本机堆上没有工作。 但我不确定这是如何工作的,我的意思是Android操作系统是如何将它们分开的? 可能的情况1:由独立的内存硬件组成(我不相信太多) 可能的情况2:Android OS对两个堆都有固定的内存量 可能的情况3:Android OS必须在必要时将部分Dalvik内存堆分配为本机堆,因此本机堆和Dalvik堆的大小是灵活的。 哪一个是真的,还是我没有提到的可能性?

Android ART是否像Dalvik一样支持运行时动态类加载?

目前, 可以将.dex类文件动态加载到Android的Dalvik VM中。 这也可能用于在运行时生成动态代码 。 即将到来的ART运行时间仍然可以吗?

通过Java List高效循环

以下列表来自于2008年的谷歌I / O演讲,名为“Dalvik虚拟机内部”,它列出了从最高效率到最低效率循环遍历一组对象的方法: (1) for (int i = initializer; i >=0; i–) //hard to loop backwards (2) int limit = calculate_limit(); for (int i= 0; i< limit; i++) (3) Type[] array = get_array(); for (Type obj : array) (4) for (int i =0; i< array.length; i++) //gets array.length everytime (5) for (int i=0; i < […]

Multidexing android应用程序的缺点

最近我读到了有关Dalvik 65K方法限制的内容。 我已经知道方法调用列表只能调用第一个65536方法引用。 为解决这个问题,我们提供了许多解决方案。 其中一个是多索引,我们通过使用android的支持库将.dex文件拆分为多个类[classes.dex,classes1.dex …]。 我没有理解的是,由于这种多重索引,Android应用程序有什么缺点,为什么我们应该尽量减少引用方法的数量。 基本上在我的理解中,为了减少方法计数,我必须减少模块化,这使得我的代码不那么可读,从而消除了在删除第三方库代码时所消耗的小时数。 减少方法计数值得吗?

在Android中收集原始types的垃圾吗?

我知道这可能是一个愚蠢的问题,但我的背景更多是用c ++和管理自己的记忆。 我目前正在削减我可以从我的一个游戏中尝试减少垃圾收集频率和感知“滞后”的每一个分配,所以我创建的每个variables都是一个Object(例如String和Rect)我我确保我先在构造函数中创建它,而不是在简单的10行函数中创建临时variables…(我希望这是有道理的) 无论如何我今晚工作得更多了,我意识到我对垃圾收集的假设可能完全错了,原始types(int,boolean,float)是我在10行函数中创建的原始typesvariables每秒20次增加我的垃圾收集问题? 所以一年前我每隔几秒就会在logcat中看到一条消息 GC在101ms内释放了4010个对象/ 484064个字节 现在我每隔15-90秒左右看到一条消息…… 所以重新解释我的问题:看到这条消息时是否包含原始types(int,float,boolean等)?

Dalvik VM错误:发现exception“Javax.xml.namespace.QName.class”

这不是一个问题。 相反,当您使用外部API进行开发和Android.jar时,在Android中发现的常见问题的观察结果不会复制到您的项目中!

如何强制执行A​​ndroid权限?

如果我在JNI C方法中调用socket()函数,应用程序仍将失败并出现权限错误。 如果我在AndroidManifest.xml中放置一个uses-permission行,问题就解决了。 所以似乎在Dalvik虚拟机中没有实现Android权限检查,因为我正在调用本机C函数并且仍然会被检查。 我想知道在Android内核中执行检查的方式,或者用ptrace跟踪应用程序来拦截每个系统调用,或者任何其他方式。 非常感谢。

为什么Android API中有这么多花车?

Java中的默认浮点types是double。 如果您将类似2.5的常量硬编码到程序中,Java会自动将其设置为double。 当您对可能从更高精度中受益的浮点数或整数执行操作时,types将“提升”为double。 但是在Android API中,一切似乎都是从声音音量到矩形坐标的浮动。 在大多数绘图中RectF使用了一种名为RectF的结构; F代表浮动。 对于那些经常将推广双打重新投入(float)程序员而言,这真的是一种痛苦。 难道我们都不同意Java代码是如此混乱和冗长吗? 通常数学协处理器和加速器在Java中更喜欢双重,因为它对应于一种内部types。 有没有关于Android的Dalvik VM出于某种原因更喜欢花车? 或者所有的浮点数都是API设计变态的结果?

在Android上如何制作奇形怪状的剪辑区域?

以下是如何创建圆形的剪裁区域: Path path = new Path(); path.addCircle(200,200,100,Direction.CW); c.clipPath(path); // c is a Canvas 现在Canvas上有一个剪裁区域,可以防止在该圆圈范围之外绘制任何东西。 但是,如果我想将剪裁区域塑造成甜甜圈(或其他),该怎么办? 我尝试使用创建第二个Path并在其上使用toggleInverseFillType,然后将其添加到原始路径,但这似乎不起作用。 或者,不是使用Path,而是可以创建一个Bitmap用作蒙版并以某种方式将其设置为Canvas上的剪贴蒙版? 编辑:答案正是我需要一个小的补充。 在canvas上执行多个操作时,请始终在第一个clipPath调用上使用Op.REPLACE。 这将替换该Canvas上的任何现有clipPath。 作为参考,这里是我发现了6个不同Region.Op值的含义。 想象一下有2个圆圈的维恩图。 “B”是2个圆圈重叠的部分。 “A”是不重叠的左圆。 “C”是不重叠的右圆。 c.clipPath(a,Region.Op.REPLACE); c.clipPath(b,???); Region.Op.DIFFERENCE -> A.. Region.Op.INTERSECT -> .B. Region.Op.REPLACE -> .BC Region.Op.REVERSE_DIFFERENCE -> ..C Region.Op.UNION -> ABC Region.Op.XOR -> AC “。” 表示未绘制的部分。 对不起,如果不是特别清楚。 没有图形很难很好地描述。

你会如何改进Dalvik? Android的虚拟机

我目前正在Android平台上撰写论文。 经过一些研究 ,很明显Dalvik还有改进的余地。 我想知道,你认为开发人员在这个目标上的最佳用途是什么? JIT编译似乎是一个很大的问题,但后来我也听说过这种资源在这么低资源的机器上使用有限。 有没有人有资源或数据支持这一点? 还有其他选择需要考虑吗? 除了开发一个强大的本机开发工具包以绕过VM。 对于那些感兴趣的人,有一个关于Dalvik VM的录音和在线讲座。 任何想法都欢迎,因为这个问题似乎是主观的我会澄清我接受的答案必须有一些理由提出修改。 任何支持它的数据,例如Sun JVM引入时的改进,都将是一个巨大的优势。