自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JVM垃圾回收机制

根搜索算法的中心思想,就是从某一些指定的根对象(GC Roots)出发,一步步遍历找到和这个根对象具有引用关系的对象,然后再从这些对象开始继续寻找,从而形成一个个的引用链(其实就和图论的思想一致),然后不在这些引用链上面的对象便被标识为引用不可达对象,也就是我们说的“垃圾”,这些对象便需要回收掉。一个对象被创建之后,系统会给这个对象初始化一个引用计数器,当这个对象被引用了,则计数器 +1,而当该引用失效后,计数器便 -1,直到计数器为 0,意味着该对象不再被使用了,则可以将其进行回收了。

2024-03-27 13:30:37 341 1

原创 JVM类加载机制

如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式。Bootstrap classLoader:虚拟机的内置类加载器,通常表示为null ,并且没有父null。类加载的过程: 加载、验证、准备、解析、初始化。将这个类加载到内存中。

2024-03-21 01:29:15 592 1

原创 Spring bean的生命周期

当不再需要bean时,或者当容器关闭时,如果bean实现了' DisposableBean '接口或使用' @PreDestroy ',则分别调用' destroy() '或带注释的方法,自定义销毁方法配合bean标签属性。执行以上5步骤实例化并初始化的bean对象保存到singletonObjects中,开始进行业务操作。Bean 是指在 Spring 容器中被管理的对象,它们可以。bean对象id所对应的bean对象本身。bean的实体类实现aware接口常用方法。

2024-01-08 02:29:56 707

原创 comparator和comparable接口

如果一个类实现了comparable接口,那么它就可以直接使用Collections.sort()方法进行排序;如果一个类没有实现comparable接口,但是我们仍然需要对它进行排序,那么我们可以通过实现comparator接口来定义一个比较器,然后将比较器对象传入Collections.sort()方法中进行排序。:compareTo比较方法,,用于比较当前对象和另一个对象的大小。如图创建学生对象类,实现comparble方法,重写compar To 比较方法。已经实现了comparble接口,其。

2023-10-31 00:33:08 61 1

原创 HashSet去重复原理解析

不存在:直接存存在:调用equals方法比较内容false:存true:不存自建类重写hashCode方法,根据对象的属性值计算哈希值,返回不同的哈希值。

2023-10-30 10:04:55 55 1

原创 抽象类和接口异同

抽象类的方法可以有public、protected和default访问修饰符,而接口的方法只能是public。抽象类的子类可以选择性地覆盖父类的方法,而接口的实现类必须实现接口中的所有方法。抽象类和接口都是Java中用于实现多态性的机制,它们有相似之处,也有不同之处。抽象类可以包含非抽象方法和成员变量,而接口只能包含抽象方法和常量。子类只能继承一个抽象类,但可以实现多个接口。抽象类可以有构造方法,而接口不能有构造方法。都不能被实例化,只能被子类实现或继承。都可以被用来实现多态性。

2023-10-24 01:10:52 42

原创 面向对象的三大特征

1)继承可以让类与类之间产生关系,子父类关系,产生子父类后,子类则可以使用父类中非私有的成员。定义方法时候,使用父类型作为参数,在使用的时候,使用具体的子类型参与操作。让类与类之间产生一种关系——子父类关系,子类可以直接使用父类中的非私有成员。3)提高了代码的维护性(如果方法的代码需要修改,修改一处即可)。2)提高了代码的复用性(多个类相同的成员可以放到同一个类中)。要有父类引用指向子类对象。向上转型:父类引用指向子类对象就是向上转型。成员变量编译看父类,运行看父类。成员方法编译看父类,运行看子类。

2023-10-18 22:42:07 43

原创 TreeSet排序方式

this.xxx-o.xxx 升序o.xxx-this.xxx 降序自定义Book类//书籍名称//书籍页数//价格//重写比较方法@Override// this.xxx-o.xxx 升序// o.xxx-this.xxx 降序//按page页码顺序降序输出// 默认比较规则 return 0只输出第一行// return 1按=顺数输出,// return -1逆序输出。

2023-10-18 01:23:41 43

原创 HashMap的扩容原理

put:// 第一次新增创建长度为16的数组// ①:计算地址(n - 1) & hash,当前如果为null,// 直接放元素 newNode()// ②:如果当前不为null,哈希冲突,判断值key是否相同,// Key相同则覆盖重写// ③: 当前的值不为null,哈希冲突,且key结果不同,

2023-10-16 00:19:01 33 1

原创 ArrayList<E>的扩容机制

于是返回DEFAULT_CAPACITY(10)和minCapacity(1)中的最大值,即返回10.进入grow方法:oldCapacity为10,newCapacity为10+10>>1 = 15;查看源码发现,生成的是一个size为0,capacity为0的空数组;这时add方法中的Size为10,minCapacity为11;这时if(...)条件成立,11-10>0,进入grow方法;此时,假设添加到第11的元素时,初始容量10用尽,需进行扩容。用.add方法添加第一个元素;

2023-10-12 01:52:28 39

原创 StringBuilder的append扩容机制(以字符串为例)

在StringBuilder的构造函数中定义了初始容量值16,如果传递的是int类型则给指定的值作为初始容量,如果传递的是字符串类型则会获取字符串的长度后面再加16作为初始容量。(就相当于,你创建了一个长度为3的字符串序列,系统又给你+16的富余空间,如果你想添加内容,不必创建新的字符串序列,可以直接放到后面16位的富余空间里。首先,在StringBuilder类中,所有对字符串的(增,删,改)操作都是在当前字符串中,并不是创建新的字符串,节省了内存空间。其中如何保障容量大小,方法如下。

2023-10-09 09:00:25 81 1

空空如也

空空如也

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

TA关注的人

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