前几年,我一直期待 graalvm 把 java 编译成 native image 可以大幅减少 java 的内存占用,直到今天我用 graalvm 把我一个简单的 spring + spring mvc + mybatis plus + mysql 的小项目编译成 native 后(使用 g1gc ,配置最大堆内存 64m ),一测内存占用,好家伙,占用 184m ,优化了个寂寞,直接正常用 jvm 占用也就 200m 。启动速度确实快,285ms 即可完全启动。 我彻底死心了,java 对于请求量小的小型 web 项目内存消耗太大了,以后还是转投 nodejs 、golang 搞这种小项目吧,java 内存消耗太大了。 个人感觉云原生与微服务时代,java 官方对于资源占用问题解决速度还是太慢了,我阅读了 openjdk 社区的几乎所有的 jep ,发现起码未来 5 年,java 在解决内存占用问题上是不积极的。 Java, 占用, graalvm, 内存
再提下官方进展: 官方在推进 java 使用值类型,这可以提高 java 执行效率(变量分配到栈上而不是堆,降低 gc 压力,提高 cpu 执行效率),推测由于逃逸分析更方便,一定程度上会降低一点内存占用,这个预计下一个 lts 会上线。 project leyden:探索渐进式约束 java 的动态特性换取更好的执行效率、性能占用、启动速度等问题,这个进度太慢了,起码得等到下下个 lts 。 其它的看过也忘了,基本上语法上不会有大的改动,优化主要在 jvm\gc 上,没太多亮点。