jjzjj

java - 了解 Android 紧密循环/自旋挂起错误

我正在android上开发一款游戏“SpaceRPG”——目前只在大多数GalaxyS4和HTCOnes上看到此错误弹出。这都是Java。游戏会停止,当我尝试调试进程并挂起有问题的线程时,它不会挂起,并且会发生自旋挂起错误。线程转储让我看到它在某个while循环内,该循环正在获取所需的“结束位置”并以不断增加的距离步长向后迭代以找到“开始位置”。这就是事情变得烦人的地方。我可以验证循环不能无限期地运行,即使条件是while(true),在我的break被调用之前它不可能运行超过200次迭代(这个断言由正在运行的代码支持我试过的所有其他手机)。为了帮助我缓解这个问题,我在循环中添加了一个

java - 向下抛投时不同级别的抛投性能

假设我们有三个(或更多)类公共(public)A类{}公共(public)类B扩展A{}公共(public)类C扩展B实现G{}假设每个类都有自己的20个(或更多)方法。转换为C与转换为A对性能的影响更大吗?Java转换在幕后是如何工作的?向下转换时是否必须通过反射检查所有方法和字段是否存在?编辑:类的大小(字段和方法的数量)是否会影响转换时的性能?我对OpenJRE和Dalvik都很感兴趣。作为引用,我知道向上转换可以毫无问题地完成。 最佳答案 转换的性能取决于JVM实现。JLS5.5仅确定转换的要求(包括递归算法),但不对实现设

java - 如何分析 Dalvik GC 行为?

我正在Android上开发应用程序。它是一个持续处理传感器数据的长期运行的应用程序。在运行应用程序时,我在logcat中看到很多GC消息;大约每秒一个。这很可能是因为对象在循环中被创建并立即取消引用。如何找到正在创建和立即释放的对象?我尝试过的所有Java堆分析工具(*)都对堆上对象的数量和大小感到困扰。虽然它们很有用,但我更感兴趣的是找出创建最多temporary短期对象的站点。(*)我尝试了jcat和EclipseMAT。我无法得到hat来处理Android堆转储;它提示转储文件版本不受支持。 最佳答案 HowdoIfindwh

java - Java 编译器会优化对最终静态变量的方法调用吗?当它变成 dalvik 代码时会发生什么?

我有以下代码floatsquare(floatval){returnval*val;}booleanisInCircle(finalfloatx,finalfloaty){floatsquareDistance=square(cx-x)+square(cy-y);returnsquareDistanceRADIUS是一个staticfinalfloat。Java编译器会优化调用square(RADIUS)吗?当它转换为android的dalvik代码时会发生什么?它会保持优化吗? 最佳答案 Java编译器不会对该代码执行任何操作。H

android - 关闭 Dalvik VM 的所有优化

所以我正在尝试为Android编写一些低级代码,我主要担心的是我想避免JIT编译器(或其他任何东西)进行的所有优化。经过一些研究,最好的方法似乎是:手写Java字节码使用“dx”命令将其转换为dex文件使用指定了“-Xverify:none-Xdexopt:none”参数的“dalvikvm”命令(通过adbshell)在程序上运行它我的问题是:这实际上会避免所有优化吗?之前的讨论在这里https://groups.google.com/forum/#!topic/android-platform/Y-pzP9z6xLw让我不确定,我无法通过阅读文档100%说服自己。非常感谢任何一种方

android - 具有静态方法的类在 Android 中存在多长时间?

这是我的一个后续问题previousquestions.我有一个LoadingActivity,它加载所有Activity所需的一些图形并将其存储到静态类中。我尝试在按HOME键时不再重新加载LoadingActivity并恢复应用程序,因为它会占用大量内存并在几次后用完它,因此图形已经加载,因此无需再次启动LoadingActivity。我的问题是,静态类能活多久?我可以在恢复应用程序后依靠它的可用性吗,还是可能它在这里,因为Android由于内存问题将其杀死,或者只要vm运行它就一直在这里(这意味着只要手机正在运行)? 最佳答案

dalvikvm 中的 Android 异常

当我在手机上启动我的应用程序时,我从日志中收到了很多以下错误:E/dalvikvm(2052):NofreetempregistersE/dalvikvm(2052):Jit:abortingtracecompilation,revertingtointerpreterE/dalvikvm(2052):NofreetempregistersE/dalvikvm(2052):Jit:abortingtracecompilation,revertingtointerpreter发生了什么事? 最佳答案 DalvikJIT使用简单快速的寄

java - 访问本地字段与对象字段。医生错了吗?

文档似乎有误。谁能告诉我哪个是真的?在PerformanceMyths部分是:OndeviceswithoutaJIT,cachingfieldaccessesisabout20%fasterthanrepeatedlyaccesssingthefield.WithaJIT,fieldaccesscostsaboutthesameaslocalaccess.在AvoidInternalGetters/Setters部分是:WithoutaJIT,directfieldaccessisabout3xfasterthaninvokingatrivialgetter.WiththeJIT(w

Java 反射 : implement interface and pass to another class

我不确定这在Java中是否可行,但我正在尝试实现一个在编译时不可用的接口(interface)**,并将其作为该接口(interface)的对象传递给另一个类。假设我有一个像这样的界面:publicinterfaceMyInterface{voidonReceive(inti);}还有另一个类:publicvoidMyClass{ArrayListlistenerList=newArrayList();publicvoidadd(MyInterfacem){listenerList.add(m);}}如果它们在编译时可用,我会像这样使用它们:blah=newMyInterface(){

java - 如果未访问类,是否保证 static init 不运行?

我知道有很多关于此的主题和资源,但我想知道一个非常具体的问题(检查所有来源以获得明确答案可能需要很长时间)。我知道JVM/Dalvik保证当您访问类的静态字段时(finalstatic原始值除外),该类的静态字段已经初始化。反之亦然吗?如果我从不根本访问一个类(例如,因为另一个静态方法中的switch-case代码永远不会到达某个分支),是否可以保证VM不初始化这个类的静态?假设我有这样一个类:publicclassBoo{publicstaticint[]anything=newint[]{2,3,4};privatestaticint[]something=newint[]{5,6