自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一、运行时数据区域

根据 《Java 虚拟机规范》的规定,Java 虚拟机所管理的内存将会包括以下截个运行时数据区域,如图所示。

2023-12-06 08:40:24 83

原创 HotSpot 虚拟机中的对象

使用直接指针来访问最大的好处就是速度更快,它节省了一次指针定位的时间开销,由于对象访问在 Java 中非常频繁,因此此类开销积少成多也是一项极为可观的执行成本,对虚拟机 HotSpot 而言,它主要使用第二种进行对象访问(有例外,如果使用了 Shenandoah 收集器的话会有一次额外的转发),但从整个软件开发的范围来看,在各种语言、框架中使用句柄来访问的情况也十分常见。实例数据部分是对象真正存储的有效信息,即在程序代码中所定义的各种类型的字段,无论是从父类继承的,还是在子类中定义的字段都必须记录起来。

2023-11-29 21:42:36 118

原创 类指针压缩空间

压缩指针,指的是在 64 位的机器上,使用 32 位的指针来访问数据(堆中的对象或 Metaspace 中的元数据)的一种方式。对象头中的 Class Pointer 默认占 8 个字节,开启 -XX:+UseCompressedOops 后,为了节省空间压缩为 4 个字节,Java 堆中对象指针会被压缩成 32 位,使用堆基地址(如果堆在低 26G 内存中的话,基地址为 0)。

2023-11-28 21:45:38 253

原创 解释器模式 Interpreter Pattern

一、模式介绍1.1、定义解释器模式为某个语言定义它的语法(或者叫文法)表示,并定义一个解释器用来处理这个语法。也就是说,用变易语言的方式来分析应用中的实例。这种模式实现了语法表达式处理的接口,该接口解释一个特定的上下文。1.2、优点扩展性好。由于解释器模式中使用类来表示语言的语法规则,因此可以通过继承等机制来改变或扩展容易实现。在语法树中的每个表达式节点类都是相似的,所以实现其语法较为容易1.3、缺点执行效率较低。解释器模式中通常使用大量的循环和递归调用,当要解释的句子较复杂时,其运行速

2022-02-20 21:31:03 218 1

原创 备忘录模式 Memento Pattern

一、模式介绍1.1、定义在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个昨天,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式1.2、优点通过了一种可以恢复状态的机制。当用户需要时能够比较方便地将数据恢复到某个历史的状态实现了内部状态的封装。除了创建它的发起者之外,其他对象都不能够访问这些状态信息简化了发起者角色类。发起者不需要管理和保存其内部状态的各个备份,所有状态信息都保存在备忘录汇中,并由管理者进行管理,这符合单一职责原则1.3、缺点资源消耗

2022-02-20 20:01:22 181

原创 访问者模式 Visitor Pattern

一、模式介绍1.1、定义将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方法。它将对数据的操作与数据结构进行分离,是行为模式中最复杂的一种模式。1.2、优点扩展性好。能够在不修改对象结构中的元素的情况下,为对象结构中的元素添加新的功能复用性好。可以通过访问者来定义整个对象结构通用的功能,从而提高系统的复用程度灵活性好。访问者模式将数据结构与作用于结构上的操作解耦,使得操作集合可相对自由

2022-02-20 16:21:40 182

原创 迭代器模式 Iterator Pattern

一、模式介绍1.1、定义提供一个对象来顺序访问聚合对象中的一各个元素,而不是暴露对象的内部表示。日常开发中,一般不会自己写迭代器,除非需要定制一个自己实现到的数据结构对应的迭代器;否则,开原框架提供的 API 完全够用。1.2、优点访问一个聚合对象的内容而无需暴露它的内部表示遍历任务交由迭代器完成,这简化了聚合类它支持一下不同方式遍历一个聚合,甚至可以自定义迭代器的子类,以支持新的遍历增加新的聚合类和迭代器类都很方便,无须修改原有代码封装性良好,为遍历不同的聚合结构提供一个统一的接口

2022-02-20 15:13:40 151

原创 中介者模式 Mediator Pattern

一、模式介绍1.1、定义中介模式又叫调停模式,是迪米特法则的典型应用。它定义了一个单独的(中介)对象,来封装一组对象之间的交互。将这组对象之间的交互委派给与中介对象交互,来避免对象之间的直接交互。1.2、优点类之间各司其职,符合迪米特法则降低了对象之间的耦合性,使得对象易于独立地被复用将对象之间的一对多关联转变为一对一的关联,提高系统的灵活性,使得系统易于维护和扩展1.3、缺点中介模式将原本多个对象直接的相互依赖变成了中介者和多个同事类的依赖关系。当同事类越多时,中介者就会越臃肿,变得复

2022-02-20 14:31:48 104

原创 状态模式 State Pattern

一、模式介绍1.1、定义允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。状态模式把受环境改变的对象行为包装在不同的状态对象里,其意图是让一个对象在其内部状态改变的时候,其行为也随之改变。1.2、优点结构清晰,状态模式将与特定的状态相关的行为局部化到一个状态中,并且将不同状态的行为分割开来,满足单一职责原则将状态转换显示化,减少对象间的相互依赖。将不同的状态引入独立的对象中会使得状态转换变得更加明确,且减少对象间的相互依赖在同类职责明确,有利于程序的扩展。通过定义新的子类很容

2022-02-17 22:34:27 157

原创 责任链模式 Chain of Responsibility Pattern

一、模式介绍1.1、定义将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,沿着这条链传递这个请求,直到链上的某个对象能够处理它为止。责任链模式也叫职责模式。在责任链模式中,客户只需要将请求发送到责任链上即可,不需要关心请求的处理细节和请求的传递过程,请求会自动进行传递。所以责任链将请求的发送者和请求的矗立着解耦了。1.2、优点降低了对象之间的耦合度。该模式使得一个对象无须知道到底是哪一个对象处理其请求以及链的结构,发送者和接收者也无须拥有对方的明确信息增强了

2022-02-17 21:16:48 87

原创 命令模式 Command Pattern

一、模式介绍1.1、定义将请求封装成一个对象,这样可以使用不同的请求参数化其他对象(将不同请求依赖注入到其他对象中),并且能够支持请求(命令)的排队执行、记录日志、撤销等(附加控制)功能。1.2、优点通过引入中间件(抽象接口)降低系统的耦合度扩展性良好,增加或删除命令非常方便。采用命令模式增加或删除命令不会影响其他类,满足开闭原则可以实现宏命令。命令模式可以与组合模式结合,将多个命令装配成一个组合命令,即宏命令方便实现 Undo 和 Redo 操作。命令模式可以与备忘录模式结合,实现命令的撤

2022-02-17 00:17:02 209

原创 模板方法模式 Template Method Pattern

一、模式介绍1.1、定义在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法是的子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。1.2、优点它封装了不变部分,扩展可变部分。它把认为不变部分的算法封装到父类中实现,而把可变部分算法由子类继承实现,便于子类继续扩展它在父类中提取了公共的部分代码,便于代码复用部分方法是由子类实现的,因此子类可以通过扩展方式增加相应的功能,符合开闭原则1.3、缺点对每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,

2022-02-16 08:28:44 117

原创 组合模式 Composite Pattern

一、模式介绍1.1、定义也叫整体-部分(Part-Whole)模式,将一组对象组织成树形结构,以表示一种整体-部分的层次结构。组合让客户端可以统一单个对象和组合对象的处理逻辑。客户端代指代码的使用者。组合模式一般用来描述整体与部分的关系,它将对象组织到树形结构中,顶层节点被称为根节点,根节点下面可以包含树枝节点和叶子节点,树枝节点下面又可以包含树枝节点和叶子节点。从图中可以看出,根节点和树枝节点本质上属于同一种数据类型,可以作为容器使用;而叶子节点与树枝节点在语义上不属于同一种类型。但是在组合模式

2022-02-15 22:20:18 258

原创 享元模式 Flyweight Pattern

一、模式介绍1.1、定义运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提供系统资源的利用率。享元模式的定义提出了两个要求,细粒度和共享对象。因为要求细粒度,所以不可避免地会是对象数量多且性质相近,此时我们就将这些对象的信息分为两个部分:内部状态和外部状态内部状态指对象共享出来的信息,存储在享元信息内部,并且不会随环境的改变而改变外部状态指对象得以依赖的一个标记,随环境的改变而改变,不可共享比如,连接池中的连接对

