不是说 Android 程序都是跑在虚拟机里面的吗,那为什么有时程序一卡,整部手机都跟着卡呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
eyeshuaji

不是说 Android 程序都是跑在虚拟机里面的吗,那为什么有时程序一卡,整部手机都跟着卡呢?

  •  
  •   eyeshuaji 2022 年 8 月 18 日 14616 次点击
    这是一个创建于 1347 天前的主题,其中的信息可能已经有所发展或是发生改变。
    虽然这个问题看起来有点搞笑,但是小白是真的不懂
    18 条回复    2022-08-19 17:14:02 +08:00
        1
    selca  
       2022 年 8 月 18 日
    android 的这个虚拟机跟你平时用的虚拟机不是一个概念
    nothingistrue
        2
    nothingistrue  
       2022 年 8 月 18 日
    虚拟机又不是独立硬件,它卡的时候宿主机自然跟着卡。
    BeautifulSoap
        3
    BeautifulSoap  
       2022 年 8 月 18 日 via Android
    首先你需要知道什么是 java 虚拟机

    然后你才能理解安卓的这虚拟机是什么东西
    zagfai
        4
    zagfai  
       2022 年 8 月 18 日   4
    正确来说应该叫 runtime ,不是 virtual machine?
    AoEiuV020CN
        5
    AoEiuV020CN  
       2022 年 8 月 18 日 via Android
    因为你整部手机都是跑在虚拟机里的,
    djoiwhud
        6
    djoiwhud  
       2022 年 8 月 18 日 via Android
    你们说的是真的么?楼主说的卡,应该是因为 luancher 卡了。

    表现出来就是整个手机都卡。
    qbuer
        7
    qbuer  
       2022 年 8 月 18 日
    会不会是手机卡,然后程序卡
    autoxbc
        8
    autoxbc  
       2022 年 8 月 18 日
    调度策略问题,响应性提高,吞吐率就会下降,要找个平衡点
    rb6221
        9
    rb6221  
       2022 年 8 月 18 日
    因为他占用的是硬件资源啊,内存都要满了,cpu 也要满了,其他程序肯定也会卡啊
    DefoliationM
        10
    DefoliationM  
       2022 年 8 月 18 日
    就是 linux 呀,只是程序用 java 虚拟机解释执行而已.
    mxT52CRuqR6o5
        11
    mxT52CRuqR6o5  
       2022 年 8 月 18 日
    这个 vm (虚拟机)是指 jvm ,而不是 vmware 那种东西
    orangex
        12
    orangex  
       2022 年 8 月 18 日   7
    1. Android 程序并不是跑在楼主概念里中的虚拟机(比如 Virtual Box 、VMWare )里。虚拟机( Virtual Machine )这个词面来讲就是一种能虚拟出或抽象出某种环境的机器罢了,Virtual Box 是给操作系统虚拟化出一套硬件资源环境,JVM 是给 Java program 抽象出了一套无关平台的运行环境。
    2. 对于楼主以为的 Virtual Box 这类虚拟机,运行在 Virtual Box 的系统中的程序卡的话,宿主就不会卡吗?
    我想是不一定的。虚拟机中的系统确实是和宿主系统是独立的,但占用资源仍然是分配自宿主机,如果虚拟机对一些资源采用的是静态分配的技术,那很显然如果你分配给虚拟机太多的话,不管虚拟机中的系统中的程序卡不卡,你的宿主机都会卡。如果是指定上限,动态分配的技术的话,那随着虚拟机对资源的占用的过高,宿主理论上是会相对变卡的。当然了这也得看这个程序写的有多差……毕竟一个普通程序通常占用的资源不会那么夸张。
    3.对于 Android 程序,一个程序卡,整部手机会卡。
    上面说了,其实跟虚拟机不虚拟机没多大关系。关键在于,硬件资源是有限的( cpu 、内存、IO ),尤其是在捉襟见肘的移动设备上,所以当有其他进程抢占了或者各种原因反正你目前所在的进程(我理解楼主指的整部手机其实是桌面吧,launcher 也是一个进程)没有抢占不到足够的资源时,就有可能最终导致绘制上的迟滞,也就是感觉到卡。
    iovekkk
        13
    iovekkk  
       2022 年 8 月 18 日
    Android 系统限制了每一个进程只有一个线程可以刷新 UI ,这个线程称之为 UI 线程或者主线程。
    Android 系统 cpu 资源分配,其实就是轮流执行每个线程的指令,资源紧张时,每个线程获取到的 cpu 时间片自然就少
    UI 线程获取不到充足的 cpu 资源,UI 绘制效率低,轻则造成帧率下降,页面刷新变慢
    重则导致绘制流程完全停止,反馈到用户视角就是卡了
    nothingistrue
        14
    nothingistrue  
       2022 年 8 月 18 日   1
    @orangex #12
    CPU 全虚拟化的时候(没开 VT 的 Vmware ),虚拟机跟 JVM 是差不多的,对于宿主机来说,就是个普通应用,这时候不会出现虚拟机内部闲着但是宿主机资源被占用的情况。

    开 VT 半虚拟机化的时候,Hyper-V 这边是虚拟机跟宿主机一起调度,只能人为给虚拟机加限额,这时候虚拟机内部的 CPU 跟宿主机 CPU 是一体基本没区别的,也不会出现虚拟机内部闲着但是宿主机资源被占用的情况。其他虚拟化技术可能有出去,但大体是类似的。VT 虚拟化,基本都是在 CPU 的线程调度上入手。

    以上仅限于 CPU ,或者也包含 GPU ,内存部分,即使是动态增缩内存,虚拟机都是独占的,分配不好就会出现虚拟机闲置但宿主机不够用的情况。
    FrankHB
        15
    FrankHB  
       2022 年 8 月 18 日   1
    这问题跟你理解的虚拟机概念无关。不管你有没有理解错 Android 虚拟机实际怎么跑的,都没法避免卡。

    关键理由是,因为是连你看得见的 UI ,包括负责整个系统交互的主要逻辑,也在虚拟机里跑了。而且,这些关键逻辑难以和你卡的 app 隔离即便是在不同实例,也需要共享输入输出的硬件而同步对普通用户来讲,它们正常情况下就是被独占的( Android 默认也不像桌面系统一样有放弃会话切换用户的 UI )。

    在这个前提下,硬件调度之类都是实现细节。

    不跑在虚拟机里的更底层的宿主可以不卡,但是你感觉不出区别。
    paradoxs
        16
    paradoxs  
       2022 年 8 月 18 日
    你在 windows 里面开个 vmware ,在 vmware 里面把性能拉满,你 windows 主机一样会卡。
    wangyu17455
        17
    wangyu17455  
       2022 年 8 月 19 日
    举个例子,你的程序覆盖了 home 键默认行为,然后程序卡死了,此时 home 键由你正在运行的程序处理,但是程序无响应,所以对 home 键的一切操作也都无响应,然后你按 home 键就不会回到桌面,界面也不刷新。但是系统其实跑的好好的,别的应用的 service 还是正常运行,比如说你在后台开了 qq 音乐,音乐还是正常播放但是你的屏幕动不了
    orangex
        18
    orangex  
       2022 年 8 月 19 日
    14 楼详细解答了 CPU 及内存在不同虚拟化实现下的分配调度情况~ 可能尤为值得楼主记住是“CPU 全虚拟化时,对宿主机来说,就是个普通应用”
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     863 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 70ms UTC 19:55 PVG 03:55 LAX 12:55 JFK 15:55
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86