为啥 Android studio 开发的 hello world 程序都可以占用内存 100MB? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
weixiansen574
V2EX    Android

为啥 Android studio 开发的 hello world 程序都可以占用内存 100MB?

  •  2
     
  •   weixiansen574 2021-12-07 11:05:01 +08:00 via Android 16974 次点击
    这是一个创建于 1470 天前的主题,其中的信息可能已经有所发展或是发生改变。
    请问为啥?我也只是直接创建了一个 HelloWorld 项目,没有加任何代码进去,直接打包放到手机里运行就占用运行内存 100MB ? HelloWorld 程序的安装包就 2MB 大小了,人家 via 浏览器都不超过 2M ,我一个 HelloWorld 就比人家浏览器大了!怪事,难道 Android studio 加了什么奇怪的东西进去吗?
    30 条回复    2021-12-16 12:40:33 +08:00
    461da73c
        1
    461da73c  
       2021-12-07 11:09:15 +08:00   1
    JAVA 不就这个德行吗?
    misdake
        2
    misdake  
       2021-12-07 11:11:40 +08:00   1
    安装包里面可以看看体积分析,根据我 n 年前做 android 的印象可能是带了 support 库或者是图标图片等太大。
    HongJay
        3
    HongJay  
       2021-12-07 11:12:38 +08:00   2
    别人那叫优化。你那叫初学
    NathanDo
        4
    NathanDo  
       2021-12-07 11:14:21 +08:00
    你到底是比内存占用还是安装包呢,via 也就一个 webview 安装包小有什么稀奇的
    lloovve
        5
    lloovve  
       2021-12-07 11:17:21 +08:00 via iPhone
    Android 8g 内存和 ios 2g 内存一个等级
    mxT52CRuqR6o5
        6
    mxT52CRuqR6o5  
       2021-12-07 11:26:17 +08:00   1
    我把 via 清空数据,初次运行,内存占用 125MB
    AoEiuV020CN
        7
    AoEiuV020CN  
       2021-12-07 12:05:04 +08:00   1
    主要是兼容,compat ,安卓为了兼容各种版本,单纯一个默认主题就依赖了一个 androidx 库,
    现在的 activity 都是 AppCompatActivity ,放弃兼容删除依赖还是可以写出几十 kb 的 app 的,
    300
        8
    300  
       2021-12-07 12:18:23 +08:00
    apk 直接拖到 Android Studio 窗口看大小
    另外 gradle 里把压缩混淆也打开
    missdeer
        9
    missdeer  
       2021-12-07 12:21:15 +08:00 via Android   2
    兵马未动,粮草先行。
    WebKit
        10
    WebKit  
       2021-12-07 12:45:57 +08:00 via Android   2
    直接运行的是 debug 肯定比 release 大,debug 包还有各种 test 的依赖。
    Mrshe
        11
    Mrshe  
       2021-12-07 13:55:52 +08:00
    via 裁剪了很多东西,hello world 里面你又没优化
    zongren
        12
    zongren  
       2021-12-07 13:59:31 +08:00
    不是 java 虚拟机的锅吗
    lakehylia
        13
    lakehylia  
       2021-12-07 14:12:20 +08:00
    你这是新手教程,新手还会优化?
    crayygy
        14
    crayygy  
       2021-12-07 15:47:40 +08:00
    1. debug 包比 release 要大很多,先设置成 release 看看,一般不会很大
    2. 创建默认项目的时候会带一堆 support librar 的依赖,这些依赖也不少,gradle 里面删一下,重新编译一下看看
    3. 图片应该不会很多,自带的都是矢量图,不应该很大,所以这块可以不用看了
    huruwo
        15
    huruwo  
       2021-12-07 15:52:31 +08:00
    via 各种极限优化 而且尽量不用整体的第三方库
    youxiachai
        16
    youxiachai  
       2021-12-07 18:00:48 +08:00
    有点迷? 第一次搞客户端开发? 为啥会问这种问题
    sankemao
        17
    sankemao  
       2021-12-07 19:36:02 +08:00
    把各种用不到的依赖去掉,可以压缩到十多 k
    kwanzaa
        18
    kwanzaa  
       2021-12-07 20:57:32 +08:00
    还没 release 带着一堆 debug 分析工具。 运行时也没优化。这么大不奇怪。
    fox0001
        19
    fox0001  
       2021-12-07 22:45:12 +08:00 via Android
    不要跟 via 比,真的
    fan123199
        20
    fan123199  
       2021-12-08 07:44:58 +08:00
    楼主应该更好奇内存占用,不是安装包大小。其实涉及到图形的运用内存占用都会大很多。看似只是 Hello World 没有提示有各种渲染的对象。Android 机制是会分配一个内存空间给你,默认最大是 128M ,不超过就使劲用。 另外,不太清除是不是一些共享内存都计算在内。
    zachlhb
        21
    zachlhb  
       2021-12-08 08:05:45 +08:00 via iPhone
    用 kotlin 语言开发,Java 相当耗内存
    okakuyang
        22
    okakuyang  
       2021-12-08 09:06:53 +08:00
    也不算啥,ios 那边稍微写点代码也占 20 多 M 。
    yinzhili
        23
    yinzhili  
       2021-12-08 09:16:49 +08:00
    @lloovve 然后 2g 内存的手机价格反而更高,消费者觉得自己赚了,厂商也赚了,双赢
    dddddd
        24
    dddddd  
       2021-12-08 15:15:34 +08:00
    大部分是共享的内存,去了解一下 zygote 启动过程
    hatcloud
        25
    hatcloud  
       2021-12-08 16:39:29 +08:00
    @zachlhb ???
    Kotlin 和 Java 写的,最后编译完后不都是一样的字节码吗?会有什么区别?
    zachlhb
        26
    zachlhb  
       2021-12-08 17:07:15 +08:00 via iPhone
    @hatcloud 不一样,我用 flutter 试过,分别用 Java 和 kotlin 创建默认 demo 项目,打包后测试,kotlin 就是比 Java 的占有资源少很多
    4kingRAS
        27
    4kingRAS  
       2021-12-08 17:16:02 +08:00
    安卓上的 java 程序每个进程都是一个 zygote 生的虚拟机,每个虚拟机会均摊所有应用可能用到的共享内存。这是内存紧张的设备上非常好的策略,对于单个 App ,哪怕没做什么内存也很大。但是对于整个系统,内存是不变的。

    我这几天正在做安卓内存优化,20M 优化到 13M ,安卓上哪怕一个空壳进程都要占用 8 ,9M 左右。如果想再精简,那就只能写 native 程序。
    hatcloud
        28
    hatcloud  
       2021-12-10 14:20:22 +08:00
    @zachlhb 我觉得可能是两者的优化上做的不太一样。毕竟 Google 可能对 Java 语言都不太上心了。
    john6lq
        29
    john6lq  
       2021-12-16 10:45:44 +08:00
    @zachlhb 我怎么没看懂呢,Flutter 试过 Java 和 Kotlin 创建项目? Flutter 在这是起什么作用?混合开发?
    zachlhb
        30
    zachlhb  
       2021-12-16 12:40:33 +08:00 via iPhone
    flutter 是开发框架,主要语言是 dart ,可以直接开发 app ,web ,桌面应用,对于 app ,你可以使用 flutter 的组件来开发跨平台的功能,也可以使用某个平台的语言直接开发,对于安卓你可以选择使用 java 还是 kotlin 作为安卓的语言
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2903 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 14:09 PVG 22:09 LAX 06:09 JFK 09:09
    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