BT

您是否属于早期采用者或者创新人士?InfoQ正在努力为您设计更多新功能。了解更多

JVM很重吗?

| 作者 Kenneth Kalmer 关注 0 他的粉丝 ,译者 金灵杰 关注 0 他的粉丝 发布于 2017年3月14日. 估计阅读时间: 不到一分钟 | 智能化运维、Serverless、DevOps......2017年有哪些最新运维技术趋势?CNUTCon即将为你揭秘!

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

如何来度量?

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

这些问题可以让我们抛开一些偏见,从多个方面来度量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语言终结”的意思,仅仅是通过一些角度给出一些观点,读者可以借此考虑消除自己常用语言的膨胀。

查看英文原文:https://www.opensourcery.co.za/2017/01/05/the-jvm-is-not-that-heavy/(译文有删减)


感谢郭蕾对本文的审校。

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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

...... by 黄 中均

文章没想到Java 9的模块化,遗憾

Re: ...... by 黄 中均

提到

此文为JVM正名,很好! by Jason Lee

顶!

Re: ...... by 孙 奇辉

你给作者回复下撒,JAVA 9的jaotc与jlink !

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

4 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT