自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

HeloJ的博客

编程学院 Jara系一班

  • 博客(33)
  • 资源 (1)
  • 收藏
  • 关注

原创 内存溢出、泄漏

1. 内存泄漏程序无法释放已申请的内存空间1.1 声明静态的集合类如:private static Map<String> map = new HashMap();它们的生命周期与应用程序的生命周期相同,容易导致OOM。1.2 ThreadLocal未主动removeThreadLocal使用弱引用作为key,当ThreadLocal不存在外部强引用时,key会被GC回收,就导致key为null,value还存在强引用,只有在线程结束时,value的强引用才会断掉1.

2021-05-09 16:43:00 103

原创 垃圾收集器

1. Serial收集器是一个单线程垃圾收集器,垃圾收集过程过程中会STW,新生代使用标记-复制算法,老年代使用标记-整理算法。启动参数:-XX:+/-UseSerialGC,可应用于客户端模式下虚拟机。2. ParNew收集器Serial收集器的多线程版本,能与CMS收集器配合工作。老年代使用CMS后(-XX:+/-UseConcMarkSweepGC),新生代模式使用ParNew。启动参数:-XX:+/-UseParNewGC(JDK9取消),默认开启收集线程数...

2021-05-09 16:42:12 93

原创 HotSpot算法细节

1. 根节点枚举类加载完成后,HotSpot使用一组OopMap数据结构来记录对象内对应偏移量上对应的数据类型,在即时编译过程中,也会在特定位置记录下栈里和寄存器里哪些位置是引用。这样,垃圾收集器在进行GC Roots扫描时就不要从方法区等GC Roots开始查找,优化引用链构建效率。OopMap会带来其他问题:如果每条指令都生成OopMap将需要大量额外的空间,此时引出了安全点。2. 安全点安全点主要针对程序获取CPU时间片,执行进行垃圾收集的情况。HotSpot只在安全点位置才会生成

2021-05-09 16:39:04 282

原创 垃圾收集算法

1. 分代收集理论分代收集理论建立在两个分代假说之上:弱分代假说:绝大多数对象都是朝生夕灭的。 强分代假说:熬过越多次垃圾收集过程的对象就越难以消亡。2. 标记-清除算法最基础的垃圾收集算法,分为标记和清除两个阶段标记出所有需要回收的对象 标记完成后,统一回收掉所有被标记的对象此算法主要缺点有两个:执行效率不稳定 如果Java堆中包含大量需回收的对象,标记和清除的执行效率将降低 内存空间碎片化 清除之后产生大量不连续的内存碎片,导致后期分配较大对象时无法找到足够内

2021-05-09 16:38:00 70

原创 对象存活判定

1. 引用计数算法在对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。缺点:无法解决对象之间相互循环引用的问题2. 可达性分析算法从GC Roots到对象不可达时,则此对象不可能再被使用GCRoots对象:虚拟机栈中引用的对象,如:各个线程被调用的方法堆栈中使用到的参数、局部变量、临时变量等 方法区中类静态属性引用的对象,如:Java类的引用类型静态变量 方法区中常量引用的对象,

2021-05-09 16:35:59 94

原创 对象访问定位

Java程序会通过栈帧中的reference数据来操作堆上的具体对象,主流的对象访问方式有两种:使用句柄访问 直接指针访问1. 使用句柄Java堆中可能会划分处一块内存来作为句柄池,reference中存储的就是对象的句柄地址,而句柄包含了对象实例数据与类型数据各自具体的地址信息。优点:对象被移动时只会改变句柄中实例数据指针,reference本身无需更改2. 直接指针reference中存储对象地址,HotSpot使用此种访问方式优点:访问速度快,节省一次指针定位的时间

2021-05-09 16:34:52 62

原创 对象内存布局

在HotSpot虚拟机中,对象在堆内存中的存储布局可以划分为三个部分:对象头 实例数据 对齐填充1. 对象头对象头包含一般包含两类信息,数组对象包含三类信息1.1 存储对象自身的运行时数据(Mark Word)如:哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向锁ID、偏向时间戳等1.2 类型指针(Klass)类型指针指对象指向它的类型元数据的指针,Java虚拟机通过这个指针来确定该对象是哪个类的实例。1.3 数组长度仅数组对象包含,主要用来虚拟机通过普通Jav

