博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JVM很重吗?
阅读量:6720 次
发布时间:2019-06-25

本文共 1906 字,大约阅读时间需要 6 分钟。

一种语言是轻是重,可能会影响到使用者的选型;同时,语言的轻和重有很多度量的维度。本文通过几个方面对比,看看JVM是否有想象中的那么重。

\\

如何来度量?

\\
  • 下载包的大小?\\t
  • 运行时占用的资源?\\t
  • 库文件占用硬盘大小?\\t
  • 部署成本?\\t
  • 开发成本?\

这些问题可以让我们抛开一些偏见,从多个方面来度量JVM。

\\

安装成本高嘛?

\\

认为JVM重的第一个原因是前期安装成本比较高。相比于下载大小只有大约15MB左右的Node和Ruby安装包,JDK下载大小大约为200MB。但是,这仅仅是表面上的,对于Node和Ruby,系统上还必须安装C编译器,这就得再加上几百兆空间。甚至在生产环境也需要一个编译器!

\\

Node和Ruby实际需要的总大小被依赖的每个小部分分解了,如果将这些部分都统计起来,还不如单独下载200MB的包比较高效,更别说在依赖上花费的时间了。

\\

JVM运行时重吗?

\\

JVM运行速度很快,甚至可以说是最快的运行时框架之一。随着时间的推移,JVM运行的速度更快,更轻便。上千个工程师致力于优化JVM,甚至有人已经为其贡献了21年的代码。

\\

JVM支持原生线程、多个内核,并且能够通过各种配置修改JVM行为,或者只使用默认配置。其中可能必须要了解的配置是如何设置JVM的内存,以控制JVM在限定环境下发挥它的作用。

\\

通常情况下,部署一个Java应用程序只需执行java -server -Xmx512m app.jar。如果这还不够,可以参考使用其他参数。

\\

磁盘使用量重吗?

\\

对于Java应用程序,如果使用Maven作为其依赖管理程序,所有依赖都会下载到~/.m2目录。以下这个示例,是结果经过了9个月的Clojure开发,仅仅积累了1010MB依赖,甚至都不到1G空间。

\\
\$ du -sh /usr/local/opt/rbenv/versions/2.3.3 ~/.nvm/versions/node/v6.9.1 ~/.m2\690M    /usr/local/opt/rbenv/versions/2.3.3\232M    /Users/kenneth/.nvm/versions/node/v6.9.1\1010M   /Users/kenneth/.m2\
\\

上述示例中,Ruby目录为全新安装,其中内容只有一个博客和一个简单工程。这些依赖占用了近700MB依赖存储。

\\

Node相关目录只安装了ember、docpad和bower,总大小超过200MB。

\\

部署过程重嘛?

\\

通常情况下Java应用构建结果为Jar或者War包。其中Jar包包含了应用程序运行所需要的所有文件,而War包一般需要一个应用服务器(如Tomcat、Jetty等)。

\\

对于Jar文件,我们只需要简单的将JAR文件放置到需要部署的机器上,让JVM执行它即可。而War包,也只需要放置到应用服务器对应目录中。当前,也可以简单的将HTTP服务端代码整合到Jar包中,类似于目前流行的微服务应用(如Springboot)。而且,至少Java应用不需要在生产环境机器上运行apt-get install build-essentials

\\

JVM日常使用

\\

归功于Java生态的发展,开发基于Java的应用有一系列工具。例如通过Maven,我们可以方便的管理Java应用的依赖,并通过其插件,得到最终构建出来的Jar包或者War包,甚至直接运行。通过IDE,可以方便的进行代码补全、应用启停、断点调试等操作。

\\

另外,JVM可以很方便的通过启动参数配置内存使用,在开发机器上和实际生产机器上使用不同的参数,降低本地调试成本。同时,Java还定义了JDWP(Java Debug Wire Protocol),支持运行时替换代码,而无需每次修改都重新编译,重新启动。

\\

总结

\\

判断JVM是否重需要非常小心。作为一种语言,判断Java语言优劣需要各方面评判,但是JVM可以单独剥离出来讨论。

\\

很多人都认为JVM是个巨大的怪兽。不过归功于诸多大神的支持,使得我抛弃了之前的观点。

\\

不过,本文没有“Node语言终结”或者“Ruby语言终结”的意思,仅仅是通过一些角度给出一些观点,读者可以借此考虑消除自己常用语言的膨胀。

\\

查看英文原文:(译文有删减)

\\

感谢对本文的审校。

\\

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至。也欢迎大家通过新浪微博(,),微信(微信号:)关注我们。

转载地址:http://lnjmo.baihongyu.com/

你可能感兴趣的文章
PostgreSQL新手入门
查看>>
Android异步消息处理机制Handler
查看>>
toadfororacle配置流程
查看>>
Android 面试题总结之Android 基础(二)
查看>>
静态HTML页面的访问量统计实现
查看>>
java路径问题
查看>>
Storm 调优
查看>>
zookeeper本机伪集群模式配置,坑人的配置。
查看>>
falcon 服务器文件监控
查看>>
淡淡我为何购买小米股票
查看>>
pfSense端口回流的设置
查看>>
基于Vmware-ESXi5.1实验RHCS虚拟Fence设备(一)
查看>>
ssh  xshell无口令登录配置
查看>>
SQL Server常见基本故障(一)
查看>>
使用IntelliJ IDEA进行远程调试
查看>>
linux高级文件系统管理——RAID
查看>>
我的友情链接
查看>>
一文搞定Java并发编程面试考点
查看>>
linux:arp命令
查看>>
Oracle中TO_DATE格式
查看>>