安卓Java虚拟机大小_虚拟机为安卓流畅度背锅,是因为关系数十万程序员饭碗?...

导读:虚拟机相当于应用程序在不同运行环境中的翻译。

说起谷歌安卓系统的“虚拟机”,很多人爱拿它和苹果iOS做比较,结果,安卓的很多短腿儿都让虚拟机背了锅,比如安卓手机运存容量是iPhone的两到三倍,流畅度却没有脱胎换骨的变化,有时还被iOS摁在地上摩擦,然后很多人将其归结为虚拟机拖了后腿儿。

虚拟机表示:为安卓流畅度背这口锅,也是为了广大程序员的饭碗着想!

解开这个梗,先要搞懂什么是虚拟机,以及虚拟机有什么用。

简单说,虚拟机是一种消除计算机硬件差异的机制,它可以提供一种稳定的运行环境,让相同的应用程序在不同的操作系统和硬件上运行。

e666eb8a4117134264907164ce088eed.png

说到应用程序的运行环境,需要展开一下。

应用程序的运行环境=操作系统+硬件,其中硬件是起主要作用。原因不复杂,特定指令集的CPU只能解释其固有的机器语言,不同的CPU能解释的机器语言(本地代码)自然不同,英特尔的CPU和ARM的CPU能解释得机器语言是不同的。这好比不会英文的人听不懂英语,反之亦然。

怎么才能让不会英文的人听懂英语?找英语翻译可以办到。

虚拟机就相当于应用程序在不同运行环境中的翻译。比如著名的虚拟机软件“Virtual PC for Mac”,它由微软出品,有了它,苹果的Macintosh用户也能在Mac操作系统上运行Windows应用了,把苹果电脑用出PC的感觉。

不过,到2006年时,微软停止了对“Virtual PC for Mac”的开发,因为苹果电脑换“芯”了,从PwoerPC换成英特尔的CPU,和Windows应用程序的运行环境相同,所以现在苹果电脑不借助虚拟机软件也能运行Windows及其应用程序。

安卓也有自己的虚拟机,它叫Java虚拟机,简称JavaVM(Java Virtual Machine)。

Java虚拟机有多种版本,有用于Windows的虚拟机,有用于Macintosh(现为MacOS)的虚拟机,也有用于移动设备的虚拟机,比如安卓系统的Java虚拟机。

ff71d296bbef7451d0cf3113f046cf1a.png

不同的Java虚拟机对应不同的操作系统和CPU,好处是程序员不用关注操作系统和CPU的差异,只要是用Java语言写成的源代码,就可以在所有具有Java虚拟机的操作系统上运行。

Java虚拟机的运行过程是,Java编译器先将应用程序源代码转换成字节代码,再由Java虚拟机将字节代码转换成适用于相应CPU的机器语言,由其执行。

如果感到上面这段话比较晦涩难懂,记住这个结论也行:Java虚拟机是个称职好用的翻译,可以让不同的CPU看懂Java语言编写的应用程序。

虚拟机还有一个好处,就是写应用程序和操作系统的编程语言可以风马牛不相及。

iOS和安卓操作系统的源代码都是用C语言写成,由于C语言是较早出现的高级编程语言,入门门槛较高,而安卓应用程序是用Java编程,是一种更高级的编程语言(iOS的应用程序编写语言是swift),入门门槛较低。

