【深入理解 Java 虚拟机笔记】虚拟机字节码执行引擎 执行引擎是 Java 虚拟机最核心的组成部分之一。在 Java 虚拟机规范中制定了虚拟机字节码执行引擎的概念模型,这个概念模型成为各种虚拟机执行引擎的统一外观(Facade)。不同的虚拟机实现,执行引擎可能会有解释执行和编译执行两种,有可能两种兼备。
【深入理解 Java 虚拟机笔记】虚拟机类加载机制 虚拟机的类加载机制,即虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成虚拟机可以直接使用的 Java 类型。在 Java 语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成,这虽然增加一些性能开销,但是会为 Java 应用程序提供高度的灵活性。
【深入理解 Java 虚拟机笔记】类文件结构 由于最近十年内虚拟机以及大量建立在虚拟机之上的程序语言如雨后春笋般出现并蓬勃发展,将我们编写的程序编译成二进制本地机器码(Native Code)已不再是唯一的选择,越来越多的程序语言选择了操作系统和机器指令集无关的、平台中立的格式作为程序编译后的存储格式。
【深入理解 Java 虚拟机笔记】垃圾收集器与内存分配策略 Java 的程序计数器、虚拟机栈、本地方法栈这 3 个区域随线程而生,随线程而灭,内存分配和回收都具备确定性。而 Java 堆和方法区则不一样,这部分内存的分配和回收是动态的,垃圾收集器所关注的是这部分的内存。
【深入理解 Java 虚拟机笔记】Java内存区域与内存溢出异常 对于 Java 程序员来说,在虚拟机自动内存管理机制下,不需要为 new 操作去写配对的 delete/free 代码,不容易出现内存泄漏。但是如果出现内存泄漏问题,如果不了解虚拟机的机制,便难以定位。
操作系统笔记 虚拟存储器和 I/O 设备 虚拟存储器,即具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。I/O系统的基本功能:1. 隐藏物理设备的细节,2. 与设备的无关性,3. 提高处理机和 I/O 设备的利用率,4. 对 I/O 设备进行控制,5. 确保对设备的正确共享,6. 错误处理。
操作系统笔记 处理机调度和存储器管理 处理机调度分为:1. 高级调度(High Level Scheduling)2. 中级调度(Intermediate Scheduling)3. 低级调度(Low Level Scheduling);存储器是计算机系统重要的组成部分,其管理的主要对象是内存,如何对它进行有效的管理,不仅直接影响到存储器的利用率,而且对系统性能也有重大影响。
操作系统 引论和进程 操作系统(Operation System,OS)是配置在计算机硬件上的第一层软件,是对硬件系统的首次扩充。其主要作用是管理好这些设备,提高它们的利用率和系统的吞吐量,并为用户和应用程序提供了一个简单的接口,便于用户使用。
LinkedList 剖析 LinkedList 内部是用双向链表实现的,它是一个 List ,但也实现了 Deque 接口,可以作为队列、栈和双端队列使用,维护了长度、头节点和尾节点,它按需分配空间,不需要预先分配很多空间;不可以随机访问,按照索引位置访问效率比较低,必须从头或尾顺着链接找,效率为O(N/2);不管列表是否已排序,只要是按照内容查找元素,效率都比较低,必须逐个比较,效率为O(N); 在两端添加、删除元素的效率很高,为O(1)。
ArrayList 剖析 ArrayList,其内部采用动态数组实现,可以随机访问,按照索引位置进行访问效率很高,效率是O(1);除非数组已排序,否则按照内容查找元素效率比较低,具体是O(N),N为数组内容长度,也就是说,性能与数组长度成正比;添加元素的效率还可以,重新分配和拷贝数组的开销被平摊了,具体来说,添加N个元素的效率为O(N);插入和删除元素的效率比较低,因为需要移动元素,具体为O(N)。
Redis 一些基础知识以及数据类型 Redis 部分基础知识以及Redis 五大数据类型:string (字符串)是 redis 最基本的类型,一个 key 对应一 个 value 。hash (哈希)是一个键值对集合,是一个 string 类型的 field 和 value 的映射表。list (列表)是简单的字符串列表,按照插入顺序排序。set(集合)是string类型的无序集合。zset(sorted set:有序集合) set 一样也是string类型元素的集合,且不允许重复的成员。
Redis 概述与例子 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。它是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
MyBatis 8. 插件 2. MyBatis 插件 MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括: Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed) ParameterHandl...
MyBatis 7. 逆向工程 Mybatis 逆向工程Mybatis Generator(MBG)是一个专门为 MyBatis 框架使用者定制的代码生成器,可以快速的根据表生成对应的映射文件,接口,以及 bean 类。支持基本的增删改查,以及 QBC 风格的条件查询。但是表连接、存储过程等这些复杂 sql 的定义需要我们手工编写。官方文档:http://www.mybatis.org/generator/通过 ma...
MyBatis 6. Mybatis-Spring 整合 Mybatis-Spring 整合 在 pom.xml 加入<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version>&l
MyBatis 5. 缓存 缓存MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。缓存可以极大的提升查询效率。MyBatis系统中默认定义了两级缓存。一级缓存和二级缓存默认情况下,只有一级缓存(SqlSession 级别的缓存,也称为本地缓存)开启。二级缓存需要手动开启和配置,他是基于 namespace 级别的缓存。为了提高扩展性。MyBatis定义了缓存接口 Cache 。...
MyBatis 4. 动态 SQL 动态 SQL MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。 通常使用动态 SQL 不可能是独立的一部分,MyBatis 当然使用一种强大的动态 SQL 语言来...
MyBatis 3. XML映射文件 XML 映射文件1. 概述 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 就是针对 SQL 构建的,并且比普通的方法做的更好。SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序):c...
MyBatis 2. XML配置文件 XML 配置文件configuration 标签的子标签顺序是固定的:1.properties2.settings3.typeAliases4.typeHandlers5.objectFactory6.objectWrapperFactory7.reflectorFactory8.plugins9.environments10.databaseIdPro...