全面了解java中的CAS机制 什么是CAS在jdk 1.5中增加的一个最主要的支持是Atomic类,比如说AtomicInteger, AtomicLong,这些类可帮助最大限度地减少在多线程中对于一些基本操作(例如,增加或减少多个线程之间共享的值)的复杂性。而这些类的实现都依赖于CAS(compare and swap)的算法。 乐观锁和悲观锁cpu是时分复用的,也就是把cpu的时间片,分配给不同的threa...
4. 虚拟机类加载机制(二) 1.类加载器把加载阶段的 “通过一个类的全限定名来获取一个类的二进制字节流”这个动作放到java虚拟机外部去实现,实现这个动作的代码模块为“类加载器”三种不同的类加载器:启动类加载器、扩展类加载器、应用程序类加载器除此之外,还有自定义的类加载器,它们之间的层次关系被称为类加载器的双亲委派模型。该模型要求除了顶层的启动类加载器外,其余的类加载器都应该有自己的父类加载器,而这种父子关系一般...
4. 虚拟机类加载机制 (一) 1.概述上节讲到虚拟机要加载Class文件,那是如何加载这些Class文件呢?Class文件中的信息进入到虚拟机会发生哪些变化?都是这节要讨论的。2. 什么是虚拟机的类加载机制虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制。3. 在java语言中类的加载、连接和初始化过程都是在...
3.类文件结构 1. 代码编译结果从本地机器码转变为字节码,是构成平台无关性的基石。实现平台无关性的基础是虚拟机和字节码存储格式。 java虚拟机不与java等任何语言绑定,java虚拟机只认识.class文件,任何语言只要编译成了.class文件(字节码),java虚拟机都能运行。即虚拟机不关心Class的来源是何种语言。2. 那Class文件包含哪些东西呢?包含有类的版本、字段、方法、接口等...
2. 垃圾收集器与内存分配策略(二) 上一篇我们已经讨论了内存回收的内容,我们再来说一下,对象的内存分配策略往大方向讲,就是在堆上分配,对象主要分配在新生代的Eden区上,如果启用了本地线程分配缓冲,将按线程优先在TLAB上分配。普遍的内存分配规则:(1)对象优先在Eden分配 大多数情况下,对象在Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC(2)大对象直接进入老年代 所谓的大对象是指,需要...
2.垃圾收集器与内存分配策略(一) 1. 垃圾收集需要完成的三件事情:(1)哪些内存需要回收?(2)什么时候回收?(3)如何回收?哪些内存需要回收? 程序计数器、虚拟机栈、本地方法栈3个区域都是随着线程而生或死,当线程结束时,内存自然跟着回收了。但java堆和方法区则不一样,我们只有在程序运行期间才会知道创建哪些对象,这部分的内存分配与回收是动态的,所以,垃圾收集器主要关注堆和方法区的回收。什么时候回收?当然是对象死的时候回收。那如...
1.Java内存区域 1.对象的创建过程 (1)当遇到一个new指令的时候,首先去检查这个指令参数是否能在常量池中定位到一个类的符号引用,并检查这个符号引用代表的类是否已经被加载、解析和初始化,若没有,则先执行类的加载过程. (2)在类加载检查通过后,虚拟机为新生对象在堆上分配内存。对象所需内存大小在类加载完后便可确定。那分配方案有两种:1.在java堆中内存是绝对规整的情况下,就把指针向空闲内存中移动...
面试准备:基于JDK1.8的 hashMap源码 在jdk1.8中hashMap进行了较大优化,具体可以回答以下几点:1. hashMap内部由 数组+链表转变为数组+链表+红黑树实现,当链表节点大于8时,存储结构由链表转为红黑树。...
Mybatis语法解释 在使用Mybatis的时候,我们将查询语句写入.xml文件中,那具体的xml文件赢如何写呢?我们可以拿一个例子来解释:1. 前提:我们首先定义了java Bean:Color类public class Color { private Integer id; private String name; private Integer parentId; private...
全面了解java中的CAS机制 什么是CAS在jdk 1.5中增加的一个最主要的支持是Atomic类,比如说AtomicInteger, AtomicLong,这些类可帮助最大限度地减少在多线程中对于一些基本操作(例如,增加或减少多个线程之间共享的值)的复杂性。而这些类的实现都依赖于CAS(compare and swap)的算法。乐观锁和悲观锁cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process...
transient关键字详解 1,transient的用途及使用方法1,用途 我们知道,当一个对象实现了Serilizable接口,这个对象就可以被序列化,我们不关心其内在的原理,只需要了解这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化。而在开发过程中,我们可能要求:当对象被序列化时(写入字节序列到目标文件)时,有些属性需要序列化,而其他属性不需要被序列化,打个比方,如果一个用户有一些敏感信息(...
java IO知识点 1.对于字节流InputStream和OutPutStream,当read()和writer()时,他们只接受byte[]型数组。对于字符流Reader和Writer,read()接受char[]类型,writer()可以接受字符串、char[]数组,int值等参数。为什么已经存在字节流还要引入字符流熟悉java的应该知道,字节流比字符流产生的更早,可以说jdk一面世,已经有字节流了。那么为什么后...
AOP概念与运行原理 转载于:https://blog.csdn.net/u012403290/article/details/64443021引言AOP指的就是面向切面编程,在实际的开发和工作中很多地方都深有体现,比如权限控制,控制全局状态等。接下来会详细阐述AOP的概念,给出对应的DEMO来深入学习实践,探讨AOP的意义。技术点: 1、反射(reflect)在运行状态中,对于任意一个类,都能够知道这个类的属性和方法...
LinkedHashMap源码分析 1. 综述:LinkedHashMap继承了HashMap,HashMap是以散列表的形式存储数据的,所以,LinkedHashMap其实也是散列表的结构,但是“linked”是它对HashMap功能的进一步增强,LinkedHashMap用双向链表的结构,把所有存储在HashMap中的数据连接起来。那么,LinkedHashMap的双向链表与HashMap中的链表有什么不同呢?①桶中的链表是散列...
TreeSet源码分析 TreeSet常用方法,都是调用Treemap中的方法,只是在添加的时候用静态常量PRESENT来填充map的value位置。iterator()迭代器方法,返回的就是map的keySet的迭代器。总结TreeSet底层实现严重依赖于TreeMap,所以弄清楚TreeMap是关键。...
LinkedHashSet源码分析 LinkedHashSet具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按照元素的插入次序显示。看LinkedHashSet的内容。public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneab...
HashSet源码分析 对于HashSet而言,它是基于HashMap实现的。HashSet底层采用HashMap来保存元素,因此HashSet底层其实比较简单。package java.util;public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io....
LinkedList源码分析 1.综述: LinkedList 是通过一个直线型的双向链表来实现的,它允许插入所有元素,包括null,同时,它是线程不同步的。下面是双向链表的结构:LinkedList构造方法有两个,一个是无参构造,一个是传入Collection对象的构造。2.属性://链表的节点个数transient int size = 0;//指向头节点的指针transient Node<E> fi...
ArrayList源码分析 基于jdk 1.8的源码分析1.ArrayList底层使用java中的数组实现,类型为Object数组transient Object[] elementData; //ArrayList就存放在这个数组里面2.数组默认容量为10:private static final int DEFAULT_CAPACITY = 10;3.元素数量private int size;4.为了应对不同的构造函...
adsas 1. java只支持单重继承,一个类可以实现多个接口2. 接口不提供构造方法,接口中的方法默认为public abstract修饰,接口中的属性默认使用public static final修饰,接口允许多继承。3. 抽象类和接口都不允许实例化,一个类可以实现多个接口,但只能继承一个抽象类。接口中的每个方法都是抽象方法,抽象类中的方法并非都是抽象的。4. abstract不能与final并列修饰同...