关于 Java 笨重一说

查看 828|回复 80
dcsuibian   
我想起之前接手的一个小程序项目,一看就是 java 背景的人写的。因为代码里面出现了大量为了 OO 而强行 OO 的风格。
比如一个 request 请求,传统的 JS 、TS 开发者会把 wx.request 再套一层 async 函数封装就完事了。而他非要用几个 class 套个里三次外三层,结果是每个页面还要把这几个 class Req 再实例化一遍?。
dcsuibian   
本命 Java 。
要是写脚本,Java 那肯定是比不上 Nodejs 、Python 这种动态语言的,写起来真的轻松很多。但要是写服务器上正经的应用,那 Java 属实是强的一批。
1 、就资源占用问题来说,带了 vm 肯定比不上 C 和 C++这种,不适合低性能、低功耗的设备。但 vm 的好处也很大,平台无关性、自动内存管理等等,最主要是省了程序员开发的时间(很值钱的)。(我写过 C 和 C++,内存管理确实不是一件很省心的事)
以前 Java 的 web 程序是打成 war 包放在 Tomcat 里,现在则是直接和 Tomcat 融合成一个 jar 。近年来还出现了各种容器化、虚拟化技术。大厂在资源占用和开发效率中的选择已经很明显了。同时 jvm 极其优秀,虽然资源占用大了点,但性能也不算差,支持多线程,在带 vm 的语言里就是 top class 。
我认为 Java 作为一种偏高级的语言其实在资源、性能、开发效率上做到了一种相当好的平衡。
2 、JRE 很大这个我也觉得很迷惑。搞得好像 js 和 python 不用运行时一样的。.net 倒是好搞,操作系统带了,但非 windows 就比较尴尬。
geekvcn   
3 、xml 配置复杂的问题确实存在,不过已经基本上是过去式了,主要是老项目。真要对比也得比比同时代的,Java xml 满天飞时,其它语言又是怎么做应用的。要不然拿过去比现在属实不公平。
至于规范来说,我感觉不是什么问题。毕竟软件设计 7 大原则摆在那里,都有章可循。而且现在大家做 web 基本已经形成了一种统一的模板、最佳实践,实际上是好事,减少沟通成本。
当然能打 Java 的语言也是有的,C#就是。不过成也微软、败也微软
l00t   
我发现很多 Java 培训班的可能连 GraalVM 都不知道,如果他们知道的话他们口中很多 Java 的原罪根本就不成立,比如给朋友发个小工具还要发个运行时过去
fisherwei   
@msg7086 你这个说法是想得很美,但实际并没什么卵用。想象中我改一下内部逻辑,保持接口不变,别人调用者就不用改。但实际上呢?你要是返回数据都不改那约等于没改,你要是返回数据改了,而人家调用者就是基于你的数据来写逻辑的呢? getID(), 开始是返回一个不会重复的 ID ,后来改成返回一个会重复的 ID ,你接口形式是没变哦,但这样的改动不得通知一下所有调用者吗?
thetbw   
从运维的视角看,java 最“重”的是 jar 这个东西。
CI/CD 上,java 的项目哪怕只改变一行代码,maven 出来也是一个发生了变化的 jar 文件,然而这个 jar 几乎占用一个 docker 镜像 90%以上的容量(剩下的是 jre ),导致 jar 项目 registry 总是增长的很快,也占用很多带宽。
虽然,磁盘和带宽都不缺,也不值钱。只是看起来很不爽。
night98   
推荐一个 kotlin 和 ktor 这个 web 框架,基本上脱离了好多 java 这些老旧的东西,不过生产环境应该很少有用的,我机子写着玩玩会用,orm 工具可以使用 ebean
gongquanlin   
@l00t 他的意思是比如你调用方法变更数据,现在是没有逻辑,后面比如对某几个字段需要加一个数据追踪,他直接在方法里面加逻辑就行了,你如果直接调的话就没办法这样子操作了。
@fisherwei 分层 jar 了解一下,springboot2.3 开始支持,google 的 jib 也有类似的功能,把不可变的分到上层,实际逻辑代码部分在最下层,大部分情况下都能实现秒级推送
abcbuzhiming   
以前写 php 的时候简单逻辑深知直接扔到了 controller 里爽的很;
后来换了 java ,数据库改个字段,又要改 mapper.java ,又要改 mapper.xml ,又要改 domain ,如果有继承还得改 dto 、vo……麻烦的很
而且一个增删改查,又得写 service ,又得写 serviceImpl ,恶心的很
后来公司业务有多个下游请求,用到了策略工厂,用到了责任链,理解为啥一个 service 要写一个 impl ,发现存在就是合理
只能说 java 轮子又多,各种厂商对 java 的 sdk 支持又好,写业务逻辑速度很快,crud 用代码生成器效率也很高,性能比 php 好一些,部署又方便,小业务确实香
但是写 go 的时候,除了需要 cgo 的,写完之后直接 linux/windows 编译爽的很
但是吐槽一把 go 的 err 处理,要是能和 php/java 一样有统一的异常管理就好了,还得一个一个的处理 err
eason1874   
@brust 这句话立场就不对,要知道现代编程语言的发展就是为了把很多过去认为能力不够的人拉进来编程,降低编程的门槛,如果说没有垃圾的语言只有垃圾的工程师?那以当年人月神话那会的人看现在的,在座各位都是垃圾工程师——就问有几个人敢说自己能拿打孔纸带编程的?
@Lancer777 有一说一,JVM 因为历史包袱原因,在内存使用上确实比不上新出的那些语言,否则 Oracle 也不会在那折腾 GraalVM ,现在确实是本地二进制文件的时代,中间字节码是上个时代的东西。当然,比工程化目前 java 生态圈是无敌的,这也是我为啥对转移到 Go 总是有所犹豫,还想继续观望一下 GraalVM 的原因。
@geekvcn GraalVM 目前还处于试验中,没到大规模应用的程度,其实我也馋这个,本地二进制实在太香了。就怕 Oracle 这个逼将来不愿意把这玩意给 OpenJDK ,搞收费商业化那就。。。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部