java中接口有什么作用

java中接口有什么作用,第1张

接口的作用就是把使用接口的人和实现接口的人分开,实现接口的人不必要关心谁去使用,而使用接口的人也不用关心谁实现的接口,由接口将他们联系在一起。以上像一段绕口令,那么通过下面的几段程序解释: 

1、以生产和使用一台计算机为例,首先,我们定义了一个显卡的接口,他里面有显示功能和获取显卡名称的功能: 

interface VidioCard 

void display(); 

String getName(); 

2、显卡的生产者来了,他必须实现接口中定义的所有方法,也可以自己增添若干方法: 

class HaolongVidio implements VidioCard 

String name="Haolong's vidiocard"; 

void setName(String name){ 

thisname=name; 

public void display(){ 

Systemoutprintln("The Haolong's vidiocard is running!!"); 

public String getName(){ 

return name; 

}; 

显卡制造商生产出了显卡,并且通过setName方法贴上了自己的商标,而通过getName方法可以让使用者知道这块显卡的制造商。 

3、现在显卡已经生产出来了,但是我们还需要一块主板,把生产出来的显卡插到主板上才能够使用,那么我们去买主板: 

class MainBorad 

String cpuname; 

VidioCard vc; 

void setCPU(String cpuname){ 

thiscpuname=cpuname; 

void setVidioCard(VidioCard vc){ 

thisvc=vc; 

void run(){ 

Systemoutprintln("wudi-mainbord!"); 

Systemoutprintln(vcgetName()); 

vcdisplay(); 

Systemoutprintln("mainbord is running successful!"); 

}; 

这是主板厂商生产的主板,这也就是我们所说的接口的使用者,在他生产主板的时候并不知道用户使用的是哪块显卡(程序中这样理解:Mainborad这个类只知道接口VidioCard中有哪些方法,但是并不知道接口的实现类HaolongVidio是怎么去实现接口的,也就是生产主板的厂商并没有必要考虑显卡是哪个厂商的,他要做的只是根据接口把显卡插槽做好,接口里没有实现的方法相当于插槽),但是他留出来了显卡的插槽(插槽就是接口),也就是他不关心谁实现的接口,但是他可以使用接口,预留出显卡的插槽让用户去选购显卡。 

4、现在我们用户开始组装计算机了: 

public class ChengDuActor 

public static void main(String [] args){ 

HaolongVidio hv=new HaolongVidio();//买了一块HaolongVidio显卡 

MainBorad mb=new MainBorad();//买了一块主板 

mbsetCPU("Intel");//买的是Inter主板 

mbsetVidioCard(hv);//把HaolongVidio插到主板上(通过主板上setVidio方法) 

//Systemoutprintln(hvgetName()); 

mbrun();//开电脑运行 

Systemoutprintln("success"); 

}; 

以上看出接口的作用就是大力实现了java的开源性,使软件开发过程优化,接口重要的特征是实现了多样性,能够很好地解决C++中遗留的多继承中出现的问题。

你好,显卡除了在中关村,太平洋和官网看参数之外,还可以通过一个权威软件------GPU-Z(对然也会出错),GPU-Z相对中关村这些表面参数 ,里面的各种各样的参数就要详细很多了,不过很多

显卡除了在中关村,太平洋和官网看参数之外,还可以通过一个权威软件------GPU-Z(对然也会出错),GPU-Z相对中关村这些表面参数 ,里面的各种各样的参数就要详细很多了,不过很多人对一些参数也模模糊糊,甚至不知道有何用,这里就大概的帮用户讲解下GPU-Z中的各项参数含义,讲解前建议大家如果下载GPU-Z,推荐使用汉化版的。

教您怎么看GPU-Z参数即显卡各项参数含义

GPU:显示核芯,核芯代号,所指的是研发公司内部编号,也可以用于区分性能高低。

工艺:核心的制作工艺,单位纳米,越小工艺就越先进,功耗就越低。

光栅:数量越高,显卡性能越强。

光栅属于输出单元,负责后期渲染,将像素点光栅化,主要影响抗锯齿、动态模糊之类特效,但对光线却没什么大的影响。

总线接口:提供数据流量带宽,目前主流的接口是PCI-E 16×,可以提供8G/s的数据流量(双通道,上、下行各4G/s)。

注:16×@16×,代表最高支持流量,以及目前工作的流量,如果主板或者电源影响,工作接口有可能会下降!

着色器:旧架构为“渲染管线+着色顶点”,新架构之后统一为“统一渲染单元”,即“流处理器”,数量越高性能越好。

旧架构区分性能通过“渲染管线”多少、“着色顶点”多少就可以了解显卡性能。

新架构由于只有一个基数,因此更容易了解,数值越高性能越强。

注:N卡一个流处理器就能发挥作用,因此流处理器数量看上去很少。

A卡对“统一渲染单元”定位不一样,要5个流处理器单元一组才能工作,因此看上去数量很高。(不同的核心架构可能并不一定是A:N=5:1)

Directx 支持:简称DX,是微软编写的程序,作用于多媒体指令,在显卡方面,就是针对画面特效,目前最高级别是DX11(Windows 7)。

像数填充率:光栅工作的数据处理流量,公式GPU频率×光栅=像数填充率。

纹理填充率:渲染管线/流处理器的数据处理流量,公式GPU频率×管线(处理器单元)=纹理填充率。

显存类型:显存,提供储存数据和交换数据,显存代数越高,内存频率就越高,传送的数据就越大,目前最高级别的GDDR5,可以高达4600MHz/s以上的速度。

显存位宽:显存位宽是显存在一个时钟周期内所能传送数据的位数,位数越大则瞬间所能传输的数据量越大,这是显存的重要参数之一

注:由于目前GDDR5 高频显存,即使位宽很低,也可以提供很高的显存带宽,即使128bit,也可以提供几十GB/s以上的带宽,所以位宽不一定强求高位宽。

还有一个特殊的例子,HD2900XT 显存位宽达到了512bit,但由于核心架构的原因,渲染效能无法发挥,即使有512bit的位宽也无法达到预期效果。

显存容量显存是作为数据储存和交换数据,但并非容量大就表示显卡就具有很高的性能。

高端显卡由于核心处理数据庞大,才需要高容量内存的支持。

低端显卡由于核心本身处理量低,即使配备高容量显存也不会提升显卡性能。

显存带宽:显存带宽是指显示芯片与显存之间的数据传输速率,它以字节/秒为单位。显存带宽是决定显卡性能和速度最重要的因素之一。

显存带宽的计算公式为:显存带宽=工作频率×显存位宽/8

目前GDDR5显存,即使位宽为128bit,也可以提供几十G/s以上的带宽。

GPU、显存频率:可以用来直接区分同系列的高低,例如HD4850、HD4830(800SP),它们之间的差别也仅仅在GPU、显存的频率,如果数值一样,性能也就一样。

GPU计算一般是面向大型的统一的数据,所谓统一就是数据类型都是一样的。就是固定类型,大小的数组。因为是SIMD/SIMT,适合做简单的计算。对每个数据单元的处理是一样的,不适合有复杂条件跳转的逻辑。所以GPU加速使用场景比较有限。

另外的SIMD指令加速,对于小型的数据,可以优先考虑。

因为GPU加速,可能需要内存拷贝,使用开销相对较大

用SIMD的话,直接就是用CPU的特殊指令MMX SSE AVX加速。Java应该会有对应的包,C++用Intrinsic头文件。

基本简介

​GPU英文全称Graphic Processing Unit,中文翻译为“图形处理器”。GPU是相对于CPU的一个概念,由于在现代的电脑中(特别是家用系统,游戏的发烧友)图形的处理变得越来越重要,需要一个专门的图形的核心处理器。

主要特点

GPU显示卡的“大脑”,它决定了该显示卡的档次和大部分性能,同时也是2D显示卡和3D显示卡的区别依据。2D显示晶片在处理3D图像和特效时主要依赖CPU的处理能力,称为“软加速”。3D显示晶片是将三维图像和特效处理功能集中在显示晶片内,也即所谓的“硬体加速”功能。显示晶片通常是显示卡上最大的晶片(也是引脚最多的)。现在市场上的显示卡大多采用NVIDIA和 AMD-ATI两家公司的图形处理晶片。

今天,GPU已经不再局限于3D图形处理了,GPU通用计算技术发展已经引起业界不少的关注,事实也证明在浮点运算、并行计算等部分计算方面,GPU可以提供数十倍乃至于上百倍于CPU的性能,如此强悍的“新星”难免会让CPU厂商老大英特尔为未来而紧张, NVIDIA和英特尔也经常为CPU和GPU谁更重要而展开口水战。GPU通用计算方面的标准目前有 OPEN CL、CUDA、ATI STREAM。其中,OpenCL(全称Open Computing Language,开放运算语言)是第一个面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境,便于软体开发人员为高性能计算伺服器、桌面计算系统、手持设备编写高效轻便的代码,而且广泛适用于多核心处理器(CPU)、图形处理器(GPU)、Cell类型架构以及数位信号处理器(DSP)等其他并行处理器,在游戏、娱乐、科研、医疗等各种领域都有广阔的发展前景,AMD-ATI、NVIDIA现在的产品都支持OPEN CL。

1985年 8月20日 ATi公司成立,同年10月ATi使用ASIC技术开发出了第一款图形晶片和图形卡,1992年 4月 ATi发布了 Mach32 图形卡集成了图形加速功能,1998年 4月 ATi被IDC评选为图形晶片工业的市场领导者,但那时候这种晶片还没有GPU的称号,很长的一段时间ATI都是把图形处理器称为VPU,直到AMD收购ATI之后其图形晶片才正式采用GPU的名字。

NVIDIA公司在1999年发布GeForce 256图形处理晶片时首先提出GPU的概念。从此NV显示卡的芯就用这个新名字GPU来称呼。GPU使显示卡减少了对CPU的依赖,并进行部分原本CPU的工作,尤其是在3D图形处理时。GPU所采用的核心技术有硬体T&L、立方环境材质贴图和顶点混合、纹理压缩和凹凸对应贴图、双重纹理四像素256位渲染引擎等,而硬体T&L技术可以说是GPU的标志。

主要品牌

GPU有非常多的厂商都生产,和CPU一样,生产的厂商比较多,但大家熟悉的却只有3个,以至于大家以为GPU只有AMD、NVIDIA、Intel3个生产厂商。

intel

可能谁都想不到intel不但是世界上最大的CPU生产销售商,也是世界最大的GPU生产销售商。

intel的GPU在现在完全是集成显示卡,用于intel的主机板和intel的笔记本。可能你想不到,要是只按发售数量计算,intel随着他主机板发售的集成GPU占据了整个GPU市场的60%以上。

Nvidia

现在最大的独立显示卡生产销售商,他的显示卡包括现在大家熟悉的

Geforce系列,比如GTX580 GTX480 GTX470 GTX460 GTX295等,还有专业的Quadro系列等。

他也同样销售固化在主机板上的集成显示卡,这些显示卡随着主机板一起发售,但是由于AMD兼并ATI后自身主机板晶片能力提高,NV主机板已经失去了显示卡界的半壁江山。

AMD

世界上第二大的独立显示卡生产销售商,他的前身就是ATI。他的显示卡主要就是大家熟悉的HD系列,比如HD7970,HD7950,HD6970,HD6990等。在专业领域有FireGL系列

由于AMD收购ATI后,其主机板市场全面扩大,已经夺取了NVIDIA在AMD处理器主机板的全部份额。就发售量和发售盈利方面,AMD显示卡方面仍然略输于NVIDIA,不过两者不相伯仲,差距只是几个百分点。

Matrox

当年和nv,ati一起争夺独立显示卡市场份额的一家公司,在曾经的一个时期Matrox的显示卡和nv,ati曾经在性能上比肩过。但由于后来其开发能力日渐衰退,在GF5时期,也就是ati的9000系列时期,Matrox由于性能上整整落后了GF5900和Raden9800一个世代而逐渐被淘汰,淡出了民用独立显示卡市场。

但现在Matrox仍然在工程用专业显示卡方面有自己的地位。这些显示卡用于工程主图和多头输出仍然很强力。与nv和amd的专业显示卡不同,nv,ati的专业显示卡涉足的是3D领域,而Matrox得专业显示卡涉足的是2D领域,也就是CAD。

但由于cuda的日渐普及,DX10以上显示卡将在所有支持CUDA的程式上表现出惊人的性能,也就是说当CUDA在各种运用软体普及的那天,Matrox也必将退出2D专业卡的市场。

sis和via

硒统和威盛现在是对孪生兄弟,但他们曾经也是分开的两家公司,并且都生产自己主机板的集成显示卡。但这可怜的两兄弟已经逐步在淡出主机板市场了,也就必定将淡出GPU市场。 由于GPU的利益多,也许以后也会诞生出新的厂商。  

其他资料

NVIDIA公司在1999年发布GeForce256图形处理晶片时首先提出GPU的概念。GPU使显示卡减少了对CPU的依赖,并进行部分原本CPU的工作,尤其是在3D图形处理时。GPU所采用的核心技术有硬体T&L、立方环境材质贴图和顶点混合、纹理压缩和凹凸对应贴图、双重纹理四像素256位渲染引擎等,而硬体T&L技术可以说是GPU的标志。 GPU 是显示卡的“心脏”,也就相当于 CPU 在电脑中的作用,它决定了该显示卡的档次和大部分性能,同时也是2D显示卡和3D显示卡的区别依据。2D显示晶片在处理3D图像和特效时主要依赖CPU的处理能力,称为“软加速”。3D显示晶片是将三维图像和特效处理功能集中在显示晶片内,也即所谓的“硬体加速”功能。显示晶片通常是显示卡上最大的晶片(也是引脚最多的)。现在市场上的显示卡大多采用NVIDIA和AMD两家公司的图形处理晶片。

GPU能够从硬体上支持T&L(TransformandLighting,多边形转换与光源处理)的显示晶片,因为T&L是3D渲染中的一个重要部分,其作用是计算多边形的3D位置和处理动态光线效果,也可以称为“几何处理”。一个好的T&L单元,可以提供细致的3D物体和高级的光线特效;只不过大多数PC中,T&L的大部分运算是交由CPU处理的(这就也就是所谓的软体T&L),由于CPU的任务繁多,除了T&L之外,还要做记忆体管理、输入回响等非3D图形处理工作,因此在实际运算的时候性能会大打折扣,常常出现显示卡等待CPU资料的情况,其运算速度远跟不上今天复杂三维游戏的要求。即使CPU的工作频率超过1GHz或更高,对它的帮助也不大,由于这是PC本身设计造成的问题,与CPU的速度无太大关系。

工作原理

简单说 GPU 就是能够从硬体上支持T&L(Transform and Lighting,多边形转换与光源处理)的显示晶片,因为T&L是3D渲染中的一个重要部分,其作用是计算多边形的3D位置和处理动态光线效果,也可以称为“几何处理”。一个好的T&L单元,可以提供细致的3D物体和高级的光线特效;只不过大多数PC中,T&L的大部分运算是交由CPU处理的(这也就是所谓的软体T&L),由于CPU的任务繁多,除了T&L之外,还要做记忆体管理、输入回响等非3D图形处理工作,因此在实际运算的时候性能会大打折扣,常常出现显示卡等待CPU资料的情况,其运算速度远跟不上今天复杂三维游戏的要求。即使CPU的工作频率超过1GHz或更高,对它的帮助也不大,由于这是PC本身设计造成的问题,与CPU的速度无太大关系。

与DSP区别

GPU 在几个主要方面有别于 DSP (Digital Signal Processing,简称DSP(数位信号处理)架构。其所有计算均使用浮点演算法,而且目前还没有位或整数运算指令。此外,由于GPU专为图像处理设计,因此存储系统实际上是一个二维的分段存储空间,包括一个区段号(从中读取图像)和二维地址(图像中的X、Y坐标)。此外,没有任何间接写指令。输出写地址由光栅处理器确定,而且不能由程式改变。这对于自然分布在存储器之中的演算法而言是极大的挑战。最后一点,不同碎片的处理过程间不允许通信。实际上,碎片处理器是一个SIMD资料并行执行单元,在所有碎片中独立执行代码。

尽管有上述约束,但是GPU还是可以有效地执行多种运算,从线性代数和信号处理到数值仿真。虽然概念简单,但新使用者在使用GPU计算时还是会感到迷惑,因为GPU需要专有的图形知识。这种情况下,一些软体工具可以提供帮助。两种高级描影语言CG和HLSL能够让使用者编写类似C的代码,随后编译成碎片程式汇编语言。Brook是专为GPU计算设计,且不需要图形知识的高级语言。因此对第一次使用GPU进行开发的工作人员而言,它可以算是一个很好的起点。Brook是C语言的延伸,整合了可以直接对应到GPU的简单资料并行编程构造。经 GPU存储和 *** 作的资料被形象地比喻成“流”(stream),类似于标准C中的数组。核心(Kernel)是在流上 *** 作的函式。在一系列输入流上调用一个核心函式意味着在流元素上实施了隐含的回圈,即对每一个流元素调用核心体。Brook还提供了约简机制,例如对一个流中所有的元素进行和、最大值或乘积计算。Brook还完全隐藏了图形API的所有细节,并把GPU中类似二维存储器系统这样许多使用者不熟悉的部分进行了虚拟化处理。用Brook编写的应用程式包括线性代数子程式、快速傅立叶转换、光线追踪和图像处理。利用ATI的X800XT和Nvidia的GeForce 6800 Ultra型GPU,在相同高速快取、SSE汇编最佳化Pentium 4执行条件下,许多此类套用的速度提升高达7倍之多。

对GPU计算感兴趣的使用者努力将演算法对应到图形基本元素。类似Brook这样的高级程式语言的问世使编程新手也能够很容易就掌握GPU的性能优势。访问GPU计算功能的便利性也使得GPU的演变将继续下去,不仅仅作为绘制引擎,而是会成为个人电脑的主要计算引擎。

识别软体

说起处理器识别工具 CPU-Z ,其知名度和必备度无需赘言。硬体网站TechPowerUp又给我们提供了一个类似的工具,用于显示卡识别的“GPU-Z”,支持XP/Vista/2000/2003。最新版本是2012年5月2日更新的062,档案大小为1MB。

更新说明:

GPU-Z 062

修正NVIDIA 开普勒Boost工作频率显示问题

GPU-Z 061

新增支持GeForce605,NVIDIA GeForce GTX690,GTX 670, GT 640, GT 630,Quadro 3000M GTX 675M, GTX 670M。

新增支持AMD Radeon HD7970M,HD7450

新增支持英特尔Sandy Bridge和Ivy Bridge集成显示卡

修正GK107 ROP侦测和显示

改进对NVIDIA 开普勒Boost工作频率检测

修正在没有安装驱动情况下,AMD南方群岛显示卡GPU-Z崩溃问题

修正在Windows XP不能正常工作问题

禁用NVIDIA开普勒不完整BIOS储存

BIOS档案现在另外储存为rom

修正感测器图表重绘,并提高其性能

相关问题

第一个问题:

GPU 的竞争远比 CPU 的竞争来得激烈。通用PC的CPU就只有英特尔和AMD两家大厂。而在GPU方面领先的是NVIDIA和AMD两家厂商,但能生产中低端产品的还有英特尔、三星等好几家厂商。它们的产品虽然不如前两家,但在很多套用方面也能满足使用者的需要,所以N记和A记只有拼命往前跑才不会死掉。CPU厂商没有采用GPU的先进工艺是因为CPU厂商都有自己投资的生产线,不可能一下把原来的生产线都淘汰了上新的生产线,那样做可能连当初投入的资金都难以收回。而GPU厂商由于种种原因,一般都是自己设计由别人代工的,比如找台积电代工。代工厂商为了能接到业务,只有不停升级自己的生产设备,这样才能生存下来。所以造成以上原因。

第二个问题

CPU除了处理游戏的AI,情节等方面的资料外,对于有些图像方面也是由它完成的。当微软每次发布新的DX时,并不是每款GPU都能支持DX新的特征,所以有些图像方面的任务还得由CPU来完成。还有有些特征比如重力特征以前是由CPU来完成,现在有些GPU也能支持了,这些任务就由GPU来完成了。

第三个问题

GPU相当于专用于图像处理的CPU,正因为它专,所以它强,在处理图像时它的工作效率远高于CPU,但是CPU是通用的资料处理器,在处理数值计算时是它的强项,它能完成的任务是GPU无法代替的,所以不能用GPU来代替CPU。

另外

AMD在2006年以54亿美元的巨资收购了ATI公司,AMD看到今后CPU和GPU只有走一条融合的道路才能地竞争中占得先机。CPU和GPU如何配合默契才能最大地提高工作效率是AMD现在考虑的问题,也是英特尔的问题。

第四个问题

微软发布Windows7 其中一个显著特征就是 联合GPU和CPU的强大实力,提升GPU在硬体使用的价值,在Windows7中,CPU与GPU组成了协同处理环境。CPU运算非常复杂的序列代码,而GPU则运行大规模并行应用程式。微软利用DirectX Compute将GPU作为作业系统的核心组成部分之一。DirectX Compute。它让开发人员能够利用 GPU的大规模并行计算能力,创造出引人入胜的消费级和专业级计算应用程式。简单的说,DirectX Compute就是微软开发的GPU通用计算接口,欲统一GPU通用计算标准。也就是说windows7 以后GPU的硬体地位将仅次于CPU,发挥出更大的效用。英特尔发布的酷睿二代Sandy Bridge处理器集成的核芯显示卡和AMD Llano APU已经将集成显示卡提升到了一个新的高度,英特尔下一代Ivy Bridge处理器更是进一步增强了核芯显示卡的能力。

由于CUDA不支持Java下直接调用,因此,想在Java程序中把计算量密集的一部分(for循环)移植到GPU上使用CUDA来做比较麻烦。虽然现在有些lib(JCuda,JCUDA等)通过封装来隐藏Java调用CUDA程序之间的繁琐,但是如果理解了如何去在Java中实现调用,那么自己就可以动手解决,甚至可以自己动手写个lib或者简单的compiler来实现 *** 作。 CUDA是基于C的,而Java提供了调用C函数的API----JNI(Java Native Interface),因此,最简单通用的方法就是通过JNI来调用写好的CUDA程序,或者调用CUDA Driver/Runtime API 去执行编译好的CUDA kernel(cubin 或者ptx)。下面介绍通过JNI调用CUDA 程序的方法。 先介绍基本的Java调用JNI步骤。首先,编写带有native声明的方法的java 类。例如方法loadFile,这里只需要声明方法,不需要实现,具体的实现在C中实现: class ReadFile { //Native method declaration native byte[] loadFile(String name); //Load the library static { SystemloadLibrary("nativelib"); } 其次,利用javac命令编译所写的java类。 Javac ReadFilejava 第三,利用javah 命令来编译生成h的头文件,以便导入到C程序中。 Javah –jni ReadFile 第四,实现C的本地方法,即编写CUDA kernel程序,在程序中导入生成的h文件,并把c程序保存在以cu为后缀名的文件中。 最后,将包含CUDA程序的cu文件编译生成动态链接库,windows下为dll,Linux下为so。Linux下的编译命令为: nvcc -arch sm_20 --compiler-options '-fPIC' -o libhelperso --shared jniHelpercu -I/GPU_TLS -I/usr/java/jdk160_20/include -I/usr/java/jdk160_20/include/linux 注意,这里要使用nvcc而不是gcc进行编译,在要生成的so文件名称前添加lib。-shared命令生成动态链接库,不要忘记添加-fPIC选项,--compiler-options(或者-Xcompiler)来将其传送给底层的gcc编译器。最后要把JNI需要的一些头文件路径(系统的jdk路径)添加进去。 这样,简单的Java调用CUDA程序就OK了

3)查看进程列表:adb shell "ps",同时也能获取到应用的UID,方式如下(不需root权限):

u0_a开头的都是Android的应用进程,Android的应用的UID是从10000开始,到19999结束,可以在Processjava中查看到(FIRST_APPLICATION_UID和LAST_APPLICATION_UID),u0_a后面的数字就是该应用的UID值减去FIRST_APPLICATION_UID所得的值,所以,对于截图这个应用进程,它是u0_a155,按前面的规制,它的UID就是155 + FIRST_APPLICATION_UID = 10155。

VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)

RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)

PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)

USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)

一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS

使用 adb shell "dumpsys meminfo -s <pakagename | pid>"命令,输出结果分以下4部分:

PS:在apk内调用运行获取其他app的内存数据则需要root权限

adb命令:adb shell dumpsys gfxinfo <package | pid>

正常情况下帧率应该在1667ms左右,1秒60帧,执行结果如下:

详细计算方法如下:

还有一个命令是: adb shell dumpsys SurfaceFlinger --latency LayerName

其中LayerName在各个不同系统中获取的命令是不一样的

在Android 6系统直接就是SurfaceView

在Android 7系统中可以通过 dumpsys window windows | grep mSurface | grep SurfaceView 然后通过数据截取到

在Android 8系统中可以通过 dumpsys SurfaceFlinger | grep android包名获取到

执行命令结果如下:

计算方法比较简单,一般打印出来的数据是129行(部分机型打印两次257行,但是第一部分是无效数据,取后半部分),取len-2的第一列数据为end_time,取len-128的第一列数据为start_time

fps = 127/((end_time - start_time) / 10000000)

至于为啥要取第一列数据,这里不做过多介绍,欢迎参看这两篇文章

老罗的文章SurfaceView原理

Android性能测试之fps获取

至于为啥要处于1000000,因为命令打印出来的是纳秒单位,要转为毫秒进行计算,127就是因为命令一次打印出来127帧的数据而已

有两种方法可以获取

1) adb shell "top -n 5 | grep <package | pid>" ,第三列就是实时监控的CPU占用率(-n 指定执行次数,不需root权限),这边top命令执行需要2到3s左右,一般可以采用busybox 的top命令执行,效率会快很多

