自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 0基础-轻松掌握八大排序(上)

冒泡排序、简单选择排序、插入排序介绍、原理和执行过程

2022-12-16 20:28:11 95

原创 ==和equals的区别

2.判断输入的对象是不是字符串类型,如果不是直接返回false;如果是,再将两个字符串一个字符一个字符比较是否相等,如果相等返回true。,比如String类,重写equals方法,方法内部比较的是字符串中各个字符是否全部相等。1.先判断两个对象的引用地址是否相等,相等返回true。自定义类中是比较引用地址是否相等,相等返回ture。

2022-12-15 11:36:33 111 1

原创 重写equals方法为什么一定要重写hashcode?

User类中有个name属性,重写了equals方法,来验证两个对象是否相等,只要他们的name值相等,就认为这两个对象相等。并没有找到上面存入的对象所对应的值,说明只改写equals方法不能判断两个对象是否相等。如果重写equals方法就能判断两个对象是否相等,那执行的结果一定是能找到!所以重写equals方法,一定要重写hashcode方法!尝试加入重写hashcode方法后,结果如何?

2022-12-14 15:24:01 162

原创 JVM中的CMS收集器

​CMS收集器CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器;这款收集器是HotSpot虚拟机中第一款真正意义上支持并发的垃圾收集器,首次实现了让垃圾收集线程与用户线程(基本上)同时工作。适用于:互联网网站或者基于浏览器的B/S系统的服务端基于标记-清除算法实现的,具体步骤分为4步:1.初始标记:Stop The World -> 标记一下GC Roots能直接关联到的对象,速度很快2.并发标记:从GC Roots的直接关联对象开始遍

2022-12-13 11:59:47 175

原创 垃圾回收算法

​垃圾收集算法标记-清除标记出所有需要回收的对象,在标记完成后,统一回收掉所有被标记的对象,也可以反过来,标记存活的对象,回收未标记的对象。后续的收集算法大多都是以此为基础,对其缺点做优化。缺点:1.执行效率不稳定如果java堆中的对象过多,导致标记和清除两个过程的执行效率都随对象数量增长而降低;2.内存空间的碎片化问题标记、清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致当以后在程序运行过程中需要分配较大对象时无法找到足够的连续内存而不得不提前触发另一次垃圾收集

2022-12-13 11:45:47 63

原创 JVM中对象的四种引用关系

### 四种引用#### 强引用无论任何情况下,只要强引用关系还存在,垃圾收集器就永远不会回收掉被引用的对象,使用 new 一个新对象的方式来创建强引用。```javaObject obj = new Object();```#### 软引用软引用是用来描述一些还有用,但非必须的对象。只被软引用关联着的对象,在系统**将要发生内存溢出异常前**,会把这些对象列进回收范围之中**进行第二次回收**,如果这次回收还没有足够的内存, 才会抛出内存溢出异常。在JDK 1.2版之后提供了S

2022-12-12 11:47:03 63

原创 如何判断对象生死?什么时候宣告对象死亡?

在对象中添加计数器,引用一次+1,有个引用销毁就-1;直到计数器中的数值为0,该对象死亡。优点:实现简单,效率很高缺点:会出现循环引用问题,不好处理(对象A引用对象B,对象B引用对象A,AB的计数器永远不会是0,AB永远不会被回收) GCroot根对象作为起始节点集,按照引用关系向下搜索,搜索过程中所走的路径为引用链;如果一个对象和GCroot之间没有任何一条引用链,即该对象死亡。哪些可以作为GCRoot?在虚拟机栈中引用的对象:各个线程被调用的方法堆栈中使用到的 参数、局部变量、临时变量等方法区中类

2022-12-07 16:47:11 195

原创 JVM内存分布策略及在堆中的布局

