我的目标是使用工具测试(AndroidJUnitRunner)为Android CPU密集型代码编写自动性能测试.
我很惊讶地发现测试结果不可靠,模拟CPU密集型代码,我想测试一下,我写了下面的循环
for(int i=0;i<1000000;i++){
Math.pow(2,i);
}
Run Code Online (Sandbox Code Playgroud)
该代码在Android应用程序中作为工具测试进行了测试
我得到的结果如下:
仪器测试显示〜230ms完成循环,而同一设备(G5)上的相同代码耗时约600ms
我将非常感谢为什么AndroidJUnitRunner上相同代码的执行时间比真实设备少三倍,而它们最终都在同一台设备上执行
我在尝试分析在 docker 容器与主机上运行的 Java 应用程序中的内存消耗时遇到了一个有趣的问题。
在主机上,我使用 Yourkit 工具来分析内存消耗。
对于 docker 容器 docker stats <docker id/name>
我得到的是,在 MAC yourkit 上显示了 50M 非堆大小 + ~40M 堆大小,总共 ~ 100M
然而,当我在容器上部署和运行相同的战争时,统计数据显示为200M
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
879fb113ca8d jetty-app 0.19% 214.6MiB / 1.952GiB 10.74% 1.49MB / 88.9kB 31.7MB / 6.42MB 29
Run Code Online (Sandbox Code Playgroud)
任何人都可以对这种现象有所了解吗?
假设stats提供了错误的结果,我尝试使用--memory …
虽然这似乎是一个愚蠢的问题,但我想知道是否有另一种优雅的方式来处理我的设计问题,而不仅仅是创建两个单独的布局我的应用程序应该具有不同的自定义布局,用于棉花糖和牛轧糖版本的持续通知。正如我所说,最直接的方法是创建两个不同的 XML 文件并基于运行时平台加载它们。还有其他方法吗?
android android-layout android-6.0-marshmallow android-7.0-nougat
我的目标是让 Alpine 能够执行非 musl 支持的 JRE。这背后的动机是图像大小缩小,我在压缩 JRE 本身方面取得了一定的进展,但我发现的最小图像是 50M 的 ARM64v8/debian:slim-9。这相当不错,但还不够。我没有找到任何支持 musl 的适用于 ARM64 的 JRE(最高 9)。因此可能的方向是
这是我的步骤:
我所有的实验都是在真正的 ARM64 硬件上进行的。
基于以下git项目 https://github.com/owlab-exp/alpine-pkg-glibc-arm64
apk --no-cache 添加 ca 证书
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.23-r3/glibc-2.23-r3.apk
apk 添加 --allow-untrusted glibc-2.23-r3.apk
使用 jlink 工具将包含缩小模块列表的 OpenJRE 10 文件夹复制到 Apline 映像。
不幸的是,当我尝试运行 ./java --version 时,我得到了
/bin/sh: ./java: not found
Run Code Online (Sandbox Code Playgroud)
我看到 glibc apk 已安装,已添加以下文件夹
/usr/glibc-compat/lib
Run Code Online (Sandbox Code Playgroud)
我所缺少的任何想法将不胜感激。