NoTrouble's Blog

我们一路奋战,不是为了改变世界,而是为了不让世界改变我们


  • 首页

  • 标签

  • 分类

  • 歌单

  • 搜索

程序计数器(Program Counter Register)

发表于 2021-06-04 | 分类于 JVM

介绍

​ 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。

​ 由于Java虚拟机的多线程是通过线程轮流切换、分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存。

阅读全文 »

双亲委派模型

发表于 2021-06-03 | 分类于 JVM

先导知识

​ 在介绍双亲委派模型的时候不得不提到类加载器(ClassLoader)。在说ClassLoader的时候,我们还要先了解一下Java的基本知识。

​ Java是运行在Java虚拟机中(JVM)中的,但是它是如何运行在JVM中的呢?我们在IDE中编写的的.java文件通过javac被编译器编译成.class的字节码文件。然后将由Class Loader负责将这些Class文件加载到JVM中去执行。

​ 站在JVM的角度来看,只存在两种不同的类加载器:一种是启动类加载器(BootStrap ClassLoader),这个类加载器是由C++语言实现的,是虚拟机自身的一部分;另一种就是其他所有的类加载器,这些类加载器都由Java语言实现,独立存在于虚拟机外部,并且全都继承自抽象类java.lang.ClassLoader。

​ 站在Java开发人员的角度来看,类加载器就应当划分得更细致一些。自JDK1.2以来,Java一直保持三层类加载器、双亲委派的类加载结构,尽管这套架构在Java模块化系统出现后有了一些调整变动,但依然未改变其主体结构。

阅读全文 »

责任链模式(Chain of Responsibility)

发表于 2021-06-02 | 分类于 DesignPatterns

​ 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链发送该请求,直到有一个对象处理它为止。

​ 责任链模式是一种处理请求的模式,它让多个处理器都有机会处理该请求,直到其中某个处理成功为止。责任链模式把多个处理器串成链,然后让请求在链上传递。

阅读全文 »

原型模式(Prototype Pattern)

发表于 2021-06-02 | 分类于 DesignPatterns

​ 使用原型实例指定要创建对象的类型,通过复制这个原型来创建新对象。

阅读全文 »

阅读《On Java 8》-- 第十五章 异常

发表于 2021-06-02 | 分类于 JAVASE

​ 改进的错误恢复机制是提高代码健壮性的最强有力的方式。错误恢复在我们所编写的每一个程序中都是基本的要素,但是在Java中它显得格外重要,因为Java的主要目标之一就是创建供他人使用的程序构件。

​ 发现错误的理想时机是在编译阶段,也就是在你试图运行程序之前。然而,编译期间并不能找出所有错误,余下的问题必须在运行期间解决。这就需要错误源能通过某种方式,把适当的信息传递给某个接收者——该接收者将知道如何正确处理这个问题。

​ Java使用异常来提供一致的错误报告模型,使得构建能够与客户端代码可靠地沟通问题。

​ Java中的异常处理的目的在于通过使用少于目前数量的代码来简化大型、可靠的程序的生成,并且通过这种方式可以使你更加确信:你的应用中没有未处理的错误。

​ 因为异常处理是Java中唯一官方的错误报告机制,并且通过编译器强制执行。

阅读全文 »

建造者模式(Builder Pattern)

发表于 2021-06-01 | 分类于 DesignPatterns

​ 封装一个对象的构造过程,并允许按步骤构造。

​ 建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式。建造者模式一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。

​ 主要作用:可以在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。

阅读全文 »

抽象工厂模式(Abstract Factory)

发表于 2021-06-01 | 分类于 DesignPatterns

提供一个接口,用于创建相关的对象家族。具体工厂类可以创建多个“大类”对象,但是若增加产品类型还是需要修改抽象工厂和具体工厂,违反开闭原则。

阅读全文 »

工厂方法(Factory Method)

发表于 2021-06-01 | 分类于 DesignPatterns

​ 定义一个创建对象的接口,但由子类决定要实例化哪个类。工厂方法把实例化操作推迟到子类。

​ 在简单工厂中,创建对象的是另一个类,而在工厂方法中,是由子类来创建对象。

阅读全文 »

SSM框架整合基本使用

发表于 2021-05-28 | 分类于 SSM

SSM整合

步骤分析

首先来分析一下如何把Spring,SpringMVC,Mybatis整合到一起。

步骤

①Spring整合上Mybatis:通过Service层Dao层都注入Spring容器中;

②引入配置SpringMVC:把Controller层注入SpringMVC容器中

③让web项目启动时自动读取spring配置文件来创建Spring容器:可以使用ContextLoaderListener来实现Spring容器的创建。

阅读全文 »

阅读《On Java 8》-- 第十四章 流式编程

发表于 2021-05-28 | 分类于 JAVASE

​ 流(Streams)是与任何特定存储机制无关的元素序列——实际上,我们说流是“没有存储”的。

​ 取代了在集合迭代元素的做法,使用流即可以从管道中提取元素并对其操作。这些管道通常被串联在一起形成一整套的管线,来对流进行操作。

​ 在大多数情况下,将对象存储在集合中就是为了处理它们,因此你会发现你把编程的主要焦点从集合转移到了流上。流的好处是,它使得程序更加短小并且更易理解。当Lambda表达式和方法引用(method references)和流一起使用的时候会让人感觉自成一体。流使得Java8更具吸引力。

阅读全文 »
<1…789…13>

130 日志
31 分类
51 标签
GitHub E-Mail
© 2024 NoTrouble