新闻详细
新闻当前位置:新闻详细

Java用什么编译器?,Java对象头压缩---- 永久为Java应用“降本增效”

专业互联网培训机构——完成蜕变以后轻松拿高薪

电话+V: 152079-09430 ,欢迎咨询java核心技术使用什么编译器好呢,[python实用课程],[C++单片机原理],[C#、PHP网站搭建],[Nodejs小程序开发],[ios游戏开发],[安卓游戏开发],[教会用大脑用想法赚钱实现阶层跨越]

一、java核心技术使用什么编译器好呢

在Java核心技术的编译过程中,选择一个合适的编译器是至关重要的。下面将详细列出一些关于选择Java编译器的重点:

1.稳定性:一个好的编译器首先应该稳定可靠,能够保证程序的稳定性和可靠性。这意味着在编译过程中不会产生意外的错误或异常。

2.兼容性:编译器需要与各种Java版本和不同的操作系统兼容。这对于跨平台开发尤为重要,确保代码能够在多个环境中正确运行。

3.性能优化:优秀的编译器会提供一定程度的性能优化功能,以提高生成代码的执行效率。这包括对垃圾回收、内存分配等方面的优化,以及消除冗余代码等。

4.错误检测:编译器应当能够准确地检测出代码中的错误,并给出清晰的错误提示。这有助于开发人员快速定位问题并修复。

5.可定制性:一个好的编译器应该允许用户进行自定义设置,以满足特定的需求。例如,可以调整编译选项以控制代码的生成方式。

6.集成环境支持:编译器应能够与其他工具和框架无缝集成,以便更好地适应现有的开发环境和流程。

7.社区支持:一个强大的社区支持可以为编译器带来额外的优势。开发者可以从社区中获取帮助、共享经验和解决问题。

8.易用性:编译器的用户界面应当友好易用,方便开发者进行编译操作。同时,提供详尽的文档和教程也是必要的。

9.开源与否:根据项目需求,选择开源或商业编译器。开源编译器通常更加灵活,而商业编译器则提供更专业的支持和服务。

二、Java用什么编译器?

常用的就是Eclipse,MyEclipse,idea这三种,MyEclipse相对于其他两种不是很常用

Java对象头压缩----永久为Java应用“降本增效”

阿里技术

2024-03-1908:30发布于浙江阿里技术官方账号

+关注

阿里妹导读


本文介绍了一下OpenJDK的最新技术,对象头压缩,来大幅优化Java对象的内存占用。

前言

Java丰富的生态和语言强大的内存管理技术(GC),使得Java应用的开发非常便捷,各类应用场景的适配都非常优秀,大大减少了从Idea到应用落地的难度。不过这一切也不是没有代价的,针对于Java应用内存占用比较高的问题一直拿出来和其他语言比较。虽然JVM已经自带了例如指针压缩(compressedoops)来节约内存开销,不过JavaObject对象头本身占用的内存还是非常可观。本文就介绍一下OpenJDK的最新技术,对象头压缩,来大幅优化Java对象的内存占用。目前这个技术尚未在Java语言官方实现OpenJDK中正式发布,但是Dragonwell11已经率先应用,请参考JDK发布指南:Dragonwell11releasenotes[1]。

Java对象头压缩JEP450:CompactObjectHeaders

Java对象头压缩技术,已经创建官方的JEP[2]。JEP源自ShenandoahGC的projectleadRomanKenne创建的Lilliput:https://openjdk.org/projects/lilliput[3]。(Lilliput意为《格列佛游记》中的小人国,含义不言而喻)


Java的对象布局

Compactobjectheaders的核心逻辑是将单独的narrowklass指针(压缩class指针)encode在基础的对象头的第一个word:markword中,释放原先单独占用一个word的narrow-klass/klass指针的空间,从而实现对Java对象头整体的压缩和内存占用优化。我们可以看到java.lang.Long对象应用对象头压缩后,内存占用从24bytes减少到16bytes,减少了1/3。由于原始layout的java对象头需要支持biasedlocking以及CMSGC,需要预留更多的unusedbits,所以使用对象头压缩无法支持biasedlocking以及CMS。(注:biasedlocking在JDK17中默认关闭,JDK21+中删除,CMSGC在JDK17+中删除)

“EarlyadoptersofProjectLilliputwhohavetrieditwithreal-worldapplicationsconfirmthatlivedataistypicallyreducedby10%–20%.”

JEP中提到,早期的项目试用者在实际应用中发现内存占用下降10-20%。


JEP450:CompactObjectHeaders依赖的

主要实现

JDK-8291555[4]

使用了一个stacklocking的替换方案,代替了原先的stacklocking。原先的stacklocking需要将objectmarkword交换到stack上,而产生remoteobjectheader的情况,压缩对象头后,频繁lock/unlock会无法稳定获取klass指针。

JDK-8305896[5]

在G1等的FullGC中,objectmarkword会用来保存forwardoop,从而在GC过程中,将无法正确获取class指针,因此,需要有额外的机制来保存forwardoop。

JDK-8305898[6]

在G1/ParallelGC等的gc过程中,如果出现evacuationfailure,将产生selfforwarding的情况,对象头会用来存放自身对象指针(oop),也会引起class指针无法读取,因此需要换一种方法,使用selfforwardbit来标注java对象(oop)在gc过程中是否selfforwarding。

JDK-8305895[7]

JEP450主体实现。完成了由+/-UseCompactObjectHeaders控制的对象头压缩的实现。

JDK-8328138(阿里巴巴Propose)[8]

修复了因为对象头压缩引起的ARM服务器Arrays.equals的潜在crash问题,并提升ARM服务器Arrays.equals的性能。

java核心技术使用什么编译器好呢

UseCompactObjectHeaders实测效果

DragonwellJDK的UseCompactObjectHeaders,进行了完善JDK回归测试,并在多个主流核心场景中进行了验证,主要有如下几个典型的优势:

1.Java对象内存占用减少5-10%左右

2.Java新分配对象内存占用(allocationrate)和GC频率降低5-10%左右

3.CPU和基础吞吐性能基本保持一致,部分内存带宽使用较高的场景中,显著提升吞吐性能(例如SPECjbb2015和Flink)


SPECjbb2015

在SPECjbb2015基准测试中(倚天平台),max(极限吞吐)和critical(低延迟要求吞吐)分别提升6.17%和9.01%。


Flink大数据

Flink的基准benchmarknexmark在倚天平台下,平均吞吐提升约10%。阿里云的客户实测得到近似的优化效果。


淘宝天猫电商核心应用

淘宝天猫电商核心系统,实测G1youngGC频率降低约7%。

对象头压缩CompactObjectHeadersFAQ

1.如何使用对象头压缩功能?在支持该功能的Dragonwell11的JDK版本中,增加启动参数-XX:+UseCompactObjectHeaders,仅支持-XX:+UseG1GC(默认)和-XX:+UseParallelGC

2.为何OpenJDK官方未发布的技术,已经在Dragonwell11中发布,使用会有什么潜在风险吗?目前的Compactobjectheaders的实现无法支持ZGC,ZGC支持依赖的JDK-8315884的实现尚未完成。同时Lilliput在Objectheader上的改动关系到Java未来重点项目Valhalaproject(ValueObject)对Objectheader的定义,还没有明确定论。因此OpenJDKCompactobjectheaders的正式发布还没有确切时间表,并非受制于本身技术实现。不过这并不影响我们在当前的JDKLTS版本中落地该技术,Dragonwell11在支持Compactobjectheaders时,仅支持最常用的默认G1GC以及ParallelGC。目前在阿里内部各类场景中大规模使用,均未发现风险。

参考链接:

[1]https://github.com/dragonwell-project/dragonwell11/wiki/阿里巴巴Dragonwell11-Extended发布说明[2]https://openjdk.org/jeps/450
[3]https://openjdk.org/projects/lilliput[4]https://bugs.openjdk.org/browse/JDK-8291555[5]https://bugs.openjdk.org/browse/JDK-8305896[6]https://bugs.openjdk.org/browse/JDK-8305898[7]https://bugs.openjdk.org/browse/JDK-8305895[8]https://bugs.openjdk.org/browse/JDK-8328138

【FUTURE PROGRAMMING COURSE】尊享对接老板

电话+V: 152079-09430

机构由一批拥有10年以上开发管理经验,且来自互联网或研究机构的IT精英组成,负责研究、开发教学模式和课程内容。公司具有完善的课程研发体系,一直走在整个行业发展的前端,在行业内竖立起了良好的品质口碑。

java核心技术使用什么编译器好呢
Copyright2023未知推广科技