首页
学习
活动
专区
圈层
工具
发布

【八股文Java】: Java对象的hashCode()值是可变的吗?发生GC之后会变吗?为什么?hashCode值如何生成?

问:Java对象的hashCode()值是可变的吗?发生GC之后会变吗?为什么?hashCode值如何生成? 答:Java对象的hashCode()默认实现是不可变的,即使GC之后也不会变。...默认openjdk源码 版本jdk-jdk-21-ga下的实现为 A variation of Marsaglia's shift-xor RNG scheme (Marsaglia XORshift随机数算法...---- 附: 默认Java对象的hashCode()方式的实现跟踪源码(openjdk源码 版本jdk-jdk-21-ga): 1、寻找注册的hashCode的native方法: (src/hotspot.../share/classfile/vmIntrinsics.hpp) (/src/hotspot/share/classfile/javaClasses.cpp) (src/hotspot/share...HashCode的生成策略: 上述找到的ObjectSynchronizer::FastHashCode方法实现部分代码: HashCode的生成方法: 可以看到HashCode的生成有好几种策略,此openjdk

1.3K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    微服务中使用 OpenJ9 JVM 内存占用降60%(相对HotSpot)

    2018.8 发布 0.9.0:支持 OpenJDK 10;对Docker容器支持更友好;在运行一些Eclipse性能测试时,比HotSpot JVM快 43%,少用42%的内存. 2018.10 发布...0.10.0:支持 OpenJDK 11,开始适配 HotSpot JVM的一些参数配置 2018.10 发布 0.11.0:改善AOT性能、针对运行在容器中的应用内存优化、 “pause-less”...但状态稳定后,使用 OpenJ9 的OpenJDK 8 比使用 HotSpot 的 OpenJDK 8 减少了约 63% 的物理内存。 ?...基于 Open JDK8 (HotSpot) 时内存消耗稳定在 1G左右。 ? 基于 OpenJDK8(OpenJ9)时内存消耗稳定在 300M左右。 ?...切换到 OpenJ9 便利吗 如果使用Docker,直接更换基础镜像即可,容器场景下更能发挥 OpenJ9 的作用。

    5.5K30

    25 张图 | 深入浅出「偏向锁」

    上面我们用到的 JOL 版本为 0.14, 带领大家快速了解一下位具体值,接下来我们就要用 0.16 版本查看输出结果,因为这个版本给了我们更友好的说明,同样的代码,来看输出结果: 吗?...最终就是,JDK 15 之前,偏向锁默认是 enabled,从 15 开始,默认就是 disabled,除非显示的通过 UseBiasedLocking 开启 偏向锁入口:http://hg.openjdk.java.net.../jdk8u/jdk8u/hotspot/file/9ce27f0a4683/src/share/vm/interpreter/bytecodeInterpreter.cpp#l1816 偏向撤销入口:...http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/9ce27f0a4683/src/share/vm/interpreter/interpreterRuntime.cpp...#l608 偏向锁释放入口:http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/9ce27f0a4683/src/share/vm/interpreter

    1.3K11

    JDK(Java)安装教程,LinuxWinMacOS

    版本的Windows版ZIP包,下面以JDK17为例,下载地址:https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/17/jdk/x64/windows/OpenJDK17U-jdk_x64..._windows_hotspot_17.0.1_12.zip 然后将下载到的ZIP压缩包解压到你要安装的目录,我这里解压到F盘,进入解压的JDK目录,把路径复制下来。...右键点击此电脑→属性→高级系统设置→环境变量 新建→变量名输入 JAVA_HOME →变量值输入你上面复制的JDK目录,我的是 F:\jdk-17.0.1+12 如下图所示。...wget https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/16/jdk/x64/linux/OpenJDK16U-jdk_x64_linux_hotspot..._16.0.2_7.tar.gz # 解压当前目录下的JDK压缩文件到安装目录,将下面压缩包名字替换成你下载的 tar -zxvf OpenJDK16U-jdk_x64_linux_hotspot_16.0.2

    2.6K40

    美团架构师探秘Java生态系统,介绍JDK、JVM、JEP

    HotSpot VM 横看成岭侧成峰,远近高低各不同。不同的人从不同的角度看到的HotSpot VM也不尽相同。 从Java应用开发者的角度出发,虚拟机如图1-1所示。...源码模块 本文主要描述位于openjdk/src/hotspot目录的Java虚拟机HotSpot VM的实现。HotSpot VM根据目录可以分为很多模块,每个模块的功能大致如下。...为了方便读者自行尝试,这里给出在三大主流操作系统上构建OpenJDK和断点调试HotSpot VM的方式。 1..../configure --enable-ccache --witt-debug-level=fastdebug $ make all # or make hotspot 一切完成后, openjdk12.../jtreg -jdk: openjdk/test/hotspot/jtreg/TestDummy.java Test results: passed: 1 如果测试成功,则会看到

    1.3K20

    一个hashCode问题的追问,差点让我陷入无底洞

    主要说明了以下内容 随着讨论的进行,问题慢慢集中在内存溢出和内存泄漏的问题上 内存溢出 VS 内存泄漏 这两个词在中文解释上有些相似,至少给我的第一感觉,他们的差别是这样的(有人和我一样吗?)...咱也是一个有身份证的人,不能总讲大白话,相对官方的内存泄漏解释是这样滴: 内存泄漏说明的是这样一种情况:堆中存在一些不再使用的对象,但垃圾收集器无法将它们从内存中删除(垃圾收集器定期删除未引用的对象,但从不收集仍在引用的对象.../jdk6/hotspot/file/5cec449cc409/src/share/vm/runtime/globals.hpp#l1128 [3]JDK1.7代码: http://hg.openjdk.java.net.../jdk7u/jdk7u/hotspot/file/5b9a416a5632/src/share/vm/runtime/globals.hpp#l1100 [4]OpenJDK Wiki: https:...//wiki.openjdk.java.net/display/HotSpot/Synchronization [5]默认hashCode生成方式: https://srvaroa.github.io/

    89140

    GC时对象地址变了,hashCode如何保持不变?

    前言 前几天跟朋友交流,引出了一篇文章《GC复制存活对象,它内存地址变了么?》,我们得知在Hotspot虚拟机下,当GC发生时,对象的地址是会发生变化的。...但我们知道,JVM进行GC操作时,无论是标记复制算法还是标记整理算法,对象的内存地址都是会变的。但hashcode又要求保持不变,JVM到底是如何实现这一功能的呢?...对此以Hotspot为例,最直接的实现方式就是在对象的header区域中划分出来一部分(32位机器上是占用25位,64位机器上占用31)用来存储hashcode值。...、7中使用的是随机数生成器的(第0种)方式,OpenJDK8、9则采用第5种作为默认的生成方式。...那么,如果一个类的hashCode方法被重写了,那么是否还可以获得原始的hashcode吗?

    1.2K20

    imx8开发板_安卓反编译教程

    ,jdk不行必须要openjdk 系统可能已经安装了Sun, Oracle,jdk,可通过如下方法卸载再安装openjdk sudo apt-get update sudo apt-cache search...evk_8mq-userdebug $ make -j8 2>&1 | tee build-log.txt 运行完source build/envsetup.sh后会提示vender/nxp的一些数据无法复制...,此时手动复制过去即可 编译到4%的时候有个错误,是bision报的的一个依赖错误Libstdc++.so.6,这是一个32位的库,64位的ubuntu报错 sudo apt-get install lib32stdc...++6 接着一路很顺利的编译通过 后记 如何看本地安装的jdk是Sun/Oraclejdk还是Openjdk,输入 java -version显示的版本信息为 如果是Openjdk openjdk version...如果是Sun/Oraclejdk java version “1.7.0_60” Java(TM) SE Runtime Environment (build 1.7.0_60-b19) Java HotSpot

    55610

    (1)JVM——在 Ubuntu 上手动编译 OpenJdk12

    本篇博客主要是实现使用在 Ubuntu 系统上自己编译 OpenJdk,在后面的学习中会用到。...:编译过程中需要使用 GCC、FreeType、CUPS等,包括编译 OpenJdk 版本的上一个版本(因为源码有些是 Java 代码写的,需要 jdk 来编译),此处是安装 OpenJdk11。...// 编译FastDebug版,仅含Server模式的HotSpot虚拟机 bash configure --enable-debug --with-jvm-variants=server 如果检查有缺失的项目...验证:此时进入源码目录下的 build/OpenJdk配置名称/jdk ,可以看到编译完成后的 jdk 结果,此处的内容可以直接复制出来使用,就是一个完整的 jdk。目录如下图: ?.../java -version 可以看到我们编译的 OpenJdk 版本信息 ? 到此我们手动编译 OpenJdk 就完成了,后面文章将会介绍调试源码。

    1.5K20

    ❤你确定不来看看?JVM青铜段位笔记(一)❤

    一、JVM与Java体系结构 1.1、前言     作为Java工程师的你曾被伤害过吗?你是否也遇到过这些问题?...同年,Java 开源并建立了 OpenJDK。顺理成章,Hotspot 虚拟机也成为了 openJDK 中的默认虚拟机。 2007 年,Java 平台迎来了新伙伴 Clojure。...不管是现在仍在广泛使用的JDK6,还是使用比例较多的JDK8中,默认的虚拟机都是HotSpot,Sun / Oracle JDK 和 OpenJDK 的默认虚拟机,从服务器、桌面到移动端、嵌入式都有应用...它是IBM和Intel联合开发的开源JVM,受到同样开源的OpenJDK的压制,Sun坚决不让Harmony获得JCP认证,最终于2011年退役,IBM转而参与OpenJDK。     ...是整个阿里Java体系的基石,基于OpenJDK Hotspot VM发布的国内第一个优化、深度定制且开源的高性能服务器版Java虚拟机。

    64230

    借助JVM生日的时机,说说关于JVM你所不知道的那些事

    基于以上特性,新生代中一般采用复制算法,因为存活下来的对象是少数,所需要复制的对象少,而老年代对象存活多,不适合采用复制算法,一般是标记整理和标记清除算法。...2.Sun HotSpot VM** 提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。...在2006年的JavaOne大会上,Sun公司宣布最终会把Java开源,并在随后的一年,陆续将JDK的各个部分(其中当然也包括了HotSpot VM)在GPL协议下公开了源码,并在此基础上建立了OpenJDK...这样,HotSpot VM便成为了Sun JDK和OpenJDK两个实现极度接近的JDK项目的共同虚拟机。...问:一个机器上可以看多个JVM吗?JVM之间可以互访吗? 答:可以多个JVM,只要机器承受得了。JVM之间是不可以互访,你不能在A-JVM中访问B-JVM的Heap内存,这是不可能的。

    52030
    领券