通过@wagslane (推特)
JavaScript和Java使许多新程序员感到困惑。 它们听起来是如此相似,所以人们可能会认为它们具有相同的用例,或者可能是同一家公司创建了两种语言。 这些假设都不是真的! 让我们仔细阅读本快速阅读中的差异和历史。
Java –简史
Java由Sun Microsystems的James Gosling于1991年创建。 Sun Microsystems为许多不同的设备编写了软件,并且重新编译或重构要在各种CPU架构上运行的代码变得很耗时。
趣闻:创始团队很难想出他们的项目的好名字,在外出喝咖啡时,决定用他们的咖啡来命名语言。
跨平台(JVM)
Java是一种通用编程语言,允许开发人员在任何设备上运行代码。 将代码编译为特定于Java的字节代码,然后Java虚拟机(JVM)将该字节代码转换为与机器兼容的代码。 当以这种方式编译代码时,Java会完全跨平台,这是Java成功的主要因素。
面向对象设计
( https://www.geeksforgeeks.org/object-oriented-programming-oops-concept-in-java/ )
Java之所以迅速成名和被采用,主要是因为Java具有跨平台的特性和面向对象的编程(OOP)模式。 由于能够重用代码并将程序中的实体视为类型的层次结构,因此OOP一直并且一直很受欢迎。 Java是OOP设计模式的王者,它要求程序中的所有内容都是类,甚至是主要功能!
OOP在90年代和2000年代初如此流行,以至于(我认为)它无处不在。 如今,它更合适地找到了自己的市场,但是当JavaScript首次出现时,OOP是游戏的名称。
JavaScript –简要历史
在Java诞生4年后的1995年,Brendan Eich在Netscape工作期间创建了JavaScript。 当时,Netscape对Web浏览行业拥有完全的市场控制权,而Microsoft只是从Internet Explorer项目开始。
为了击败微软,Netscape与Sun Microsystems合作,并以其名称命名JavaScript,以锁定开发者社区中不断涌现的Java炒作。
JavaScript的成功
JavaScript从一种小的脚本语言开始,可以在浏览器中的客户端上执行操作。 赶紧开发并做出了有趣的设计选择,包括:
- 可选的分号行结尾
- 对象和类,但封装受限
- 单线程(基于回调,无并发)
但是,JavaScript具有独特的定位,这将有助于使其成为当今使用最广泛的编程语言 。 以下几点归功于其广泛的成功:
- “ JavaScript”命名策略旨在窃取营销炒作
- 不被视为竞争,因为网站开发不是“认真的开发”
- 再次垄断浏览器程序,因为其他项目没有将浏览器脚本视为认真的程序
许多开发人员认为“前端”开发适用于艺术家和设计师。 毕竟,“这只是样式和模板,对吧?”
长期以来就是这种情况,但是在最近十年中,前端开发已变得与后端开发一样严重。 单页面应用程序以及Angular,React和Vue等框架已经将过去由后端控制的逻辑直接推到用户的浏览器中。
运行时间,速度和基准
大多数编译语言(例如C,C ++和Go)直接将代码编译为机器指令。 这些指令特定于CPU体系结构和操作系统。 Java和JavaScript都通常不会以这种方式进行编译。
Java和JavaScript以不同的方式运行。 为了进行比较,我们将Java编译为JVM字节码,并在NodeJS解释器中运行JavaScript。
注意: Java可以编译为本机代码,也可以通过解释器运行,而JavaScript可以通过Node在浏览器外部运行,但是现在我们将坚持使用这些特殊的用例。
Java虚拟机(JVM)
JVM将代码( .java文件)编译为已编译的类( .class文件)。 这些类文件构成了完整的编译后的Java程序,其中一个类文件必须具有“ main”功能作为入口点。 通常将类文件存档并分发到.jar文件中 ,这使用户可以更轻松地下载单个可执行文件。
JVM的运行速度比 JavaScipt等解释型语言快,因为代码在运行时之前已编译为机器代码。 JVM 比大多数本机编译语言慢,因为它错过了特定于体系结构的优化,并且仍然必须在运行时执行JVM –> CPU转换。
NodeJS – V8引擎
JavaScript是一种解释型语言,具有许多不同的解释器实现。 JavaScript在生产中运行的最常见方式之一是使用NodeJS解释器。 Node使用Chrome的V8引擎来解释和运行JavaScript。
正如您在以下基准测试中所看到的,就内存和CPU而言,Java的性能始终比Node更好:
( https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/javascript.html )
真正使JavaScript变慢的是它在运行时解释代码。 在大约每次执行的线,解释了对JavaScript转换成机器代码,一个非常缓慢的过程,在运行时做的。
类和面向对象
在Java中, 所有事物都是一个类,并且OOP以一种法西斯方式强制执行。
在JavaScript中,类是可选的,并且功能性编程是可能的,甚至最近受到鼓励。 JavaScript具有该语言提供的大多数OOP范例,但是封装不像Java那样健壮。
线程与并发
JavaScript是单线程的 ,这意味着它将永远不会在同一时间执行代码。 并发编程是大多数语言的功能,而JavaScript在无法完成任务方面相当独特。
在Java中,并发性很容易获得 ,您可以在这里阅读有关并发性的更多信息: https : //howtodoinjava.com/java-concurrency-tutorial/
JavaScript弥补单线程的方式是使用异步编程和event-loop 。 每当需要进行API调用或其他长时间运行的过程而又不阻止程序其余部分的执行时,事件循环负责进行等待。 当异步任务完成时,主线程能够检测到任务的结果。
您可以在这里尝试并尝试这些想法: http : //latentflip.com/loupe
谢谢阅读
From: https://hackernoon.com/javascript-vs-java-differences-similarities-and-history-p4q3tbm