相关疑难解决方法(0)

Dalvik VM和Java内存模型(Android上的并发编程)

我正在研究涉及大量并发编程的Android项目,我将实现一些自定义的线程间通信(java.util.concurent中的那个不适合我的目的).

并发编程一般不容易,但对Dalvik来说似乎更难.要获得正确的代码,您应该了解一些具体的事情以及Dalvik出现问题的地方.我找不到关于Dalvik VM的详细文档.大多数Android资源(甚至developer.android.com专注于平台API,并没有提供任何关于一些非平凡(或低级)事物的深层信息).

例如,Dalvik VM遵循哪个版本的Java语言规范?根据答案,volatile变量的处理是不同的,并影响使用volatile变量的任何并发代码.

已经有一些相关问题:

fadden的一些答案非常有用,但我仍然希望对所讨论的问题有更详细和完整的理解.

所以在我感兴趣的原始问题之下(如果有必要,我将更新列表,因为之前的问题的答案将到达):

  1. 哪里可以找到有关Dalvik VM的详细信息,可以提供以下问题的答案?
  2. Dalvik VM符合哪个版本的Java语言规范
  3. 如果对(2)的答案是"第三版",那么Dalviks对Java Memory Model的支持在本规范中是否完备?尤其是对volatile变量语义的支持有多完整?
  4. Android中双重检查锁定中,fadden提供以下注释:

    对.通过添加"volatile"关键字,这将适用于单处理器(所有Android版本)和SMP(3.0"蜂窝"及更高版本)

    这是否意味着拥有双核CPU但只有Android 2.3的三星Galaxy SII可能会错误地执行并发代码?(当然Galaxy只是一个例子,关于任何具有Android 3.0前平台的多核设备的问题)

  5. Is Dalvik的内存模型中与Java相同吗?法登提供下列句子的答案:

    目前没有发布的Dalvik版本与JSR-133完全正确

    这是否意味着任何现有的正确并发Java代码在发布此评论的任何Android版本上可能无法正常工作?

更新#1:回答@ gnat的评论(太长时间无法评论)

@gnat发表评论:

@Alexey Dalvik不符合任何JLS版本,因为一致性要求通过JCK,这不是Dalvik的选项.这是否意味着您甚至无法应用标准Java编译器,因为它符合标准规范?那有关系吗?如果有,怎么样?

好吧,我的问题有些含糊不清.我实际上的意思是JLS不仅是Java编译器实现的规则,而且是任何JVM实现的隐含指南.实际上,例如,JLS声明某些类型的读写是原子操作.编译器编写器不是很有趣,因为读/写只是转换成单个操作码.但是对于任何应该正确实现这些操作码的JVM实现来说都是必不可少的.现在你应该看看我在说什么.虽然Dalvik接受并执行使用标准Java编译器编译的程序,但没有任何保证 …

concurrency android dalvik java-memory-model

47
推荐指数
1
解决办法
3799
查看次数

Dalvik的内存模型与Java相同吗?

Dalvik的内存模型与Java相同吗?我特别感兴趣的是否读取和写入参考和非long/非double原始变量是原子,但我也想知道有没有这两个平台的内存模型之间的差异.

java android memory-model dalvik java-memory-model

30
推荐指数
2
解决办法
4740
查看次数