关于 Java 笨重一说

查看 925|回复 80
teem   
"笨重"是相对的,和 GO 之类的比,肯定是"笨重"的;比如你要实现一个简单的代理服务,放在路由器上用,你会考虑占几百 M 内存的,还是占十几 M 内存的?
"笨重"并都都是坏事,如果一个项目很复杂,需要 JAVA 这种"笨重"的玩意.
每种语言有自己的生存土壤,没必要也不可能一种语言打天下.不是说技术上做不到,是成本太高.比如你不可能用汇编语言写你的企业级业务系统,但可能会在某些热点方法上用点汇编来优化.
seakingii   
#OP 顺便问一句有什么好 Java Web 框架脱离 Servlet 体系又很瘦小的
ACTFramework : https://github.com/actframework/actframework
早年的 Play! Framework 1.x 也是不错的选择
az467   
另外 Java 的"笨重"还体现在这门语言的语法上,有时为了实现一个功能要写好多的代码.当然现在 Java 本身也在进化,也越来越简洁化.
xiaofan305   
原因在于 java 流行太早而发展太慢,主流版本(8/11)就是这么烂。
- 内存占用多
主要两点原因,一是 java 大量使用堆内存和引用对象,而且没有值类型或者结构体,就算 jit 能优化成栈上分配,最少也多一个对象头,性能和内存占用天生就弱,调 c/c++ 库也很麻烦。
另一个就是 vm 必须要占用的那一部分,实际上使用到的内存没那么多,但是内存就是被占用掉了,这在云时代更是问题,那都是真金白银呐。
当然啦,相信这些问题将来会被那一大堆 project XXX/GraalVM/aot 优化甚至解决,但是我用 Java8 。
- JRE 很大
这个其实还好,真没啥感觉,云环境也有轻量 base image 可以直接用。
- 打出来的包很大
在 springboot 一统天下的如今,框架不是你想换就换的。
上云的可以试一下 Layered Jar ,多少能缓解一点。
- Servlet 规范
纯历史遗留问题。
- Getter 、Setter
没早点把 Property 抄过来,你看 Kotlin 就很好。
- xxxService/xxxServiceImpl
对业务代码来说,99%的情况下没用,知道是怎么回事然后照本宣科就完事了。

综上,骂了这么多年了,能改的 java 多少快慢都在改进,但是这都跟 java8 用户没有关系。
ecloud   
以牺牲硬件资源来换取某新便利或稳定,在计算机领域太常见了 。加一层,再加一层,再加一层…
ecloud   
node.js 以及依附于之上的什么 angular, vue 那才是又臭又大,但是没办法,纯纯解释性语言,JS 天生有弱鸡,结果诞生出这么一群怪胎
PS:其实早年 Java 想做的其实就是现在 node.js 干得这些事( Applet )
ojh
OP
  
@billlee 天下没有免费的午餐,任何抽象都不是零开销的,C++不是,其他任何编译型的 OO 语言也不是。冯诺伊曼体系本质上就是内存跟 CPU 跳二人转,一个人想清闲那就必须把任务加到另一个人身上,没有白捡的。Java 天生缺陷不是 OO 问题,而是他的虚拟机体系。人家本来天生就不是想用来做大型程序的,OO 特性只是附加的东西。Java 原始设计目的真正的精神续作其实是安卓
yedra   
@statumer Spring Webflux + Spring Data R2DBC 又会如何呢,本人没用过 Spring Data R2DBC ,Java 的响应式编程要写异步代码这块真的不容易 。不过 Java19 已经 preview loom (希望 Value Object 也可以)了,但是这个让主流框架适配不知道猴年马月
chocotan   
@geekvcn 别人好歹是在求教,你在干什么
Lancer777   
我本来也打了一堆,最后还是删掉了,感觉国内很多人的认知还是停留在好多年前
------
说说我自己的使用情况吧,我最近在自己搭建一些工具,用了不少其他语言的应用,它们的大小也不小,某些极品应用能直接把服务器内存给干爆( oom killer ),最后我不得不用 java 自己写了个
您需要登录后才可以回帖 登录 | 立即注册

返回顶部