Java是如何实现高性能的?
今天,从欧洲到澳大利亚,乘坐澳航的直达航班大约需要16个小时这在100年前需要一个多月的旅程。如今,速度就是一切,这一原则也适用于软件开发。在动态的本地和网络应用的存在下,没有用户会等待内容的加载。这给软件开发者带来了真正的挑战。那么,在开发高性能软件时,为什么要从几十种流行的选择中选择Java编程语言?在今天的文章中,我们将尝试回答这个问题。我们将重点讨论使Java成为低延迟和高吞吐量系统的完美选择的各个方面。内容Java虚拟机Java性能的基础是什么使Java成为高性能系统的完美语言编译和解释平台独立JIT即时编译器多线程能力垃圾收集Java虚拟机Java性能的基础
Java性能的核心是Java虚拟机,简称JVM。
JVM有两个主要功能:允许Java程序在任何操作系统或设备上运行(根据著名的写一次,在任何地方运行原则),并优化和主动管理程序内存。
我们可以区分JVM的两个定义。
1。Java虚拟机是软件程序执行其代码的运行环境。
2。Java虚拟机是Java程序的运行方式。我们配置好设置,然后在执行过程中依靠JVM来管理程序资源。
JVM中有很多元素,每一个元素都对软件的性能有着深刻的影响。我们可以区分出对性能有影响的JVM的三个不同组件,开发人员可以对它们进行调整。
类加载器当编译一个。java源文件时,它以。class文件的形式被转换为字节码。当你想在你的程序中使用这个类文件时,它必须由类加载器加载到主程序内存中。这个过程包括3个阶段,加载、链接和初始化,所有这些都对应用程序的性能有深刻的影响。
运行时内存数据区由5个核心部分组成,它负责提供内存来存储字节码、参数、对象、返回值和局部变量。
执行引擎它负责执行每个类中存在的代码。然而,在执行程序之前,字节码本身需要被转换为JVM能够理解的指令。为了实现这一点,JVM可以使用解释器或JIT编译器,我们将在下面详细介绍。
JVM是实现真正的Java性能的一个关键工具。有经验的开发者可以通过调整Java虚拟机的默认参数来微调它,以更好地满足应用程序的需求。这个过程可以包括调整堆的大小,并选择合适的垃圾收集器。
作为一般的经验法则,在调整JVM时,你应该首先关注内存使用要求,然后是延迟,最后是应用程序的吞吐量。是什么让Java成为高性能系统的完美语言
好了,我们已经确定JVM是实现Java性能的一个关键工具。那么,使Java成为构建高性能软件应用程序的完美编程语言的其他方面、特点和功能呢?
这里有五个关键点。
1。编译和解释
编程语言通常可以是编译的(C、C、Haskell、Erlang或Rust)或解释的(PHP、Python、Ruby和JavaScript)。
在这方面,Java是一种万能的语言,因为它结合了编译语言的力量和解释语言的显著灵活性。
正如我们之前在介绍Java虚拟机时提到的,Java编译器(javac)将java源代码编译成字节码,然后可以在所有装有JVM的机器上执行。
这张图更好地展示了这个过程。
2。平台的独立性
JVM赋予了Java最大的优势平台独立性。
Java虚拟机几乎可以安装在所有可用的操作系统上,从Windows,到Mac和Linux。平台独立性允许在任何机器上编译和执行代码,并确保结果相同。
在这种情况下,字节码是实现完全平台独立性的关键,也值得解释一下字节码到底是什么,因为我们在本文中已经提到过几次。
Java字节码只是一个包含JVM指令的程序。它的工作原理类似于汇编器,是C代码的一种表示。就其本身而言,它是一种二进制格式的代码,由常量、引用和数字代码组成,可由机器的硬件读取和执行。
这里有一张图,解释了Java字节码是如何实现平台独立的。
3。JIT及时编译器
说到编译,这里是Java的另一张王牌即时编译器(JIT)编译器)。将字节码转换为本地机器语言执行的方式对它的速度有很大影响。JIT编译器与Java虚拟机(JVM)互动,将Java字节码序列变成本地机器代码。
重要的是,JIT编译器是按需编译代码的。这意味着,它只编译正在被调用的方法。这大大提高了整体效率,节省了时间。
在使用JIT编译器时,计算机硬件能够直接执行本地代码,而不是让JVM一次又一次地解释同一序列的字节码。如果编译后的方法被频繁地执行,这可能会导致大量的性能提升。
更重要的是,JIT编译器在编译为本地机器语言的同时,还能进行很多简单的优化。其中一些优化包括数据分析、从堆栈操作到寄存器操作的转换、通过寄存器分配减少内存访问,以及消除常见的子表达式。
4。多线程能力
Java是一种能够在语言层面上实现多线程的技术。多线程允许程序在多个计算核心和线程上执行并发的计算。更重要的是,多线程应用程序可以保持对输入的响应,即使是在执行长期运行的任务时。
多线程现在比以往任何时候都更重要,特别是当硬件公司正在发布越来越强大的企业级CPU,如新披露的Zen4Epyc处理器,提供令人震惊的192个计算线程。
区分多线程和多处理也很关键。第一个术语指的是在多个CPU线程上并发执行计算的能力。另一方面,后者指的是一个系统同时运行多个处理器的能力,其中每个处理器可以操作多个线程。
一般来说,多线程是首选,因为CPU线程使用一个共享的内存区域,这有助于节省内存,并允许稍快的内容切换。
5。垃圾收集
最后但并非最不重要的是,我们必须涵盖Java的垃圾收集。简而言之,它是Java程序进行自动内存管理的过程。当Java程序在JVM上运行时,对象在堆上被创建,但最终,其中一些对象将不再被需要。
垃圾收集器会自动检测这些未使用的对象并将其删除,在此过程中释放出宝贵的内存资源。
在Java中执行垃圾收集过程有三个阶段。检查是否符合条件
如果一个对象无法到达,就有资格进行垃圾收集(GC)。我们可以区分四种使Java对象符合垃圾收集条件的主要方式。
重新分配指针变量EmployeeemployeeOnenewEmployee();
EmployeeemployeeTwonewEmployee();
employeeOneemployeeTwo;thefirstobjectreferredbyemployeeOneisavailableforgarbagecollection
删除指针变量EmployeeemployeenewEmployee();
employeenull;
使用匿名对象
register(newEmployee());
隔离岛(一组相互引用的对象,但不被应用程序中的任何活动对象所引用)。请求JVM运行垃圾收集器
请求JVM运行垃圾收集器可以通过两种主要方式设置。使用System。gc()方法System类包含静态方法gc(),用于请求JVM运行垃圾收集器。使用Runtime。getRuntime()。gc()方法Runtime类允许应用程序与运行该应用程序的JVM接口。通过使用其gc()方法,我们可以请求JVM运行GC。
最终化
在删除一个对象之前,垃圾收集器对该对象使用finalize()方法来执行最后的清理活动。一旦finalize()方法完成,GarbageCollector就会删除该对象。Java是如何实现高性能的总结
Java实现了高性能的软件开发,这是其他编程语言无法做到的。所有的开发人员都应该确保他们正在开发的Java程序能够充分发挥其能力,并正确利用这种奇妙的编程语言所提供的所有工具。
6秒55!陈冠峰室内60米亚洲赛季最好成绩3月16日,在天津进行的2023年全国室内田径锦标赛男子60米决赛中,来自广东的短跑新锐陈冠峰跑出6秒55夺冠。这一成绩不仅创造了他的个人最佳PB,也成为亚洲本赛季目前室内60米的
西湖之行这家博物馆不容错过近十几年来,各地博物馆不少都建了新馆舍,观众观展体验也大为提升。在新馆建立后新老馆舍并用的不太多,这里就有浙江省博物馆。虽然没有新馆高大宽绰,但浙博老馆已成为浙江历史的一部分,这样
知道吗?古人春游比我们更隆重春光明媚,新柳青青,天气和暖,正是一年中最惬意的时节。虽说春光无处不在,但约上三五好友,出游踏青,也是不错的休闲方式。我国的踏青传统由来已久,对古人来说,踏青是他们春季重要的娱乐活
逢山开路遇水架桥,在汉央企承建的恩施州花园堡开花了长江日报大武汉客户端3月16日讯3月16日,风和日丽,恩施州宣恩县园艺村山上的花园堡建成后迎来了第一波游客。作为湖北省唯一一个以县城核心区域为支撑的AAAA级风景区,近年来把旅游业
全国现代五项冠军赛广州站收官,鄂军收获3银1铜极目新闻通讯员省体宣3月15日,2023年全国现代五项冠军赛广州站顺利收官。湖北队斩获3银1铜,男子团体实现了突破。本次比赛是巴黎奥运周期现代五项比赛规则变化后,国内举办的首场专业
全国攀岩锦标赛在全南火热开赛来源人民网江西频道人民网全南3月16日电(陈逸飞)16日上午,伴随着一声声助威呐喊,第二十九届全国攀岩锦标赛暨巴黎奥运会国家攀岩集训队选拔赛在中国(全南)攀岩小镇火热开赛,这是该项
投资年会以色列分会场探索软硬互补,共享生物医药产业发展机遇南方财经全媒体记者丁莉广州报道当地时间3月15日上午,第九届中国广州国际投资年会以色列分会场在特拉维夫通过线上线下形式举行。以色列工贸部原部长首席科学家办公室主任苏格基莱特曼博士,
麦清生物李翰林董事长董事长李翰林江苏麦清生物科技有限公司坐落在美丽的养生之都,彭祖文化发源地徐州文博园区内。公司成立于2017年,是一家集科技创新,自主研发拥有多项专利的综合服务公司。我们依托大健康产
发车了!与山东好品一起坐着高铁环游齐鲁闪电新闻直播直播编辑史仍建今年,山东省委省政府作出建设文化体验廊道推进文旅融合高质量发展的重大部署。百年胶济铁路贯通山东两纵两横一环双核高铁网,沿着百年胶济铁路线,可以体验儒家文化齐文化黄河文
解读ahooks源码系列DOM篇(二)前言本文是ahooks源码系列的第二篇,往期文章httpswww。toutiao。comitem7210967895680057867本文主要解读useEventTargetuse
使用有益菌群恢复生物多样性的安全步骤刊登于科学进展的一项新研究显示,用有益细菌组成的益生菌来治疗珊瑚,可以在白化后提高珊瑚存活率。这种使用有益细菌来增强物种耐受性的方法也用于其他物种。近日,中国生物多样性保护与绿色发