Java
文章平均质量分 94
JKerving
这个作者很懒,什么都没留下…
展开
-
MyBatis运行原理
这篇文章是自己工作中记录下来的,由于工作比较忙,一直留存于本地忘了传到自己的博客中,现在优化了一下文章结构传上来,请各位看官批评指正。另外,后续会有很多自己工作中记录的知识点文章做二次优化传上来。在开发大数据平台调度系统过程中,我们通过spring boot快速构建调度平台,持久化框架采用Mybatis。这也是初次使用Mybatis,当然工作中只是构建一些Dao、Mapper,使用一些增删改查完成调度任务的历史记录、任务间的Dependency的记录。但是Mybatis的基本运行原理还是需要结合源码来梳原创 2021-10-24 21:05:21 · 206 阅读 · 0 评论 -
Java反射机制探究
在Java中,反射机制使得Java语言更加灵活,系统的灵活性、可扩展性大多是通过反射机制来加载外部插件,使得系统与插件解耦的同时增加了功能。 Java反射机制是在程序运行过程中,对于任意一个类,都能够知道这个类的所有属性和方法;对任意一个对象都能够调用它的任意一个方法;尤其是指程序可以检测和修改它本身的状态或行为的一种能力。首先通过实例观察一下反射的用法:package com.example;原创 2016-03-27 21:22:17 · 610 阅读 · 0 评论 -
Java 线程池原理解析(一)
大多数的并发应用程序都是围绕”任务执行”来构造的:任务通常是一些离散的单元。所谓高并发的主要任务就是把应用程序中的工作分解到多个任务当中,并且这些任务是相互独立的:任务不依赖于其他任务的状态。任务之间的独立性有助于实现并发,只要存在足够多的资源,那么这些独立的任务都可以并行执行。现在通常情况下,我们对执行任务有三种解决方法。串行地执行任务显式地为任务创建线程线程池下面就先主要分析前两种方式的原创 2016-04-16 12:03:07 · 602 阅读 · 0 评论 -
Java 线程池原理解析(二)
我们已经分析了两种通过线程来执行任务的策略,即把所有任务放在单个线程中串行执行,以及将每个任务放在各自的线程中执行。这两种方式都存在一些严格的限制:串行执行的问题在于其糟糕的响应性和吞吐量,而为每个任务分配一个线程的问题在于资源管理的复杂性线程池简化了线程的管理工作,并且java.util.concurrent提供了一种灵活的线程池实现作为Executor框架的一部分。在Java中,任务执行的主要抽原创 2016-04-16 20:46:26 · 433 阅读 · 0 评论 -
Java 线程池原理解析(三)
在使用线程池的过程中,有一个很有必要考虑的问题就是线程饥饿死锁问题 先前我们考虑的放入线程池中的各个task都是相互独立的,这样我们就把问题简单化了。但是真实情况中还会出现一个任务依赖于另一个任务的完成。 现在假设一种条件,我们使用单线程的Executor,如果一个任务将另一个任务提交到同一个Executor,并且等待这个任务的执行结果。那么就会因为单线程的Executor的串行机制导致死锁的发原创 2016-04-16 22:30:32 · 646 阅读 · 0 评论 -
java 利用数组实现循环队列
循环队列可以有效的利用资源。如果使用普通数组实现队列时,如果不进行移动,随着数据的不断读写弹出插入,会出现假满队列的情况。例如不断向队列中添加元素,然后在弹出元素。这是弹出元素所空闲出来的空间并没有得到重复利用,这是就会出现数组尾部已经满了,但是头部还有空闲空间没有得到利用。 入队时尾指针向前追赶头指针,出队时头指针向前追赶尾指针/** * Created by JKerving on 2016原创 2016-04-20 17:23:46 · 2882 阅读 · 0 评论 -
java中代码块的执行顺序--静态代码块,构造器,普通代码块,构造块,main主函数
这一段时间在阿里实习,最近校招季很多内推又开始了,就投了一下腾讯。结果周五收到腾讯地图的电话叫周六去面试。匆匆忙忙的没怎么准备就去面试了,结果不尽如人意,基础知识忘得小一半惨被虐。不过这次面试还是给我敲响了警钟,要有压迫感,前日松散无心学习,现在发现自己还差得远要静下心来。看来隔一段时间就应该去面试一下这样也好认清楚自己的水平价值也好有努力的方向。正文由static修饰的代码块称为静态代码块:静态代原创 2016-08-07 17:07:39 · 1315 阅读 · 1 评论 -
令人抓狂的Java常量池探索
Java的常量池通常分为两种:静态常量池和运行时常量池 静态常量池:class文件中的常量池,class文件中的常量池包括了字符串(数字)字面值,类和方法的信息,占用了class文件的大部分空间。 运行时常量池:JVM在完成加载类之后将class文件中常量池载入到内存中,并保存在方法区中。平时我们所讲的常量池就是指方法区中的运行时常量池。其相对于CLass文件常量池的另外一个重要特征是具备动态性原创 2016-08-20 13:08:19 · 970 阅读 · 0 评论 -
Java:到底是值传递还是引用传递
先来看一段代码public class MyClassA { public static void main(String[] args){ String x = new String("hello"); change(x); System.out.println(x); } private static void change(Str原创 2016-08-20 17:03:28 · 771 阅读 · 0 评论 -
JVM(五)--深入理解JVM垃圾回收机制
转自http://www.jianshu.com/p/815c636a0668垃圾回收机制的意义Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存。不过转载 2016-03-26 00:57:53 · 2307 阅读 · 0 评论 -
JVM(四)--GC的三大高级算法
C的基本算法,大体上都逃不出 标记清除法/标记压缩法、复制收集算法、引用计数法 这三种方式以及它们的衍生品。现在,通过对这三种方式进行融合,出现了一些更加高级的方式。这里,我们介绍一下其中最有代表性的三种,即分代回收、增量回收和并行回收。有些情况下,也可以对这些方法中的几种进行组合使用。1、分代回收 首先,我们来讲讲高级GC技术中最重要的一种,即分代回收(Generational GC)。由于GC转载 2016-03-26 00:38:03 · 992 阅读 · 0 评论 -
多态在 Java 和 C++ 编程语言中的实现比较
简介面向对象编程语言最重要的一个特点就是多态,它可以使得基类的指针或引用指向派生类对象,而在具体访问时实现方法动态绑定。本文主要探讨多态在当前最流行的两种编程语言 C++ 和 Java 中的实现,并对其中的异同进行了比较,使读者对其有全面的理解,以便更好的在编程中正确使用这种特性。 提到多态,这里想提一下。有的书上认为重载也算是一种多态,即在一个类中有多个相同名称的方法但是返回类型与参数不同。转载 2016-04-02 12:46:40 · 722 阅读 · 0 评论 -
LinkedHashMap源码解析
LinkedHashMap概述LinkedHashMap是HashMap的一个子类,它保留插入的顺序,如果需要输出的顺序和输入时的相同,那么就选用LinkedHashMap。(这里的顺序指的是插入顺序,而不是散列表中索引的顺序) LinkedHashMap在源码中可以看到实现了Map接口,并且继承的是HashMap。也就是采用的Map接口的哈希表和链表实现的。此实现提供可选的映射操作,并允许使用n原创 2016-03-25 10:31:11 · 478 阅读 · 1 评论 -
HashMap与HashTable解读(一)
HashMapHashMap概述HashMap是基于哈希表的Map接口的实现,可以看到源码中其实现了Map接口public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, SerializableHashMap是一个数组与单链表的结合体,底层实现使用一个table[]数组,当向HashMa原创 2016-03-25 11:38:38 · 1028 阅读 · 0 评论 -
HashMap与HashTable解读(二)
上一篇讲到了HashMap,这一篇来讲一下HashTable。 其实两者区别不是很大,HashTable出现的比较早,继承的是Dictionary,Dictionary是一个抽象类,用来存储key/value,和map实现的功能类似,不过现在这个抽象类已经过时了,被map接口所取代。 第一: 继承的类有所不同public class Hashtable<K,V> extends Dic原创 2016-03-25 11:49:23 · 448 阅读 · 0 评论 -
ConcurrentHashMap源码解析
这些天一直在看集合相关的源码,确实学到了不少东西。这些集合都是息息相关的,学了就停不下来!学集合就必须要学习锁的知识,学了锁那么并发编程的知识也不能少,都是很重要的基础知识。 jdk1.8的源码和之前版本确实不太一样,有些看不懂,所以借鉴一下别人的博客,阅读一下以前版本的ConcurrentHashMap的源码吧。。。。。。。 转自这里写链接内容通过分析Hashtable就知道,synchron转载 2016-03-25 13:35:21 · 772 阅读 · 0 评论 -
JVM(一)--概述
什么是JVMJVM的物理架构图 类加载器(ClassLoader) 用来加载.class文件执行引擎(执行字节码或本地方法)运行时数据区(方法区,堆,栈,本地方法栈,PC寄存器)JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令原创 2016-03-25 23:14:51 · 572 阅读 · 1 评论 -
JVM(二)--Java代码编译和执行的过程
Java代码编译是由Java源码编译器来完成,流程图如下所示: Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: Java代码编译和执行的整个过程包含了以下三个重要的机制:Java源码编译机制类加载机制类执行机制Java源码编译机制由以下三个过程构成:分析(词法、语法分析)和填充符号表注解处理语义分析和字节码生成(.class文件)词法分析: 将源代码转变为标记(转载 2016-03-26 00:10:23 · 570 阅读 · 0 评论 -
JVM(三)--JVM内存管理和JVM垃圾回收
JVM内存组成结构 JVM内存结构由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示: 1)堆所有通过new创建的对象的内存都在堆中分配,其大小可以通过-Xmx和-Xms来控制。堆被划分为新生代和旧生代,新生代又被进一步划分为Eden和Survivor区,最后Survivor由FromSpace和ToSpace组成,结构图如下所示: 新生代。新建的对象都是用新生代分配内存,Eden空间转载 2016-03-26 00:22:01 · 422 阅读 · 0 评论 -
Java--length,length(),size()区别
Java中基础的不能再基础的东西,但是总是搞乱掉,故留个记录Java中的length属性是针对数组说的。声明了一个数组之后,想要获取此数组的长度就要通过length属性得到。Java中的length()方法是针对字符串String的,要得到字符串的长度调用length()方法。Java中的size()方法是针对泛型集合说的,如果想知道泛型有多少元素就调用这个方法!这个例子来演示这两个方法和一个属性的转载 2015-12-02 20:18:40 · 487 阅读 · 0 评论