我在OS X上使用Android Studio.我收到此错误消息:
FAILURE:构建因异常而失败.
出了什么问题:任务':app:preDexDebug'执行失败.com.android.ide.common.internal.LoggedErrorException:无法运行命令:/ Applications/Android Studio.app/sdk/build-tools/android-4.4W/dx --dex --output/Users/alex/AndroidStudioProjects/SilentSMS/app/build/intermediates/pre-dexed/debug/android-4.3_r2.1-f22bbff4d1017230e169a4844a9c2195f13060d2.jar /Users/alex/AndroidStudioProjects/SilentSMS/app/libs/android-4.3_r2.1.jar
错误代码:3输出:
UNEXPECTED TOP-LEVEL ERROR:
java.lang.OutOfMemoryError: GC overhead limit exceeded
at com.android.dx.cf.code.RopperMachine.getSources(RopperMachine.java:665)
at com.android.dx.cf.code.RopperMachine.run(RopperMachine.java:288)
at com.android.dx.cf.code.Simulator$SimVisitor.visitLocal(Simulator.java:612)
at com.android.dx.cf.code.BytecodeArray.parseInstruction(BytecodeArray.java:412)
at com.android.dx.cf.code.Simulator.simulate(Simulator.java:94)
at com.android.dx.cf.code.Ropper.processBlock(Ropper.java:782)
at com.android.dx.cf.code.Ropper.doit(Ropper.java:737)
at com.android.dx.cf.code.Ropper.convert(Ropper.java:346)
at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:282)
at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:139)
at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:94)
at com.android.dx.command.dexer.Main.processClass(Main.java:682)
at com.android.dx.command.dexer.Main.processFileBytes(Main.java:634)
at com.android.dx.command.dexer.Main.access$600(Main.java:78)
at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:572)
at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
at com.android.dx.command.dexer.Main.processOne(Main.java:596)
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:498)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:264)
at com.android.dx.command.dexer.Main.run(Main.java:230)
at com.android.dx.command.dexer.Main.main(Main.java:199)
at com.android.dx.command.Main.main(Main.java:103)
Run Code Online (Sandbox Code Playgroud)
我正在使用这个库:
http://grepcode.com/snapshot/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/
我删除了JAR文件并将其添加到我的项目中 - 我正在尝试构建的项目是:
https://github.com/domi007/silentSMS/
我理解这是因为我的xms和xmx值太低了.我增加了它们:
/ Applications/Android Studio.app/bin/idea.vmoptions现在它说:
-Xms256m
-Xmx1024m
Run Code Online (Sandbox Code Playgroud)
但是,我仍然得到错误.这可能是由什么引起的?除了silentSMS应用程序是一个Eclipse项目,我将代码移植到Android …
我知道没有单一的硬性和快速的答案,但是对于SSL的加密开销与未加密的套接字通信,是否存在通用的数量级估计近似值?我只谈论通信处理和线路时间,而不是计算应用级处理.
更新
有一个关于HTTPS与HTTP的问题,但我有兴趣在堆栈中看得更低.
(我更换了那句"的数量级",以避免混淆,我用它作为非正式的术语,而不是在正规CompSci意义当然,如果我.有正式的意思是,作为一个真正的怪胎我就一直在思考的二进制,而不是小数!;-)
更新
根据评论中的每个请求,假设我们讨论的是持久连接上的大小良好的消息(范围为1k-10k).因此,连接建立和数据包开销不是重要问题.
简单的问题,但它现在一直唠叨我......
什么是MySQL中的"开销",我应该担心吗?
点击"优化表"确实是真的吗?
是否会在编写导入时将开销加载到一个包中的所有类型(import java.*); 而不只是一个特定的类型(即import java.lang.ClassLoader)?第二个是比另一个更合适的使用方式吗?
很多文献都讨论了使用内联函数来"避免函数调用的开销".但是我还没有看到可量化的数据.函数调用的实际开销是多少,即通过内联函数实现什么样的性能提升?
Java中是否存在使用try/catch块的开销,而不是if块(假设所附的代码没有请求)?
例如,对字符串采用以下两种简单的"安全修剪"方法:
public String tryTrim(String raw) {
try {
return raw.trim();
} catch (Exception e) {
}
return null;
}
public String ifTrim(String raw) {
if (raw == null) {
return null;
}
return raw.trim();
}
Run Code Online (Sandbox Code Playgroud)
如果raw输入很少null,两种方法之间是否有任何性能差异?
此外,使用该方法简化代码布局是一种很好的编程模式tryTrim(),特别是当通过将代码封装在一个try/catch块中可以避免许多if块检查稀有错误条件时?
例如,一个常见的情况是使用一个方法N parameters,M <= N在其开始附近使用它们,如果任何这样的参数是"无效的"(例如,空或空字符串),则快速且确定地失败,而不影响其余的码.
在这种情况下,不必编写k * M if块(其中k每个参数的平均检查次数,例如k = 2对于null或空字符串),try/catch块将显着缩短代码并且可以使用1-2行注释明确地注意到"非常规"逻辑.
这样的模式也会加速该方法,特别是如果错误条件很少发生,并且它会这样做而不会影响程序安全性(假设错误条件是"正常"的,例如在字符串处理方法中为null或空值)是可以接受的,虽然很少存在).
我已经读过,使用C++异常进行异常处理有一些开销,而不是检查返回值.我只是谈论没有抛出异常时产生的开销.我还假设您需要实现实际检查返回值的代码并执行相应的操作,无论它与catch块的作用相同.并且,将异常对象与内部45个状态变量抛出的代码与为每个错误返回负整数的代码进行比较也是不公平的.
我不是仅仅基于哪个可以更快地执行来构建支持或反对C++异常的情况.我听到有人最近提出这样的情况:一旦你考虑了检查返回值和处理错误所需的所有额外簿记代码,使用异常的代码应该像基于返回代码的代码一样快.我错过了什么?
在低水平测量经过时间时,我可以选择使用以下任何一种:
System.currentTimeMillis();
System.nanoTime();
Run Code Online (Sandbox Code Playgroud)
两种方法都已实施native.在深入研究任何C代码之前,有没有人知道是否有任何大量的开销要求调用其中一个?我的意思是,如果我真的不关心额外的精度,那么预期哪个CPU耗时更少?
注意:我使用的是标准的Java 1.6 JDK,但问题可能对任何JRE都有效......
.NET数组的内存布局是什么?
以这个数组为例:
Int32[] x = new Int32[10];
Run Code Online (Sandbox Code Playgroud)
我知道数组的大部分是这样的:
0000111122223333444455556666777788889999
Run Code Online (Sandbox Code Playgroud)
其中每个字符是一个字节,并且数字对应于数组中的索引.
另外,我知道所有对象都有一个类型引用和一个syncblock-index,所以上面的内容可以调整为:
ttttssss0000111122223333444455556666777788889999
^
+- object reference points here
Run Code Online (Sandbox Code Playgroud)
另外,需要存储数组的长度,所以这可能更正确:
ttttssssllll0000111122223333444455556666777788889999
^
+- object reference points here
Run Code Online (Sandbox Code Playgroud)
这完整吗?数组中是否有更多数据?
我问的原因是我们试图估计一个相当大的数据语料库的几个不同的内存中表示将占用多少内存,并且数组的大小变化很大,因此开销可能有一个在一个解决方案中产生巨大影响,但在另一个解决方
所以基本上,对于一个数组,有多少开销,这基本上是我的问题.
在数组坏队被唤醒之前,解决方案的这一部分是静态构建 - 一次引用 - 通常类型的事情,因此这里不需要使用可增长列表.