2021-05-09 16:34:12 69

原创 对象创建流程

2021-05-09 16:32:44 63

原创 内存模型

1. 程序计数器程序计数器是一块较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器。各条线程之间程序计数器互不影响,独立存储,即:线程私有。如果执行一个Java方法,程序计数器记录正在执行的虚拟机字节码指令的地址;如果执行一个Native方法,程序计数器记录为空(Undefined)。《Java虚拟机规范》未对此内存区域规定任何OOM情况。2. Java虚拟机栈Java虚拟机栈是线程私有的,生命周期与线程相同。虚拟机栈描述的是Java方法执行的线程内存模型:每个..

2021-05-09 16:29:19 73

原创 职责链模式

1. 类图Handler:定义职责的接口,通常定义处理请求的方法,可以在此处实现后继链 ConcreteHandler:实现职责的类,对职责范围内请求的处理,对职责范围外请求的转发 Client:客户端,向链上的具体处理对象提交请求,让职责链负责处理2. 示例分离职责,动态组合2.1 职责接口public abstract class Handler { // 持有后继的职责对象 protected Handler handler; public v

2021-05-07 21:10:12 55

原创 命令模式

1. 类图Command:命令接口,声明执行的方法 ConcreteCommand:命令接口实现,持有并调用接收者的功能 Receiver:接收者,执行命令的对象 Invoker:要求命令对象执行请求,通常持有命令对象 Client:创建具体的命令对象,并设置命令对象的接收者2. 示例将请求封装成对象2.1 命令接口public interface Command { void execute();}2.2 命令实现持有命令真正执行的对象pub

2021-05-07 21:09:56 63

原创 解释器模式

1. 类图AbstractExpression:解释器接口 TerminalExpression:终结符解释器,解析句子的结束符 NonterminalExpression:非终结符解释器,用来实现语法规则中非终结符相关的操作。可以有多种非终结符解释器 Context:上下文,通常包含各个解释器需要的数据或是公共的功能 Client:使用解释器的客户端,按照语言的语法表达式转换成使用解释器对象描述的抽象语法树,然后调用解释操作2. 示例解释器对给定语法的句子进行解析对字符串​1

2021-05-07 21:09:31 72

原创 迭代器模式

1. 类图Iterator:迭代器接口。定义访问和遍历元素的接口 ConcreteIterator:迭代器实现类。实现对聚合对象的遍历,并跟踪遍历时的当前位置 Aggregate:聚合对象。定义创建相应迭代器对象的接口 ConcreteAggregate:聚合对象实现。实现创建相应的迭代器对象2. 示例统一访问聚合元素的方法2.1 迭代器接口public interface Iterator { void first(); void next();

2021-05-07 21:09:09 52

原创 中介者模式

1. 类图Mediator:中介者接口。定义各个同事之间交互需要的方法 ConcreteMediator:中介者实现。了解和维护各个同事,并负责协调同事间的交互关系 Colleague:同事类父类,通常为抽象类。主要负责约束同事对象的类型,并实现一些具体同事类之间的公共功能 ConcreteColleague:具体的同事类,需要与其他同事通信时,就持有中介者通信2. 示例将多个对象之间的交互统一封装2.1 中介者接口public interface Mediator {

2021-05-06 10:05:24 67

原创 访问者模式

1. 类图Visitor:访问者接口,为所有访问者声明一个方法,用来代表对对象结构添加的功能 ConcreteVisitor:具体访问者,实现添加的功能 Element:元素对象,对象结构的顶层接口,定义接收访问的操作 ConcreteElement:具体元素对象,回调访问者的真实功能,开放自身的数据供访问者使用 ObjectStructure:对象结构,包含多个被访问的对象2. 示例为可能扩展的对象预留回路,通过回调的方式进行功能扩展,避免对对象的修改2.1 现有对象抽象类

2021-05-06 10:05:06 91

原创 模板方法模式

1. 类图AbstractClass:抽象类。定义算法骨架和抽象操作 ConcreteClass:具体实现类。实现抽象类中的抽象操作2. 示例父类固定算法框架,子类父子框架内部实现2.1 对象实体public class LoginModel { private String username; private String password; public String getUsername() { return username;

2021-05-06 10:04:49 50

原创 策略模式

1. 类图Context:上下文,和具体的策略类交互 Strategy:策略接口,约束一系列具体的策略算法 ConcreteStrategy:具体策略算法实现2. 示例分离算法,选择实现,算法可任意替换2.1 策略接口public interface Strategy { double calcPrice(double price);}2.2 策略实现public class NormalCustomerStrategy implements Strate

2021-05-06 10:04:27 57

原创 状态模式

1. 类图Context:上下文,封装不同的状态 State:封装与上下文的一个特定状态所对应的行为 ConcreteState:具体的状态处理类2. 示例根据状态分离和选择行为2.1 上下文public class VoteContext { // 存放投票结果 private Map<String,String> resultMap = new HashMap<>(); // 存放投票次数 private Map&

2021-05-06 10:04:07 63

原创 观察者模式

1. 类图Subject:目标对象 一个目标可以被多个观察者观察 目标提供观察者订阅和取消的维护 目标对象发生变化,通知所有有效观察者 Observer:定义观察者接口,提供目标对象变化时,对应观察者的更新方法 ConcreteObserver:具体观察者实现 ConcreteSubject:具体目标对象实现2. 示例修改目标的数据,触发相应通知,联动调用观察者的方法2.1 目标对象知道所有的观察者,并提供和维护观察者的订阅与退订逻辑public clas

2021-05-06 10:03:38 64

原创 备忘录模式

1. 类图Memento:备忘录。存储原发器对象的内部状态 Orginator:原发器。使用备忘录来保存某个时刻原发器自身的状态 Caretaker:备忘录管理者。保存备忘录对象2. 示例保存和恢复内部状态2.1 备忘录// 备忘录接口public interface Memento {}// 实现类 blod保存原发器信息public class MementoImpl implements Memento { private int blod;

2021-05-06 10:03:20 60

原创 享元模式

1. 类图Flyweight:享元接口 ConcreteFlyweight:享元实现对象 UnsharedConcreteFlyweight:非共享享元实现对象 FlyweightFactory:享元工厂 Client:客户端2. 示例同一对象实例的重复使用2.1 享元接口public interface FlyWeight { void action();}2.2 享元实现对象public class ChildFlyWeight implement

2021-05-06 10:02:30 48

原创 桥接模式

1. 类图Abstraction:抽象部分的接口。维护一个实现部分的对象引用,抽象对象里面的方法,需要调用实现部分的对象来完成 RefinedAbstraction:扩展抽象部分的接口。定义跟实际业务相关的方法,这些方法通常使用Abstraction中定义的方法,也可能需要调用实现部分的对象来完成 Implementor:定义实现部分的接口。 ConcreteImplementor:实现Implementor接口的对象2. 示例2.1 接口public interface Co

2021-05-06 10:02:01 46

原创 外观模式

1. 类图2. 示例封装交互,简化调用2.1 内部对象public class CPU { public void start(){System.out.println("cpu启动");} public void shutDown(){System.out.println("cpu关闭");}}public class Disk { public void start(){System.out.println("disk启动");} pu

2021-05-06 10:01:22 49

原创 适配器模式

1. 类图Target:客户端需要的功能接口 Adaptee:需要被适配的接口 Adapter:适配器,将Adaptee适配成客户端需要的Target Client:客户端,调用功能接口Target2. 示例2.1 默认适配器减少子类重写的方法2.1.1 接口// 默认适配接口public interface DefaultAdapter { public void testOne(); public void testTwo(); publi

2021-05-05 10:30:10 104

原创 装饰器模式

1. 类图Component:组件对象的接口,可以给这些对象动态地添加职责 ConcreteComponent:具体的组件对象,实现组件对象接口,通常就是被装饰器装饰的原始对象,可以给这个对象添加职责 Decorator:所有装饰器的抽象父类,需要定义一个与组件接口一致,并持有一个Component对象,即被装饰的对象2. 示例动态地给一个对象添加一些额外的职责2.1 组件接口public interface Person { void eat();}2.2 组

2021-05-05 10:27:13 50

原创 代理模式

1. 类图Proxy:代理对象 Subject:目标接口 RealSubject:具体的目标对象2. 示例2.1 静态代理代理对象持有真实对象的引用,代理类和真实类实现共同的接口2.1.1 目标接口public interface Movie { void play();}2.1.2 目标对象public class RealMovie implements Movie { public void play() {System.out.prin

2021-05-05 10:22:11 84

原创 单例模式

1. 类图Singleton:负责创建Singleton类自己的唯一实例,并提供一个getInstance的方法,让外部来访问这个类的唯一实例2. 示例2.1 懒汉式单例/** * 饿汉式单例:初始化时直接创建 */public class HungrySingleton { private static HungrySingleton hungrySingleton = new HungrySingleton(); private HungrySingleto

2021-05-05 10:18:13 48

原创 原型模式

1. 类图Protoype:声明一个克隆自身的接口,用来约束想要克隆自己的类,要求它们都要实现这里定义的克隆方法 ConcretePrototype:实现Prototype接口的类,这些类真正实现了克隆自身的功能 Client:客户端,先获取原型实例对象,然后通过原型实例克隆自身来创建新的对象实例2. 示例用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象浅克隆:只负责克隆按值传递的数据深克隆:包括浅克隆和引用类型的数据2.1 原型类public class

2021-05-05 10:16:36 72

原创 建造者模式

1. 类图Builder:创造者接口,定义创建一个Product对象所需要的各个部件的操作 ConcreteBuilder:具体的创造者实现,创建各个部件并进行组装,同时还提供一个让用户获取组装完成后的产品对象的方法 Director:指挥者,主要用来使用Builder接口,以一个统一的过程来构建所需要的Product对象 Product:具体产品,包含多个部件2. 示例将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示2.1 创建者接口public

2021-05-05 10:15:27 80

原创 抽象工厂模式

1. 类图Abstract Factory:抽象工厂,定义创建一系列产品对象的操作接口 Concrete Factory:具体的工厂,定义抽象工厂定义的方法,具体实现一系列产品对象的创建 Abstract Product:定义一类产品对象的接口 Concrete Product:具体的产品实现对象,通常在具体工厂里面,会选择具体的产品实现对象,来创建符合抽象工厂定义的方法返回的产品类型的对象 Client:客户端,使用抽象工厂来获取一系列所需要的的产品对象,然后面向这些产品对象的接口编程,以

2021-05-05 10:13:28 60

原创 工厂方法模式

1. 类图Product:实际需要使用的对象的接口 ConcreteProduct:具体的Product接口的实现对象 Creator:创建器,多是抽象方法。可以在Creator里面提供工厂方法的默认实现,让工厂方法返回一个缺省的Product类型的实例对象 ConcreteCreator:具体的创建器对象,覆盖实现Creator定义的工厂方法,返回具体的Product实例2. 示例通过各自的工厂获取对象2.1 工厂接口public interface IFactory

2021-05-05 10:11:44 50

原创 简单工厂模式

1. 类图​​Api:功能接口 ImplA、ImplB:Api接口的实现类 Factory:工厂,选择合适的实现类来创建Api接口对象 Client:客户端,通过Factory获取Api接口对象,然后面向Api接口编程2. 示例通过工厂类的静态方法获取对象2.1 功能接口public abstract class Operation { Integer numberA; Integer numberB; public void setNum.

2021-05-05 10:08:05 44

原创 设计原则&UML

1. 设计原则目录1. 设计原则1.1 单一职责1.2 里氏替换1.3 依赖倒置1.4 接口隔离1.5 迪米特原则1.6 开闭原则2. 设计模式2.1 创建型2.2 结构型2.3 行为型3. UML3.1 类图3.2 关系1.1 单一职责一个类只负责一项职责问题由来:类T负责两个不同的职责:P1、P2。当P1需求发生变化时,需要修改T类,可能导致P2发生故障 解决方案:将P1、P2放在两个类:T1、T21.2 里氏替换所有引用基

2021-05-05 10:00:47 253

Python入门指南

Python入门学习参考资料,英文文档中包含中文翻译,学习必备

2018-04-07

空空如也

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

TA关注的人

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