2022-02-14 23:12:15 245

原创 桥接模式 Bridge Pattern

一、模式介绍1.1、定义将抽象与实现分离,使它们可以独立变化。另一种里定义:一个类存在两个(或多个)独立变化的维度,我们通过组合的方式,让这两个(或多个)维度可以独立进行扩展。通过组合关系来替代继承关系,避免继承层次的指数级爆炸,从而降低了抽象和实现这两个可变维度的耦合度。1.2、优点抽象与实现分离,扩展能力强符合开闭原则符合合成复用原则其实现细节对客户透明1.3、缺点由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,能正确地识别出系统中两个独立变化的维度,这增加了系统的

2022-02-14 21:23:20 252

原创 外观模式 Facade Pattern

一、模式介绍适配器是做接口转换,解决的是原接口和目标接口不匹配的问题;外观模式做接口整合,解决的是多接口调用带来的问题。1.1、定义外观(Facade)模式又称门面模式,为子系统提供一组统一的接口,定义一组高层接口让子系统更加易用。该模式对外有一个统一的接口,外部应用程序不用关心内部子系统的具体细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。1.2、优点降低了子系统与客户端之后的耦合度,使得子系统的变化不会影响调用它的客户类对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子

2022-02-14 08:19:50 79

原创 适配器模式 Adapter Pattern

一、模式介绍1.1、定义将一个类的接口,转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式为分为类结构型模式和对象结构模式两种,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。1.2、优点客户端通过适配器可以透明地调用目标接口复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题符合开闭原则1.3、缺点适配器编写过程,需

2022-02-13 22:12:33 266

原创 代理模式 Proxy Pattern

一、模式介绍1.1、定义代理模式为另一个对象提供一个替身或占位符,以控制对这个对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。使用代理模式创建代理对象,让代理对象控制目标对象(被代理的对象)的访问。被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象。1.2、优点代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用代理对象可以扩展目标对象的功能, 如:Spring AOP 增强代理模式能将客户端与目标对象分离,在一

2022-02-13 16:28:53 69

原创 建造者模式 Builder Pattern

一、模式介绍建造者(Builder)模式和工厂模式的关注点不同:建造者模式注重零部件的组装过程,而工厂方法模式更注重零部件的创建过程,但两者可以结合使用。1.1、定义将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成的。它将变与不变分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。1.2、优点封装性好,构建和表示分离扩展性好,各个具体的建造者相互独立,有利于系统的解耦客户端不必知道产品内部组成的细节

2022-02-13 15:16:05 193

原创 单例模式 Singleton Pattern

一、模式介绍1.1、定义确保一个类只有一个实例,并提供一个全局的访问点。单例模式有 3 个特点:单例类只有一个实例对象该单例对象必须由单例类自行创建单例类对外提供一个访问该单例的全局访问点1.2、优点单例模式可以保证内存里只有一个实例,减少内存的开销可以避免对资源的多重占用单例模式设置全局访问点,可以优化和共享资源的访问1.3、缺点单例模式一般没有接口,扩展困难。如果要扩展,则除了修改原来代码,没有第二种途径,违背开闭原则在并发测试中,单例模式不利于代码调试。单例模式的功

2022-02-10 22:59:57 179 1

原创 原型模式 Prototype Pattern

一、模式介绍1.1、定义用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种模式创建对象非常高效,根本无须知道对象创建的细节。1.2、优点Java 自带的原型模式基于内存二进制流的复制,在性能上比直接 new 一个对象更加优良可以使用深克隆模式保存对象的状态,使用原型模式将对象复制一份,并将其状态保存起来,简化了创建对象的过程,以便在需要的时候使用,可辅助实现撤销操作1.3、缺点需要为每一个类都配置一个 cl

2022-02-10 21:14:16 189

原创 抽象工厂模式 Abstract Factory Pattern

一、模式介绍工厂方法模式考虑的是一类产品的生产,如电视机厂只生成电视机、披萨店只生产披萨等。同类产品称为同等级,也就是说:工厂方法模式只考虑生产同等级的产品,但是在现实生活中许多工厂是综合型的工厂,能生产多等级(种类)的产品。如农场里既养动物又种植物,肯德基既生产汉堡有生产炸鸡等。抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。将同一个具体工厂所生产的位于不同等级的一组产品称为一个产品族,如下图所示的海尔工厂和 TCL 工厂所生成的电视机和空

