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 · 9587 次点击
    这是一个创建于 898 天前的主题,其中的信息可能已经有所发展或是发生改变。
    请问为啥?我也只是直接创建了一个 HelloWorld 项目,没有加任何代码进去,直接打包放到手机里运行就占用运行内存 100MB ? HelloWorld 程序的安装包就 2MB 大小了,人家 via 浏览器都不超过 2MB ,我一个 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 的,
    winterbells
        8
    winterbells  
       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 library 的依赖,这些依赖也不少,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   ·   实用小工具   ·   2738 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:34 · PVG 20:34 · LAX 05:34 · JFK 08:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.