摘要: volatile 在多线程并发编程中synchronized和volatile都扮演着重要的角色,volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的"可见性"。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调... 阅读全文
posted @ 2017-07-08 14:25 jiumao 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 锁 对象头(Object Header) HotSpot 虚拟机的对象头包括两部分信息:Mark Word(标记字段)和 Klass Pointer(类型指针) Mark Word 用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程 ID、偏向时间戳等等。JVM 对象头一般占用两个机器码,在 32-bit JVM 上占用 64b... 阅读全文
posted @ 2017-07-08 14:10 jiumao 阅读(893) 评论(0) 推荐(0) 编辑
摘要: 一致性 内存模型 每一个线程有一个工作内存和主存独立 工作内存存放主存中变量的值的拷贝 Happen Before 1、程序次序规则:在一个单独的线程中,按照程序代码的执行流顺序,(时间上)先执行的操作happen—before(时间上)后执行的操作。 2、管理锁定规则:一个unlock操作happen—before后面(时间上的先后顺序,下... 阅读全文
posted @ 2017-07-08 13:51 jiumao 阅读(4388) 评论(0) 推荐(0) 编辑
摘要: String应用简介 前言 String字符串在Java应用中使用非常频繁,只有理解了它在虚拟机中的实现机制,才能写出健壮的应用,本文使用的JDK版本为1.8.0_111。 常量池 Java代码被编译成class文件时,会生成一个常量池(Constant pool)的数据结构,用以保存字面常量和符号引用(类名、方法名、接口名和字段名等)。 很简单的一段代码,通过命令 javap ... 阅读全文
posted @ 2017-07-08 13:39 jiumao 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 内省(Introspector)是Java 语言对Bean类属性、事件的一种缺省处理方法。JDK提供了对JavaBean进行操作的API,这套API就称为内省。 Java的内省是指在不知道Bean对象的属性的情况下,通过Introspector和属性描述器(PropertyDescriptor)来获取属性的getter/setter方法。 Java内省机制的一般做法是通过类... 阅读全文
posted @ 2017-07-08 13:03 jiumao 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 每个Java class在jvm中都有一个对应对象描述。每个Java对象都有一个只想class的指针。反射的实质获取对象指向Class元数据描述的信息,详见java.lang.class类。反射通过class对类的描述可以获取类field、method、包括匿名类和内部类等所有类定义的信息。下面详细介绍反射的实现: 1.先检查 AccessibleObject的override属性... 阅读全文
posted @ 2017-07-08 12:57 jiumao 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 注解 运行 Sun JDK字节码生成分为三个阶段: 解析和填充符号表过程,生成语法树 插入式注解处理器的注解处理过程,可以操作语法树。 这个操作语法树的特性,可以让注解生成代码或者填充默认值 Google的AutoValue值类型生成类库 分析与字节码生成。 作用阶段: 枚举类型 java.lang.annotation.RetentionPoli... 阅读全文
posted @ 2017-07-08 12:36 jiumao 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 类加载器 前提:通过一个类的全限定名来获取描述此类的二进制字节流,实现这个动作的代码模块称为类加载器。这里并没有规定读取方式,可以从Class文件、网络、数据库、内存等。比较两个类是否相等,需要两个类来源于同一个Class文件,被同一个类加载器加载。 Java有两种类加载器。Java虚拟机用c++语言实现的启动类加载器(Bootstrap ClassLoader)。Java语言的其它类加载... 阅读全文
posted @ 2017-07-08 12:32 jiumao 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 一个序列化例子 Test.java 包括一个无参构造器,一个序列化的属性和不被序列化的属性。 定义序列化的工具方法 序列化 反序列化 测试(反序列化的本质是对象的深克隆,不会走构造方法) 阅读全文
posted @ 2017-07-08 12:31 jiumao 阅读(91) 评论(0) 推荐(0) 编辑
摘要: 其实每个模式名称就表明了该模式的作用,代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候回去找中介,为什么呢?因为你对该 地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你做,此处的代理就是这个意思。再如我们有的时候打官司,我们需要请律师,因为律师在法律方面有 专长,可以替我们进行操作,表达我们的想法。先来看看关系图: 代理模式的应用场景:... 阅读全文
posted @ 2017-07-08 12:30 jiumao 阅读(146) 评论(0) 推荐(0) 编辑