随笔分类 - JAVA
java虚拟机相关内容
摘要:常用的数据结构 数组 采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为 O(1),但在数组中间以及头部插入数据时,需要复制移动后面的元素。 链表 一种在物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 链表由一系列结点(链表中每一个元素)
阅读全文
摘要:List ArrayList和LinkedList是我们常用的集合数据结构。他们的类结构以及依赖关系如下图。 ArrayList、Vector、LinkedList 集合类继承了 AbstractList 抽象类,而 AbstractList 实现了 List 接口,同时也继承了 AbstractC
阅读全文
摘要:多线程概念 进程与线程 进程是操作系统进行资源分配的最小单位,CPU从一个进程切换到另一个进程叫做进程上下文切换。 线程是CPU调度的最小单位,是进程的一部分,由进程创建,一个进程拥有1~N个线程。线程又分为用户线程和守护线程,两者的区别是,后者会随着主线程结束而结束。 Thread线程类 继承th
阅读全文
摘要:JAVA的锁优化 锁优化包含:自适应性自旋、锁消除、锁膨胀、轻量级锁、偏向锁。以下为锁的升级过程: 自旋锁与自适应自旋 JDK1.6之前自旋默认是关闭的,之后是默认开启的。自旋等待避免了线程状态转换带来的性能开销,但是需要占用处理器的时间,如果占用时间很短,效果很好,如果占用时间很长,会白白消耗处理
阅读全文
摘要:线程安全 Java语言中,不可变的对象一定是线程安全的,无论是对象的方法实现还是方法的调用者,都不需要在进行任何线程安全的保障措施。 Java语言中,如果多线程共享的数据是一个基本数据类型,那么只要在定义时使用Final关键字修饰它就可以保证它是不可变的。如果共享的数据是一个对象,由于Java语言目
阅读全文
摘要:线程的实现方式 线程主要有三种实现方式:使用内核线程实现(1:1实现),使用用户线程实现(1:N实现),使用用户线程加轻量级进程混合实现(N:M实现) Java线程实现 JDK1.3之后,采用内核线程实现的方式实现JAVA线程。 java线程调度模式 线程调度主要有两种模式:一种是协同式线程调度,另
阅读全文
摘要:硬件的效率和一致性 Java内存模型和硬件的模型类似。我们先看下硬件的模型。首先强调,计算机处理器的处理运算能力是远远高于存储设备的运算能力的,二者相差几个数量级的运算效率。所以现代计算机引入了一层或者多层读写速度尽可能接近处理器速度的高速缓存来作为内存和处理之间的缓冲。 这样做解决了速度与效率问题
阅读全文
摘要:判断对象是否“已死” 引用计数法 在对象中添加一个引用计数器,每当一个地方引用它时,计数器值+1,引用失效的时候,计数器值-1;当计数器值为0的时候说明对象“已死”。 这样做的好处就是简单快捷,且效率也很高,但是无法解决掉循环互相引用的问题。 可达性分析算法 通过一系列被成为“GC Roots”的根
阅读全文
摘要:运行时数据区域 包含:程序计数器,java虚拟机栈,本地方法栈,java堆,方法区,运行时常量池。具体相关结构如下图。 区域 是否公用 相关概念 其他描述 程序计数器 线程私有 当前线程执行的字节码行号指示器 如果当前线程执行的java方法,那么计数器 java虚拟机栈 线程私有 java方法执行的
阅读全文

浙公网安备 33010602011771号