440cadc7b459565a9e8e359152cfcd81.pngJava之父詹姆斯·高斯林 (James Goslin

显然,Java的低门槛可以吸引大量人员进入应用程序编程行业,方便迅速建立生态。实际上这也是Java得以流行的原因。

不过,虚拟机也不是没有短板,最大的短腿儿就是,代码转来转去,会拖慢程序运行,特别吃硬件资源。这个胎里带的毛病,是安卓手机流畅度不及iPhone的原因之一,在绝大部分虚拟机上都能反映出来。

反过来想想,如果没有虚拟机的话,该怎么办?只能开发不同版本的应用程序,比如Mac版、iOS版、Linux版、安卓版和Windows版。对应用开发商来说,如此多的版本会增加开发成本和维护成本,结果就是一些小众的硬件很难建立起丰富的软件生态。

当然,对数以十万计的安卓应用开发程序员来说,没有Java虚拟机的话,就意味自己的Java武功被废,饭碗被砸了,要么改行,要么学C语言这么武功。这比开发多版本程序还让人着急。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395768.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AppCompatActivity实现全屏的问题

前言:我的 Activity 是继承 BaseActivity , 而 BaseActivity 继承 AppCompatActivity 。 BaseActivity 的继承 /*** 应用程序的基类**/ public class BaseActivity extends AppCompatActivity {}HomeActivity 的继承 public class HomeActivity extends BaseActivit…

Cinder 组件详解 - 每天5分钟玩转 OpenStack(47)

本节我们将详细讲解 Cinder 的各个子服务。 cinder-api cinder-api 是整个 Cinder 组件的门户,所有 cinder 的请求都首先由 nova-api 处理。cinder-api 向外界暴露若干 HTTP REST API 接口。在 keystone 中我们可以查询 cinder-api 的 endponits。 客户端可以将请…

RedHat Enterprise Linux 6 配置Xmanager ,实现图形界面连接

我们经常见到的几种最为常用的windows下远程管理Linux服务器的方法,基本上都是利用SecureCRT,或者是PUTTY等客户端工具通过ssh服务来实现Windows下管理Linux服务器的,这些客户端工具几乎不需要什么配置,使用简单,但是它们都无法启…

Mac下配置iterm2 支持rz sz命令

转自:http://blog.csdn.net/citywolf4/article/details/49071679 1.安装lrzsz,使用brew命令:brew install lrzsz如果找不到lrzsz,使用以下命令更新brew库:brew update2.下载zmoden脚本在https://github.com/mmastrac/iterm2-zmode…

java中session对象登录_JavaWeb中Session对象的学习笔记

一、Session简单介绍在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独…

微信小程序 没有找到 node_modules 目录

在学习小程序云开发的时候,遇到一个问题,使用npm i --production 和npm i vant-weapp -S --production之后,在微信开发者工具中并没有node_modules文件夹 但是在根目录下生成了一个package-lock.json文件。也就是下载的依赖都已经装好了&…

Knockoutjs官网翻译系列(一)

最近马上要开始一个新项目的研发,作为第一次mvvm应用的尝试,我决定使用knockoutjs框架。作为学习的开始就从官网的Document翻译开始吧,这样会增加印象并加入自己的思考,说是翻译也并不是纯粹的翻译,会加入自己对知识点的思考以及自…

Django之静态文件配置

静态文件 了解静态文件配置之前,我们需要知道静态文件是什么? 静态文件其实指的是像css,js,img等一些被模板需要的文件。 如何在Django中配置我们的静态文件 1.建立static文件夹,将静态文件放在该目录下 2.在settings文件下配置如…

神奇的图像处理算法

http://blog.chinaunix.net/uid-23065002-id-4392043.html http://blog.csdn.net/k_shmily/article/details/51138154 几周前,我介绍了相似图片搜索。 这是利用数学算法,进行高难度图像处理的一个例子。事实上,图像处理的数学算法&#xff0c…

JavaWeb项目前端规范(采用命名空间使js深度解耦合)

没有规矩不成方圆,一个优秀的代码架构不仅易于开发和维护,而且是一门管理与执行的艺术。 这几年来经历了很多项目,对代码之间的强耦合及书写不规范,维护性差等问题深恶痛绝。在这里,通过仔细分析后,结合自己…

PCB genesis自制孔点 Font字体实现方法

一.先看genesis原有Font字体 在PCB工程CAM加孔点字体要求时,通常我们直接用Geneis软件给我们提供了2种孔点字体canned_57与canned_67,但此字体可能不能满足各个工厂个性化需求,比如:孔密度,孔间距,孔形状分布,如果有一…

Google 最新的 Fuchsia OS【科技讯息摘要】

转自:http://www.cnblogs.com/pied/p/5771782.html 就是看到篇报道,有点好奇,就去FQ挖了点东西回来。 我似乎已开始就抓到了重点,没错,就是 LK 。 LK 是 Travis Geiselbrecht 写的一个针对 ARM 的嵌入式操作系统&#…

pandas:根据行间差值进行数据合并

1. 问题描述 在处理用户上网数据时,用户的上网行为数据之间存在时间间隔,按照实际情况,若时间间隔小于阈值(next_access_time_app),则可把这几条上网行为合并为一条行为数据;若时间间隔大于阈值…

java8的路径_什么是路径?

# 什么是路径?文件系统以某种形式的媒体(通常为一个或多个硬盘驱动器)存储和组织文件,使得它们可以容易地被检索。目前使用的大多数文件系统将文件存储在树形(或分层)结构中。在树的顶部是一个(或多个)根节点。在根节点下,有文件和目录(Micro…

解析su,su -,sudo的区别

2019独角兽企业重金招聘Python工程师标准>>> 本人以前一直习惯直接使用root,很少使用su,前几天才发现su与su -命令是有着本质区别的! 大部分Linux发行版的默认账户是普通用户,而更改系统文件或者执行某些命令&#xff…

java maven 操作 收集的一些命令

maven打包: mvn clean package -Dmaven.test.skiptrue 运行jar: java -jar target/spring-boot-scheduler-1.0.0.jar 这种方式关掉控制台就不可以访问,现在要后台运行的方式启动 nohup java -jar target/spring-boot-scheduler-1.0.0.jar & 清理并…

java犯的小错误_[Java教程]十个JavaScript中易犯的小错误,你中了几枪?

[Java教程]十个JavaScript中易犯的小错误,你中了几枪?0 2015-06-01 12:00:19序言在今天,JavaScript已经成为了网页编辑的核心。尤其是过去的几年,互联网见证了在SPA开发、图形处理、交互等方面大量JS库的出现。如果初次打交道&…

Kali渗透测试——利用metasploit攻击靶机WinXP SP1

搭建渗透测试环境 Kali攻击机 WinXP SP1 靶机 启动metasploit 跟windows RPC相关的漏洞 内部提供的漏洞攻击 靶机winxp sp1网络配置 查看虚拟机的NAT网段 配置WinXP SP1靶机的IP地址 执行漏洞利用 后漏洞利用:meterpreter> 靶机的信息 进程情况 查看到explorer.e…

创建响应式布局的优秀网格工具集锦《系列五》

在这篇文章中,我们为您呈现了一组优秀的网格工具清单。如果网页设计和开人员采用了正确的工具集,并基于一个灵活的网格架构,以及能够把响应图像应用到到设计之中,那么创建一个具备响应式的网站并不一定是一项艰巨的任务。enjoy! 您…

java 无侵入监控_MyPerf4J 一个高性能、无侵入的Java性能监控和统计工具

MyPerf4J一个针对高并发、低延迟应用设计的高性能且无侵入的实时Java性能监控和统计工具。 受 perf4j 和 TProfiler启发而来。MyPerf4J具有以下几个特性:无侵入: 采用JavaAgent方式,对应用程序完全无侵入,无需修改应用代码高性能: 性能消耗非…