顺序分配,分配与未分配之间添加一个指针,每次分配时,指针往后移动需要的空间即可优点:操作简单缺点:要求堆空间要规整;多线程下效率不高按需分配,需要一张表记录分配情况优点:需要一个列表做存储缺点:产生了空间碎片问题,大对象存入时会出现无连续空间问题在HotSpot虚拟机里,对象在堆内存中的存储布局可以划分为三个部分:2.1.1 Mark Word存储对象自身的运行时数据:哈 希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。使用Mark Word(一个有着动态定义的

2022-12-07 16:34:34 151

原创 JVM运行时数据区域

所谓的JVM运行时数据区域,就是JVM数据部分每块存的都是什么?下面就来详细说说主要分为两大部分,线程之间共享和线程独有。存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。JDK 7的HotSpot,已经把原本放在永久代的字符串常量池、静态变量等移出,而到了JDK 8,终于完全废弃了永久代的概念,改用与JRockit、J9一样在本地内存中实现的元空间。Java堆(Java Heap)是虚拟机所管理的内存中最大的一块。此内存区域的唯一目的就是存放对象实例。Java堆是垃圾收集器管

2022-12-07 15:13:48 70

原创 Java1.6/1.7/1.8版本中字符串常量池的位置变化

Jdk1.6及之前: JVM存在永久代, 运行时常量池在永久代,运行时常量池包含字符串常量池Jdk1.7:有永久代,但已经逐步“去永久代”,字符串常量池从永久代里的运行时常量池分离到堆里Jdk1.8及之后: 无永久代,变成了元空间,运行时常量池在元空间,字符串常量池依然在堆里

2022-12-07 15:06:59 619

原创 JavaDoc命令生成JDK帮助文档

1. 利用hello world 演示javadoc生成jdk帮助文档。2.编译java文件,执行.class文件,使用doc命令生成jdk帮助文档。3.打开index.html,页面中会显示出该类的详细信息。@since 这个java类最早支持到哪个版本使用。//可以通过javadao命令直接编译出来。执行完doc命令,文件夹中就会出现这些个文件。@version 版本号。@throws 抛出异常。@return 返回值。@author 作者。@param 入参。

2022-11-22 11:08:49 461

原创 0基础小白入门-SpringBoot项目搭建

SpringBoot项目搭建1.新建项目2.选择依赖项3.配置thymeleaf4.将resources下的applcation.protisies后缀改成.yml5.按照下图建好各个层级(dao,service,serviceImpl,model,controller、mapper层)6.配置mybatis

2022-10-08 23:14:47 408

原创 0基础-JVM对象内存布局

​对象内存布局存储对象分为三部分: 1. 对象头Mark Word是一个有着动态定义的数据结构,前面的标志位不同,表示着不同的状态。Java虚拟机通过这个指针来确定该对象是哪个类的实例。如果对象是个java数组,对象头中还需要有一块用于记录数组长度的数据,对象是数组对象头有3样东西,其他都是2样。 2. 实例数据对象a中的全部信息,private int id; 3. 对齐填充这并不是必然存在的,也没有特别的含义,它仅仅起着占位符的作 用。由于HotS

2022-10-08 22:23:06 114

原创 0基础-JVM运行时数据区域详解

本地方法栈与虚拟机栈所发挥的作用是非常相似的,其区别只是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的本地(Native) 方法服务。举个例子:给一个绳上绑一个计数器,记录每根绳子跳的次数,绳之间互不影响,也不会造成内存溢出。此内存区域的唯一目的就是存放对象实例,Java 世界里“几乎”所有的对象实例都在这里分配内存。对象引用类型,不是指对象本身,可能是指向对象起始地址的引用指针。的数据会占用两个变量槽,其余的数据类型只占用一个。,更多情况下指的是虚拟机栈中的。

2022-10-08 22:05:28 137

原创 JVM内存分配策略及并发安全性考虑

(顺序分配,分配一块,接着分配下一块,分配过和未分配的中间有个指针,每次要分配时向后挪动指针,这一块块都是挨着的)采用哪个方法取决于java堆是否规整,如果都是紧挨着的采用指针碰撞,如果分配区中包含未分配的空间,则使用空闲列表。(按需分配,分配连续空间,分配的空间不一定是挨着的,中间可能会隔着,使用一个列表记录分配情况)创建了一个Student的对象,为他分配空间,jvm又是如何分配呢?1.检查类是否存在,是否被加载,如果没有,先进行类加载。1.CAS配上失败重试。要求空间一定是规整的。

2022-10-08 21:22:20 284

原创 自学整理--0基础入门:操作系统内核的产生

目录一、早期机器语言的产生二、汇编语言的产生三、C语言的产生四、驱动的产生五、操作系统内核?程序为什么能在操作系统安装?不同版本的操作系统是否会影响程序的安装一、早期机器语言的产生 机器语言可以类比成碱基对 假设来回的总线宽度为4,可以传输四种不同的电压信号,则会产生16种不同的状态,发送方可以发出16种,接收方可以设置返回16种或8种变化(变化的形成:半导体(小云彩里有很多半导体),电压高会成为导体,电压低会成为绝缘体,因此会返回不同的电压信号)...

2022-04-13 11:49:13 1048

原创 关于m++和++m的那些事

相信很多小伙伴们都被m++、++m整蒙过,到底什么时候+1啊,当然这个问题也困扰过小编。今天小编就带领大家看看他的真面目!咱们先来看个代码,小试牛刀一下:public class FristSample{ public static void main(String[] args){ int a = 0; for(a++ > 0){ System.out.println(a + "###");

2022-03-12 17:09:02 4088 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除