随笔分类 - java
摘要:类加载过程本质上就是类加载器根据类的全限定名称去找到对应的class字节码文件内容,然后将字节码文件的内容加载到虚拟机方法区中的过程。所以我们大体上可以把类加载的过程分为三部分:1、加载,就是获取到class文件的内容2、链接,就是把相应的文件内容添加到虚拟机中,转变为虚拟机中的class对象,使虚
阅读全文
摘要:Lambda来源于希腊字母入,发音为 /'læmdə/对高数有所了解的人都知道λ用于声明一个数学逻辑系统,表示根据XX的输入参数,会返回某个Y结果。这正是编程语言中函数(方法)的意思。因此Lambda表达式在编程语言中说白了就是指的一个方法表达式。为什么要搞出这么一个东西来呢?这是由于我们的编程语言
阅读全文
摘要:什么是动态代理呢?就是在java的运行过程中,动态的生成的代理类。(为了更熟悉的了解动态代理,你必须先熟悉代理模式,可点击设计模式之代理模式 阅读)我们知道java属于解释型语言,是在运行过程中,寻找字节码文件从而实现类加载的。但是字节码文件并不需要一定是硬盘中的class文件,也可以是来自网络、数
阅读全文
摘要:代理模式英文名叫Proxy Pattern 看下Proxy的含义 [ˈprɑ:ksi] n.代表权;代理人,代替物;委托书; 主要表达的就是代表、代替、委托的意思。 我对这个模式的理解是这样的: 一个服务或者是一个功能,一个对象。由于某种自身或者外界的原因,不能直接暴露出来,而是需要另外一个对象做一
阅读全文
摘要:先来看看这个关键字是什么意思:volatile [ˈvɒlətaɪl] adj. 易变的,不稳定的; 从翻译上来看,volatile表示这个关键字是极易发生改变的。volatile是java语言中,最轻量级的并发同步机制。这个关键字有如下两个作用:1、任何对volatile变量的修改,java中的其
阅读全文
摘要:finalize()方法是Object类中定义的protect方法。每一个类都可以重写该方法,给出自己的实现。当类在被回收期间,这个方法就可能会被调用到。 为什么说可能?这是由于finalize()的调用时机甚至是否会被调用到都存在着太多的不确定性。基于这个原因,几乎所有的技术书籍及文章都不推荐开发
阅读全文
摘要:在上一篇文章中,介绍了在GC机制中,GC是以什么标准判定对象可以被标记的,以及最有效最常用的可达性分析法。今天介绍另外一种非常常用的标记算法,它的应用面也相当广泛。这就是:引用计数法 Reference Counting 这个算法的本质,其实就是上篇文章中判断一个对象要被回收的另外一种思路,即如果没
阅读全文
摘要:在上一篇文章中,我介绍了关于GC机制中,GC在确认垃圾对象后,是如何回收这些垃圾对象的几种算法。现在介绍下GC机制一般是如何定位(或者叫做标记)出这些垃圾对象的。我们先来问下自己,如何判介绍了断一个对象可以被回收。答案很简单也很直白。这个对象再也不会被调用到了 ,那么就可以被回收了。那么怎么判断一个
阅读全文
摘要:说到Java,一定绕不开GC,尽管不是Java首创的,但Java一定是使用GC的代表。GC就是垃圾回收,更直接点说就是内存回收。是对内存进行整理,从而使内存的使用尽可能大的被复用。 一直想好好写一篇关于GC的文章,可是却发现要写的东西太大了,不是一篇博客能简单的介绍完的。所以打算拆分成若干篇博客,一
阅读全文
摘要:享元模式是一种常用的设计模式。尤其是在拥有大数据量的传统后台服务中尤为突出。我们往往在不知不觉中就使用了这个设计模式。先来看看享元模式的定义:Flyweight Pattern Flyweight译为: n. 次最轻量级的拳击选手。 拳击比赛的重量级、轻量级是通过选手的体重来分界的。享元模式就是通过
阅读全文
摘要:HashTable的故事 很早之前,在讲HashMap的时候,我们就说过hash是散列,把...弄碎的意思。hashtable中的hash也是这个意思,而table呢,是指数据表格,也就是说hashtable的本意是指,一份被数据被打散,分散在各处的数据表格。 HashTable,作为jdk中,极早
阅读全文
摘要:在Java语言中,引用是指,某一个数据,代表的是另外一块内存的的起始地址,那么我们就称这个数据为引用。 在JVM中,GC回收的大致准则,是认定如果不能从根节点,根据引用的不断传递,最终指向到一块内存区域,我们就将这块内存区域回收掉。但是这样的回收原则未免太过粗暴。有些时候,内存的使用并不紧张,我们并
阅读全文
摘要:Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域的用途各不相同,同时也依据着各自的执行规则,独立的创建和销毁数据。 虚拟机内存的划分,如图所示: 线程之间互相独立的区域有: 虚拟机栈 、本地方法栈、程序计数器 线程可以共享数据的区域: 方法区 、堆 每个
阅读全文
摘要:Hash,我们在说HashMap的时候,已经知道Hash是散列,Map是映射了。 那么Set又是什么呢 ? 先来看看Set的翻译是什么 n. [数] 集合;一套;布景;[机] 装置 这里Set所取的含义是集合。而且是数学概念上的集合。数学概念上的集合有什么特点呢?那就是Set中所有的元素不能重复。所
阅读全文
摘要:在jdk的源码中,存在这样的一些接口,他们不包含任何的(抽象)方法,但是却广泛的存在。 这种接口我们称之为Mark Interface,也就是标记接口。 这些接口呢,我们不用来实现任何的方法,他们的作用就是当某个类实现这个接口的时候,我们就认为这个类拥有了这个接口标记的某种功能了。 下面通过三个例子
阅读全文
摘要:背景 快速排序,是在上世纪60年代,由美国人东尼·霍尔提出的一种排序方法。这种排序方式,在当时已经是非常快的一种排序了。因此在命名上,才将之称为“快速排序”。这个算法是二十世纪的七大算法之一,平均情况下时间复杂度为Ο(nlogn),而且在O(nlogn)的情况下,实际的运算速度都要快于其他同时间复杂
阅读全文
摘要:之前在学习java源码时,发现了assert这个不常用的关键字。下面直接来介绍下这个关键字的使用。 assert是什么? 它是jdk1.4之后新增加的关键字,没了。 assert的作用是什么? assert在很多编程语言中的用途都是断言。 但是什么是断言呢? 只是简单的判断一下布尔表达式是否为真么?
阅读全文
摘要:咱们今天也来说说定时器Timer Timer是什么? Timer n. [电子] 定时器;计时器;计时员 从翻译来看,我们可以知道Timer的本意是,定时定点。 而JDK中Timer类也的确是这个本意。那么接下来,我们通过JDK中的源码来学习下Timer这个类。 Timer中有这样两个变量。这两个变
阅读全文
摘要:纳尼,接口中可以定义实例方法了?! 纳尼,接口中还可以定义静态方法了?! 没错,在Java8中新增了很多新的特性,其中就包括可以在接口中添加方法和变量。 首先我们来看下代码 代码中,我们可以发现以下几点不同: 1、在接口中,可以直接添加静态方法。 该静态方法作为接口(防盗连接:本文首发自http:/
阅读全文
摘要:单例模式是软件开发中非常普遍的一种模式。它的主要作用是确保系统中,始终只存在一个类的实例对象。 这样做的好处有两点: 1、对于需要频繁使用的对象,在每次使用时,如果都需要重新创建,并且这些对象的内容都是一样的。则不但提高了jvm的性能开销(堆中开辟新地址,同时降低GC效率等),同时还会降低代码的运行
阅读全文