安卓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,一经查实,立即删除!

相关文章

Redis PHP连接操作

安装 要在PHP程序中使用Redis,首先需要确保 Redis 的PHP驱动程序和 PHP 安装设置在机器上。可以查看 PHP教程 教你如何在机器上安装PHP。现在,让我们来看看一下如何设置 Redis 的PHP驱动程序。 需要从 github 上资料库: https://github.com/n…

AppCompatActivity实现全屏的问题

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

aws cognito_使用AWS Cognito的用户管理—(1/3)初始设置

aws cognitoby Kangze Huang黄康泽 使用AWS Cognito的用户管理—(1/3)初始设置 (User Management with AWS Cognito — (1/3) Initial Setup) 完整的AWS Web样板-教程1A (The Complete AWS Web Boilerplate — Tutorial 1A) Main Table of Contents Click Here主要目录请点击这…

java建一个conversion_Scala中的JavaConverters和JavaConversions之间有什么区别?

JavaConversions 提供了一系列隐式方法,可以在Java集合和最接近的相应Scala集合之间进行转换,反之亦然 . 这是通过创建实现Scala接口的包装器并将调用转发到底层Java集合或Java接口,将调用转发到底层Scala集合来完成的 .JavaConverters 使用p…

flexbox:1.0.0_了解Flexbox:您需要了解的一切

flexbox:1.0.0This article will cover all the fundamental concepts you need to get good with the CSS Flexbox model. It’s a long one, so I hope you’re ready for it.本文将介绍您熟悉CSS Flexbox模型所需的所有基本概念。 这是一个很长的时间,所以希望您…

10.Object类

在JAVA中,所有的类都直接或间接继承了Java.lang.Object类Object是一个特殊的类,他是所有类的父类,是Java类层中的最高层类。当创建一个类时,他总是在继承,除非某个类已经指定要从其他类继承,否则他就是从ja…

RecyclerView的下拉刷新和加载更多 动画

下拉刷新和加载更多 1、https://github.com/jianghejie/XRecyclerView 2、http://blog.csdn.net/jabony/article/details/44780187 动画 1、https://github.com/wasabeef/recyclerview-animators

java中显示动态信息的方法_java里的动态表单技术

最近的一个项目,由于客户的需求等信息不确定,为了降低以后修改的成本及产品的推广考虑到动态表单技术,之前也一直在考虑到动态表单技术,毕竟在delphi里已经实现过了,由于我们采用的hibernate的执久层的原故&#xff0c…

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

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

中国移动 全球通、 动感地带、神州行 的区别

1、全球通 1、主要面向商务人士可以享受机场VIP俱乐部的尊贵、1860专席的高质量服务、个性化账单、客户积分奖励以及大客户经理贴心服务,更有尊贵资费套餐优惠,但它价格也是最贵的。 2、全球通面对事业成功的人士,进取。 3、全球通&#xff…

java 并发测试main方法_java并发编程test之synchronized测试

synchronized关键字可以用于声明方法,也可以用于声明代码块;package com.test.java;public class SyncTest {public static void main(String[] args) {SynchronizedDemo1 synct1 new SynchronizedDemo1();SynchronizedDemo2 synct new SynchronizedDemo2();SynchronizedDemo…

业余爱好者linux_如何从业余爱好者变成专业开发人员

业余爱好者linuxby Ken Rogers肯罗杰斯(Ken Rogers) 如何从业余爱好者变成专业开发人员 (How to Go From Hobbyist to Professional Developer) A few years ago, I was bouncing back and forth between landscaping jobs and restaurant jobs. I had just left college, and…

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对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独…

vux flexbox使用_Flexbox用大的,彩色的动画gif进行解释

vux flexbox使用Here are three links worth your time:这是三个值得您花费时间的链接: How Flexbox works — explained with big, colorful, animated gifs (5 minute read) Flexbox的工作原理-带有大尺寸,彩色动画gif动画( 阅读5分钟 ) How to commi…

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

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

关于Unity中UI中的Image节点以及它的Image组件

一、图片的Inspector面板属性 Texture Type:一般是选择sprite(2D and UI) Sprite Mode:一般是选择Single Packing Tag:打包的标志值,最后打包的时候会把Tag相同的所有小图打包成一个大图。不像cocos打包图集需要用到第三方软件&am…

Knockoutjs官网翻译系列(一)

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

无人机导航定位系统Java_无人机高精度室内定位导航的技术方案

原标题:无人机高精度室内定位导航的技术方案因为一些特殊的用途,比如室内表演,编队室内飞行等,无人机不可避免会在室内飞行,无人机对室内定位精度的要求很高,室内空间本身就不会太大,若定位精度…