abcbuzhiming
V2EX  ›  Java

有没有办法对 Spring 进行"瘦身"?不去定制代码的前提下。

  •  
  •   abcbuzhiming · Aug 12, 2021 · 5930 views
    This topic created in 1918 days ago, the information mentioned may be changed or developed.
    Spring 现在也是个庞然大物了,一个非常简单的 Api 跑起来背着一大坨依赖,内存占用几百 M 那都算是少的。我在网上找了找优化方案也没啥结果,Spring 内部基础功能太多导致它自身消耗很大,GraalVM 这东西看着很美,实际远没到可以使用的状态。

    我甚至都起过吧 Spring 换掉的想法,但是 Spring 的 IOC 确实好用,而且其它家的这种框架,也没找到一个公认的经过工业环境考验的东西。

    感觉 Spring 在 Java 的世界不说对手了,连第二名都找不到
    30 replies  •  2021-08-18 16:19:17 +08:00
    rykinia
    rykinia
    Aug 12, 2021
    1
    你如果只是要注入的话,可以用 guice https://github.com/google/guice

    或者更激进点,注入都不要了,用 vert.x
    cubecube
    cubecube
    Aug 12, 2021
    2
    几百兆夸张了,spring boot 空项启动目大概 50M 内存。
    dqzcwxb
    dqzcwxb
    Aug 12, 2021❤️4
    3
    又要功能多又要瘦
    那我诚招妹子,要求简单,腰细胸大即可
    fkdog
    fkdog
    Aug 12, 2021
    4
    micronaut
    hcen1997
    hcen1997
    Aug 12, 2021
    5
    换个思路, 是不是以前的代码没有 ioc 功能
    ioc 功能是不是在现在的软件开发当中是非常重要的,
    那么实现这个功能就要一定的代码量,
    abcbuzhiming
    abcbuzhiming
    OP
    Aug 12, 2021
    6
    @cubecube 空项目有啥用呢,你加个最基础的 web 依赖试试
    ikas
    ikas
    Aug 12, 2021
    7
    功能多怎么就消耗内存了?只用 ioc,那么只引入 context 就好了,也就几个核心依赖
    pengtdyd
    pengtdyd
    Aug 12, 2021
    8
    杞人忧天 代码优化 1w 遍,远没有花钱买个好一点的服务器强
    ufan0
    ufan0
    Aug 12, 2021
    9
    1. 一个非常简单的 Api 跑起来背着一大坨依赖,内存占用几百 M 那都算是少的
    你所谓的几百 M 是直接在 Linux 上看的吧,怀疑你的查看方式,其并非真实内存占用。

    2. 想瘦身,多排除依赖,但是效果并不明显,因为这个内存占用并没有几年前的帖子说的那么高。

    3. 不喜欢 Spring 家族考虑一下 Vert.x,我们网关 All in Vert.x 了,但是仅觉得写异步顺手。
    zoharSoul
    zoharSoul
    Aug 12, 2021
    10
    @cubecube #2 你加上 web 试试, 轻松好几百
    Cbdy
    Cbdy
    Aug 12, 2021 via Android
    11
    Spring 官方的例子,一个 CURD 的 demo,启动内存可以控制在 20M
    chendy
    chendy
    Aug 12, 2021
    13
    瘦身的方向和目标是什么?如果是减少内存使用的话,其实直接加参数就能限制住,顶多内存不够用频繁 gc 导致性能下降
    sagaxu
    sagaxu
    Aug 12, 2021 via Android❤️1
    14
    别折腾了,换 Go 吧
    renyijiu
    renyijiu
    Aug 12, 2021
    15
    micronaut quarkus 为什么没有呢?
    Ayanokouji
    Ayanokouji
    Aug 12, 2021
    16
    Spring Native
    zoharSoul
    zoharSoul
    Aug 12, 2021
    17
    @Cbdy #11 我点开看了下, 是堆内存在 20mb, 进程内存 100 多 mb 呢 好不好
    zoharSoul
    zoharSoul
    Aug 12, 2021
    18
    @zoharSoul #17 根据 RSS (常驻集大小)值在 150-190MB 范围内
    Lemeng
    Lemeng
    Aug 12, 2021
    19
    最不喜欢折腾如我。
    liuhan907
    liuhan907
    Aug 12, 2021
    20
    想要启动内存低换个 .NET5 用 ASP.NET 写呗,基本啥都有。
    sue0917
    sue0917
    Aug 12, 2021
    21
    思考这些东西不如加钱升级内存
    jack778
    jack778
    Aug 12, 2021
    22
    用 jfinal 吧,作者有强迫症,只需要导入核心包,核心包不依赖任何第三方 jar.
    cheng6563
    cheng6563
    Aug 12, 2021
    23
    换 openj9 的 jvm,内存给你干一半下来。
    nekoneko
    nekoneko
    Aug 12, 2021
    24
    还想用 spring 还要瘦身那就 spring native
    然后可以考虑 quarkus,国内文档少
    securityCoding
    securityCoding
    Aug 12, 2021
    25
    @sagaxu +1,换 go 可以多活几年
    passerbytiny
    passerbytiny
    Aug 12, 2021 via Android
    26
    你要想瘦身源代码那还可以去开发者社区讨论讨论,你要想瘦身运行时占用,那建议直接换掉 Java——Spring 程序的资源占用没有比非 Spring Java 程序的高。

    此外,Java 内存占用只是预分配占用高,实际上并不高。通过合理配置 JVM 参数,几十 M 内存就能支撑起小型服务器。
    mmdsun
    mmdsun
    Aug 12, 2021 via Android
    27
    vert.x,akka,jooby 也行。不过占用也高,只能看 spring native 出来后了。

    要是 java 系找不到除 spring 好用的框架就看.net 系列,java 程序员基本上可以无缝对接,比如:

    [asp.net core] 这个 web api 和 spring boot 差不多,外国框架热度已经超过 spring 了
    https://dotnet.microsoft.com

    数据访问层,相当于 spring data jpa:
    https://docs.microsoft.com/zh-cn/ef/core/

    [Web 性能排名:]
    vert,x 前 20,spring 在后面 50 左右,asp.net 前十:

    https://www.techempower.com/benchmarks/#section=data-r20&hw=ph&test=composite
    jin7
    jin7
    Aug 13, 2021
    28
    换 c#
    zzzmh
    zzzmh
    Aug 13, 2021
    29
    jvm openj9 是一个方法,放在 docker 里运行限制内存优先 swap 是一个方法,这 2 个也可以结合一起用。
    如果要治本,换 go 也可以,一定要 java,自己写 servlet,没开玩笑,servlet 真的可以实现 springboot 所有功能,只要你有本事和耐心写。。。不用 tomcat 都行,自己写 http 服务。就是累挺,有这时间,不如买个内存大点的服务器
    Joker123456789
    Joker123456789
    Aug 18, 2021
    30
    不知道你为什么会对 IOC 有如此强的依赖, 如果可以不用 IOC 的话,vert.x 是个好选择。 或者你可以自己写一个 vert.x plus,给 vert.x 加上 IOC 的特性,作为分支发布。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2531 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 78ms · UTC 11:11 · PVG 19:11 · LAX 03:11 · JFK 06:11
    ♥ Do have faith in what you're doing.