Articles of 达尔维克

malloc和dlmalloc之间的区别

为了在dalvik堆中分配内存区域,应用程序使用dlmalloc而不是普通的malloc。为什么使用dlmalloc,以及它与malloc的区别。 (据我所知,在创builddalvik VM时分配dalvik堆,使用malloc。)

浏览器发送“Dalvik”作为用户代理

Android浏览器发送Dalvik作为请求头中的用户代理。 我目前正在使用一个简单的login页面来validation用户名和密码,然后授权用户configuration文件的移动网站。 但是,当我检查请求头,我看到了一些不寻常的,有两个用户代理从同一个设备。 以下是来自同一设备的用户代理: "Mozilla/5.0 (Linux; Android 4.1.2; C5303 Build/12.0.A.1.257) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36" "Dalvik/1.6.0 (Linux; U; Android 4.2.2; C2004 Build/15.2.A.2.5)" 甚至奇怪的是,我们重新启动或删除了已启动的cookie。 有没有什么办法,我可以进一步debugging这个更多的信息,并在这个问题上得到更好的看法? 这个问题是不是在旧的Android手机或iOS或Windows手机看到。 **发现高端安卓手机有KitKat / JellyBean操作系统的问题

从代理对象访问字段

在开发Android的ORM框架时,我遇到了一个有趣的问题。 我正在使用一个名为dexmaker的库来进行字节码操作,这使我可以为持久对象创build代理来实现延迟加载。 被代理的实例有一个关联的InvocationHandler ,当代理invoke方法时, InvocationHandler invoke方法,然后调用代理对象各自的方法,假设它被延迟加载。 没有什么太意外的 – 就像Java的Proxy类一样,但是允许我代替实际的类来代替接口(参见dexmaker的ProxyBuilder )。 成为问题的部分是我也使用reflection来检索来自持久对象的字段值,现在我已经引入了延迟加载代理。 这是我目前正在做的事情: for (Field f : getPersistentFields(model.getClass()) { … Object val = f.get(model); // model is either a persistent object or a proxy for one mapField(f, val, map); } 这当然适用于常规模型实例,但对于代理实例, f.get(model)不会检索代理对象的字段值。 相反,它会返回在类的构造函数中分配的默认值。 代理领域的访问没有被明显拦截。 我的问题是这样的:有什么办法可以拦截通过reflection的代理的成员variables访问? 如果不是,我怎样才能以类似“reflection”的方式检索代理字段的值? 我想到的一个可能的解决方法是检索,然后调用字段的getter方法使用reflection,但我想知道是否有一个更直接的解决scheme。 这个解决方法,如果它真的起作用 ,将需要对象为所有持久性字段设置一个getter方法 – 一个通常应该从OOdevise的angular度来遵循的要求,但是也会把更多的工作强加给框架的用户。 我愿意接受任何想法。

Android VM有可能在不杀死整个Android应用程序的情况下垃圾收集静态variables?

(标题是误导,因为垃圾收集器只收集对象,但我发现这个标题更直接) 假设我有一个名为“userid”的静态variables名为Global(在初始化时为null)的Android应用程序。 如果在Android应用程序生命周期中将“userid”variables设置为某个值,请说Global.userid =“myid”,这个variables在Android应用程序仍然活着的时候可能变为空吗? 换句话说,Android VM是否可以卸载Global类,并且由于内存不足而“杀死”这个全局静态variables而不杀死整个Android应用程序? 我担心的是,在应用程序运行时,由于内存不足,userid会突然变为null,从而导致整个应用程序崩溃。 编辑我误解了一些概念(在应用程序进程与活动之间)。 感谢所有的答案!

Android apk编译为ART运行时和dalvik运行时

Google在Android 4.4中添加了一个新的ART运行时。 我怎样才能将我的apk安装到ART运行时和Dalvik运行时?

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

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

为什么Android API有这么多的浮点数?

Java中的默认浮点types是double。 如果你将一个像2.5这样的常量硬编码到你的程序中,Java会自动将它加倍。 当你对浮动或整数进行操作时,可能会从更高的精度中受益,这种types被“提升”为一倍。 但在Android API中,一切似乎都是从音量到矩形坐标的浮动。 在大多数绘图中有一种称为RectF的结构; F是浮动的。 程序员经常把推广的双打(float)加载(float)真的很痛苦。 难道我们都不同意Java代码是混乱和冗长的吗? 通常,math协处理器和加速器在Java中更喜欢双精度,因为它对应于内部types之一。 有什么关于Android的Dalvik虚拟机喜欢花车出于某种原因? 还是所有的浮动只是APIdevise中的变态的结果?

如何最小化GC_FOR_ALLOC发生?

我的应用程序正在导致这些令人畏惧的GC_FOR_ALLOC在特定位置(方法)中出现多次: 12-29 22:20:30.229: D/dalvikvm(10592): GC_FOR_ALLOC freed 1105K, 14% free 10933K/12615K, paused 33ms, total 34ms 12-29 22:20:30.260: D/dalvikvm(10592): GC_FOR_ALLOC freed 337K, 13% free 11055K/12615K, paused 25ms, total 26ms 12-29 22:20:30.288: D/dalvikvm(10592): GC_FOR_ALLOC freed 278K, 14% free 10951K/12615K, paused 24ms, total 24ms 12-29 22:20:30.495: D/dalvikvm(10592): GC_CONCURRENT freed 633K, 11% free 11317K/12615K, paused 16ms+3ms, total 79ms 12-29 22:20:30.495: […]

不断获取… DeviceMonitor]无法启动监控

我发现在使用eclipse运行或debugging我的应用程序几次之后,我在控制台(红色)中得到了上面的输出结果,而我从Dalvik得到的任何反馈都没有反馈到我的手机的连接状态。 我的应用程序仍然会进行debugging等。我只是没有用我的控制台。 任何想法如何解决这一问题? 它显得间歇。 几分钟后开始做,继续做了一段时间,偶尔也会消失。 这发生在我的最后一台笔记本电脑上,现在在我的新笔记本电脑上进行全新安装等。

WAIT_FOR_CONCURRENT_GC屏蔽了什么意思?

我只是在我的android手机上从ICS(4.0.4)自动更新到JB(4.1),当我运行我的应用程序时,它引入了多个垃圾收集调用: WAIT_FOR_CONCURRENT_GC blocked 30ms 我在我的应用程序streamvideo,这些封锁的GC呼叫几乎翻倍我的延迟,这是什么意思?