2) adb shell "dumpsys cpuinfo | grep <package | pid>"

两种方法直接区别在于,top是持续监控状态,而dumpsys cpuinfo获取的实时CPU占用率数据

adb命令:adb shell "dumpsys batterystats < package | pid>" (Android 50后引入)

获取单个应用的耗电量信息,具体返回结果待研究

adb命令:adb shell "dumpsys battery"

出现信息解读:

AC powered:false 是否连接AC(电源)充电线

USB powered:true 是否连接USB(PC或笔记本USB插口)充电

Wireless powered:false 是否使用了无线电源

status: 1 电池状态,2为充电状态,其他为非充电状态

level:58 电量(%)

scale: 100 电量最大数值

voltage: 3977 当前电压(mV)

current now: -335232 当前电流(mA)

temperature:355 电池温度,单位为01摄氏度

adb 命令:adb shell "dumpsys< package | pid> | grep UID" [通过ps命令,获取app的UID(安装后唯一且固定)]

adb shell cat /proc/uid_stat/UID/tcp_rcv [cat为查看命令,读取tcp_rcv获取应用接收流量信息(设备重启后清零)]

adb shell cat /proc/uid_stat/UID/tcp_snd [cat为查看命令,读取tcp_snd获取应用发送流量信息(设备重启后清零)]

