标签: dalvik

使用多个进程的应用程序是否共享Dalvik实例?

我正在研究Android进程管理,我想知道使用多个进程(而非线程)的应用程序是否共享Dalvik实例,或者每个进程是否存在Dalvik实例,即使对于同一个应用程序也是如此.

你能指点我一些官方消息来源(doc,talk,paper等)吗?

谢谢

android process dalvik

5
推荐指数
1
解决办法
4238
查看次数

带操作数详细信息的dalvik操作码列表

哪里可以找到带有相应允许操作数及其大小的dalvik操作码列表(8位/ 16位/ 32位/ 62位)

opcode dalvik

5
推荐指数
1
解决办法
3013
查看次数

为什么Android需要虚拟机(DVM)?

虚拟机用于在不同的操作系统上运行应用程序(Java将代码编译为独立于操作系统的.class文件,这些文件被解释为字节码).由于Android应用程序在相同的操作系统(即Android)上运行,因此它不需要VM(我可能在这里错了).那为什么需要Dalvik VM呢?

android jvm dalvik vm-implementation

5
推荐指数
1
解决办法
2028
查看次数

访问本地字段与对象字段.文档错了吗?

文档似乎是错误的.有人能告诉我哪个是真的吗?

Performance Myths部分中:

在没有JIT的设备上,缓存字段访问比重复访问字段快约20%.使用JIT,字段访问成本与本地访问大致相同.

避免内部Getters/Setters部分是:

没有JIT,直接字段访问速度比调用一个简单的getter快约3倍.使用JIT(直接字段访问与访问本地一样便宜),直接字段访问比调用一个简单的getter快约7倍.

很明显,没有JIT本地访问速度更快.同样清楚的是,访问字段比直接访问更快,而不是使用getter.

但是,为什么在第一种情况下性能提高20%,而在第二种情况下,由于同样的原因,性能提高了133%,那就是调用对象字段的JIT优化?

java performance android jit dalvik

5
推荐指数
1
解决办法
535
查看次数

如果没有访问类,静态init是否保证不运行?

我知道有很多这方面的主题和资源,但我想知道一个非常具体的问题(可能需要很长时间才能检查所有来源以获得明确答案).

我知道JVM/Dalvik保证当你访问类的静态字段时(final static原始值除外),类的静态字段已经初始化.反之亦然吗?如果我从来没有在所有访问类(例如,因为switch-case在另一个静态方法的代码永远不会达到一定的分支),是它保证了虚拟机并没有初始化这个类的静态?

假设我有一个这样的类:

public class Boo {
      public static int[] anything = new int[] { 2,3,4 };
      private static int[] something = new int[] { 5,6,7 }; // this may be much bigger as well

      public static final int[] getAndClear() {
           int[] st = something;
           something = null;
           return st;
      }
}
Run Code Online (Sandbox Code Playgroud)

我的应用程序是一个非常特殊的应用程序(在某些方面不典型),并且它可能包含数百个类,例如Boo(由代码生成器生成),其中something可能是不同元素计数的数组(因此它可能包含很多元素,如好吧有时候).

根据应用程序输入,许多这些预生成的类可能永远不会被访问.我希望很多int[]对象被不必要地初始化,占用大量内存.

java android static-methods dalvik lazy-initialization

5
推荐指数
1
解决办法
164
查看次数

DalvikVM垃圾收集器是否会停止整个VM?

我的情况是,我的Android应用程序无法及时执行软实时任务,因为调用垃圾收集器需要几毫秒.给GC几分钟的时间不足以错过从IO设备读取数据的小任务的一些重要截止日期.

我正在考虑引入另一个线程,并为其提供轮询重要数据的任务.但是我不确定GC是暂停所有线程还是暂停内存?

java android dalvik

5
推荐指数
1
解决办法
1008
查看次数

在击倒时铸造性能在不同的水平

让我们假设我们有三个(或更多)类

公共课A {}

公共B级扩展A {}

公共类C扩展B实现G {}

假设每个类都有自己的20个(或更多)方法.

铸造到C与铸造到A对性能有更大的影响吗?Java编译如何在幕后工作?

在向下投射时,是否必须通过反射检查所有方法和字段是否存在?

编辑: 类的大小(字段和方法的数量)是否会在投射时影响性能?我对OpenJREDalvik感兴趣.

作为参考,我知道可以毫无问题地完成向上转换.

java android dalvik

5
推荐指数
1
解决办法
1071
查看次数

在Android中处理"javax/xml/XMLConstants.class"时遇到问题

我正在创建一个在我的libs文件夹中使用3个jar文件的Application.

  • 公地编解码器1.8.jar
  • JAXP的API-1.4.2.jar
  • log4j的-1.2.14.jar

当我运行应用程序时,我收到错误"Dx trouble processing"javax/xml XMLConstants.class":"

"在不构建核心库时,不明智或错误地使用核心类(java.*或javax.*)."

"转换为Dalvik格式失败,错误1"

我尝试删除JAR文件,但它导致代码中的错误.

请建议我在这里需要做些什么来解决这个问题.

android dalvik

5
推荐指数
2
解决办法
4770
查看次数

方法和类的结构

我最近研究了一些smali代码,并希望学习它。我已经检查了dalvik字节码参考,但是找不到何时/如何使用这些参考的结构参考

.locals
.local
.registers
.prologue
.line
.annotation
.parameter
Run Code Online (Sandbox Code Playgroud)

您知道其他资源来解释更多的smali结构吗?

java android dalvik dex smali

5
推荐指数
1
解决办法
3073
查看次数

无法执行JavaVM-> DetachCurrentThread():"在仍然运行代码时尝试分离"

我有一个使用NDK的Android应用程序 - 一个带有常规UI和C++核心的常规Android Java应用程序.核心中有些地方我需要调用Java方法,这意味着我需要一个JNIEnv*for该线程,这反过来意味着我需要调用JavaVM->AttachCurrentThread()才能获得有效的env.

以前,只是做了AttachCurrentThread,根本没有分手.它在Dalvik中运行良好,但是一旦一个调用AttachCurrentThread退出而没有调用的线程,ART就会中止该应用程序DetachCurrentThread.所以我已经阅读了JNI参考资料,事实上它说我必须打电话DetachCurrentThread.但是当我这样做时,ART会使用以下消息中止应用程序:

试图在仍然运行代码时分离

这里有什么问题,以及如何DetachCurrentThread正确呼叫?

c++ java-native-interface android dalvik android-ndk

5
推荐指数
2
解决办法
4342
查看次数