2022-02-09 23:39:39 428

原创 工厂方法模式 Factory Method Pattern

一、定义所有的工厂模式都用来封装对象的创建。工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个;工厂方法让类的实例化推迟到了子类。工厂方法模式生产的是同等级的产品对象。二、模式的结构与实现1. 模式的结构工厂方法模式的主要角色如下。抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 newProduct() 来...

2022-02-09 08:02:06 82

原创 简单工厂模式 Simple Method Pattern

一、简单工厂模式简单工厂模式不属于23中设计模式,它的缺点是增加新产品时会违背“开闭原则”。简单工厂一般分为:普通简单工厂、多方法简单工厂、静态方法简单工厂。二、工厂方法模式模式的结构工厂方法模式的主要角色如下。抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 newProduct() 来创建产品。具体工厂(Concret...

2019-06-16 18:05:00 617

原创 策略模式 Strategy Pattern

定义策略模式的定义:定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。策略模式属于对象行为型模式实现package com.yj.strategy;/** * 鸭子抽象类 */public abstract class Duck { FlyBehavior flyBehavior; QuackBehavior quackB...

2019-06-06 00:23:44 171

原创 依赖、关联、聚合和组合之间区别

依赖、关联、聚合和组合之间区别耦合度依次增强:依赖、关联、聚合和组合1、依赖(Dependency)关系依赖关系表示一个类依赖于另一个类的定义。依赖关系中,可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A。一般而言,依赖关系在Java语言中体现为局域变量、方法的形参,或者对静态方法的调用。 class Car {.........

2019-06-06 00:11:32 9232 5

原创 装饰者模式 Decorator Pattern

一、定义装饰者模式定义:在不改变现有对象结构的情况下,动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。它是对象结构型模式。二、模式的结构与实现1. 模式的结构装饰模式主要包含以下角色。抽象组件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。具体组件(ConcreteComponent)角色:实现抽象组件,可以动态地对具体组件...

2019-06-05 23:42:58 187

原创 观察者模式 Observe Pattern

一、定义观察者模式定义了对象之间的一对多的依赖,这样一来,当一个对象改变状态是,它的所有依赖者都会收到通知并自动更新。观察者模式提供一个对象设计,让主题和观察者之间松耦合。这种模式有时又称作发布-订阅模式,出版者(主题)+订阅者(观察者)=观察者模式二、模式的结构与实现1. 模式的结构观察者模式的主要角色如下:抽象主题(Subject)角色:也叫抽象目标类,对象使用此接口注册为观察...

2019-06-02 17:55:27 218

原创 设计模式的分类及七大原则

一、分类1、创建型模式(五种)工厂方法模式、抽象工厂模式、建造者模式、单例模式、原型模式。除了工厂方法模式属于类创建型模式,其他的全部属于对象创建型模式2、结构型模式(七种)适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。除了适配器模式分为类结构型模式和对象结构型模式两种,其他的全部属于对象结构型模式3、行为型模式(十一种)策略模式、模板方法模式、...

2019-05-24 09:50:21 502

原创 Stream 流

Java 8 新特性Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。在Java 8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端。传统集合的多步遍历代码几乎所有的集合(如 Collection 接口或 Map 接口等)都支持直接或间接的遍历操作。而当我们需要对集合中的元 素进行操作的时候,...

2019-04-03 21:44:02 500 1

原创 ArrayList 1.8

ArrayList源码分析源码分析public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable { ... private static final long seria...

2019-03-31 21:11:36 323

原创 数组

数组数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据线性表包括顺序表和链表,每个线性表的数据最多只有前后两个方向。除了数组,链表、队列、栈等也是线性表结构顺序表链表存储方式在内存上一组连续的存储单元存储 数据,存储单元是连续的采用链式存储结构,用一组任意的存储单元存放数据时间复杂度根据下标查询O(1),如果是根据...

2019-03-24 15:10:55 235

空空如也

空空如也

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

TA关注的人

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