
常用设计模式与JVM
文章平均质量分 93
设计模式和jvm的学习
Today不上发条
我们似乎总会在某一年,爆发性地长大,爆发性地觉悟,爆发性地知道某个真相,让原本没有什么意义的时间的刻度,成了一道分界线。-—《老灵魂》
展开
-
Java常用设计模式—代理模式
代理模式代理模式分为:静态代理、动态代理代理模式最直观的解释就是,通过代理,将被代理对象 “增强”!(即,扩展被代理对象的功能)代理模式分为静态代理,和动态代理:动态代理的代理类是动态生成的 , 静态代理的代理类是我们提前写好的逻辑。1、静态代理抽象角色 :一般使用接口或者抽象类来实现。真实角色 :被代理的角色。代理角色: 代理真实角色 , 代理真实角色后 ,一般会做一些附属的操作。调用方:使用代理角色来进行一些操作。我们以火车站售票的案例,涉及的对象有:购票人、火车站售票点、原创 2022-01-24 23:51:05 · 613 阅读 · 11 评论 -
Java常用设计模式—工厂模式
工厂模式它提供了⼀种创建对象的最佳⽅式,我们在创建对象时 不会对客户端暴露创建逻辑,并且是通过使⽤⼀个共同 的接⼝来指向新创建的对象。工厂模式有 3 种不同的实现⽅式:**简单工厂模式(**静态工厂):通过传⼊相关的类型来返回相应的类,这种方式比较单一,可扩展性相对较差。工厂方法模式:通过实现类实现相应的⽅法来决定相应的返回结果,这种方式的可扩展性比较强。抽象工厂模式:基于上述两种模式的拓展,且⽀持细化产品。应⽤场景:解耦:分离职责,把复杂对象的创建和使⽤的过程分开。复⽤代码 降低原创 2022-01-23 16:25:23 · 404 阅读 · 8 评论 -
Java常用设计模式—单例模式
GoF23 (二十三种设计模式)可按照:创建型模式、结构性模式、行为型模式三类创建型模式:单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式结构性模式:适配器模式、桥接模式、装饰模式、外观模式、享元模式、代理模式行为型模式:模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式初学设计模式:让我们从单例模式开始:一、单例模式单例模式使⽤场景:业务系统全局只需要⼀个对象实例,⽐如发号器、 re.原创 2022-01-23 16:22:00 · 430 阅读 · 11 评论 -
JVM_06 内存模型(JMM)篇
Java内存模型(JMM)JMM即为 Java Memory Model ,他定义了主存(多个线程所共享的空间、例:成员变量)、工作内存(线程的私有空间,例:局部变量)的抽象概念,对应着底层的CPU寄存器、缓存、硬件内存、CPU指令优化等;概要:我们通过操作java这些抽象概念,间接的操作复杂底层(化繁为简)JMM体现在以下的几个方面 :原子性:保证指令不会受到线程的上下文切换的影响可见性:保证指令不会受到CPU缓存的影响有序性:保证指令不会受到CPU指令优化的影响可见性退不出的循环原创 2021-11-30 15:15:07 · 342 阅读 · 12 评论 -
JVM_05 编译器与运行期的优化处理
编译器优化处理编译器优化处理也就是所谓的 语法糖 ,其实就是指 java 编译器把 .java 源码编译为 .class 字节码的过程中,自动生成和转换的一些代码,主要是为了减轻程序员的负担,算是 java 编译器给我们的一个额外福利 !注意,以下代码的分析,借助了 javap 工具,idea 的反编译功能,idea 插件 jclasslib 等工具。另外, 编译器转换的结果直接就是 class 字节码,只是为了便于阅读,给出了 几乎等价 的 java 源码方式,并不是编译器还会转换出中间的 jav原创 2021-11-29 23:21:10 · 519 阅读 · 19 评论 -
JVM_04 类加载与类加载器篇
类加载虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机类加载机制 ! 另外值得注意的是上面提到的Class文件,并不一定值得是磁盘上的.class文件,而只需要是任何符合字节码规范的一串二进制字节流就可以了1、加载阶段通过类加载器将类的字节码载入方法区(1.8后为元空间,在本地内存中)中,内部采用 C++ 的 instanceKlass 描述 java 类,它的重要 field 有 :_java_m原创 2021-11-29 23:13:44 · 587 阅读 · 15 评论 -
JVM_03 类文件结构与字节码指令篇
类文件结构与字节码指令1、类文件结构一个简单的 HelloWorld.java 程序:public class HelloWorld { public static void main(String[] args) { System.out.println("hello world!"); }}接下来执行:javac -parameters -d . HelloWorld.java 命令编译.java文件为.class文件:其中-parameters表示将源文原创 2021-11-28 18:48:46 · 847 阅读 · 16 评论 -
JVM_02 垃圾回收篇
JVM(Java Virtual Machine)垃圾回收篇1、如何判断对象可以回收1.1、引用计数法引用计数法(JVM已经弃用,Python等一些还在用) : 效率高,空应用就回收,但是对象互相引用特殊情况无法回收!如下这种互相引用无法被回收:public class GCTest { public static void main(String[] args) { Student student1 = new Student(); Studen原创 2021-11-27 16:51:54 · 342 阅读 · 16 评论 -
JVM_01 内存结构篇
JVM(Java Virtual Machine)一、前言1、什么是 JVM ?1、定义:Java Virtual Machine ,Java 程序的运行环境(Java 二进制字节码的运行环境)。2、好处:一次编译,处处执行自动的内存管理,垃圾回收机制数组下标越界检查3、比较:JVM、JRE、JDK 的关系如下图所示2、学习 JVM 有什么用?面试必备中高级程序员必备想走的长远,就需要懂原理,比如:自动装箱、自动拆箱是怎么实现的,反射是怎么实现的,垃圾回收机制是怎么回原创 2021-11-27 16:40:59 · 832 阅读 · 22 评论 -
JVM虚拟机总结—基础篇
JVM(Java Virtual Machine)JVM体系结构预览注意 : 其中亮色标识线程共享,也称主存中,灰色表示线程私有,在工作区内存当中我们接下来就采取由上到下分三层来进行分析!一、ClassLoader类加载一、类加载机制负责加载class文件(小class),class文件在文件开头有特定的文件标识,将文件的字节码文件内容加载到内存,装载到方法区!然后形成了类模板(也就是我们常说的大Class),且全局唯一 !我们打开一个class文件查看 :都具有cafe babe原创 2021-10-30 21:13:33 · 803 阅读 · 1 评论