计算流量消耗步骤:

或者还有一种方式获取应用流量消耗:

首先判断类型:

cat /sys/class/thermal/thermal_zone/type

只有红框框出来的是有效的

cat /sys/class/thermal/thermal_zone/temp

获取CPU温度

dumpsys battery | grep temperature 单位01摄氏度

获取/proc/stat文件内容(无权限限制)

总的cpu时间片是 total = user+nice+system+idle+iowait+irq+softirq

忙碌时间为 notidle = user+nice+system +iowait+irq+softirq

cpu使用率计算方法为,先取开始的total值和忙碌时间notidle,隔一段时间片,再取一次计算total2,notidle2, cpuuse = (notidle2 – notidle) 100 / (total2 - total)%

PS:由于Android 8权限收紧,在Android 8系统手机内apk内读取文件内容为空,需要shell权限才可获取文件内容,下同

读/sys/devices/system/cpu/cpuX/cpufreq/scaling_cur_freq文件的值,X不定,看是几核手机,scaling_cur_freq是否存在也不一定,需要判断

至于为啥不取cpuinfo_cur_freq文件的值,原因是android 6,7系统获取的时候,这个文件shell没有读取权限,需要root权限

参考文章: >

以上就是关于java中接口有什么作用全部的内容,包括:java中接口有什么作用、gpuz通道数量、怎样 *** 作GPU开始计算等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10094834.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存