![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
文章平均质量分 83
csdn_1107
这个作者很懒,什么都没留下…
展开
-
为什么重写equals方法时必须重写hashcode方法
如果你在 equals() 方法中使用对象的字段进行比较,而在 hashCode() 方法中没有使用相同的字段,那么两个相等的对象可能会产生不同的哈希码,导致在集合等数据结构中无法正确找到对象。一致性: 如果两个对象通过 equals() 方法比较是相等的,那么它们的 hashCode() 方法应该返回相同的值。不一致性: 如果两个对象通过 equals() 方法比较是不相等的,它们的 hashCode() 方法返回相同的值是允许的,但这可能导致哈希表中的冲突增加。原创 2023-11-13 09:46:07 · 57 阅读 · 0 评论 -
编译器优化技术
1.方法内联定义:从代码层面看就是把目标方法的代码原封不动地“复制”到发起调用的方法之中,避免发生真实的方法调用而已。每一个方法从调用开始至执行结束的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。每一个栈帧都包括了局部变量表、操作数栈、动态连接、方法返回地址和一些额外的附加信息。调用某个函数实际上将程序执行顺序转移到该函数所存放在内存中某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。在方法退出之后,都必须返回到最初方法被调用时的位置,程序才能继续执行。这种转移操作要求保护原创 2020-12-14 10:26:17 · 145 阅读 · 0 评论 -
JDK8方法区及常量池的变化
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,所管理的内存将会包括以下几个运行时数据区域:(图片来源于《深入理解Java虚拟机》)方法区的定义:jdk8虚拟机规范中对方法区的定义:方法区是各个线程共享的内存区域,它存储每个类的结构信息,例如运行时常量池,字段(通过引用常量池中的常量来描述)和方法等数据,以及方法和构造函数的代码,包括用于类和实例初始化以及接口初始化的特殊方法。其中灰色部分:方法区域是在虚拟机启动时创建的。尽管方法区域在逻辑上是堆的一部分,原创 2020-11-26 14:22:43 · 2215 阅读 · 0 评论 -
Java变量
java中的变量按类型可以分为基本数据类型变量和引用类型变量。按作用域可以分为局部变量、实例变量和类变量(static)。局部变量:局部变量在方法中定义,引用类型变量:例如Cat tom=new Cat();其中引用类型变量tom存在与虚拟机栈中,对象new Cat()存在与堆中;基本数据类型变量:int a=1;a和1都存在于虚拟机栈中;实例变量:实例变量不会独立于对象而存在,其中:引用类型变量:private Cat tom=new Cat();存在与堆中。基本数据类型变量:priva原创 2020-11-24 19:01:24 · 94 阅读 · 0 评论 -
虚拟机字节码执行引擎
1.栈帧Java虚拟机以方法作为最基本的执行单元,“栈帧”(Stack Frame)则是用于支持虚拟机进行方法调用和方法执行背后的数据结构,它也是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack)的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息,从Class文件格式的方法表中找到以上大多数概念的静态对照物。每一个方法从调用开始至执行结束的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。在编译Java程序源码的时候,栈帧中需要多大的局部变量表,需原创 2020-11-02 15:57:07 · 96 阅读 · 0 评论 -
类加载过程
Java类加载机制:Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。类加载过程:为支持运行时绑定,解析过程在某些情况下可在初始化之后再开始,除解析过程外的其他加载过程必须按照如图顺序开始。1.加载通过全限定类名(符号引用?)来获取定义此类的二进制字节流。将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。在内存中生成一个代表这个类的 java.lang.Class 对原创 2020-10-28 17:08:26 · 80 阅读 · 0 评论 -
JVM垃圾收集器
HotSpot垃圾收集器原创 2020-10-20 21:02:14 · 62 阅读 · 0 评论