随笔分类 - JVM
Java Virtual Machine
摘要:Java NIO是一种基于通道和缓冲区的I/O方式,已经被广泛的应用,成为解决高并发与大量连接和I/O处理问题的有效方式。 Java NIO相关组件 Java NIO主要有三个核心部分组成,分别是:Channel(通道),Buffer(缓冲区), Selector(选择器) Channel Chan
阅读全文
摘要:在多线程的情况下,ThreadLocal提供了一个种为每个线程访问相同的变量,并且线程对变量的更新互不影响的机制。也是对象实现线程安全的一种方式。 ###ThreadLocal的实现机制 我们常用的方法有get、set和initialValue,这次将会围绕这几个方法的源码进行深入解析 get方法
阅读全文
摘要:JVM垃圾回收的算法很多,但是不管是哪种算法,在进行GC时大致的流程都是差不多的,主要有以下3个过程: ###1. 枚举根节点 这个过程主要是找到所有的GC Roots对象,这些对象一般发生在JVM虚拟机栈栈帧、常量池中的静态对象、方法区中静态类属性引用、本地方法栈中引用的对象。这个过程会发生STW
阅读全文
摘要:Java虚拟机在执行Java程序的过程中会把它所管理的内存划分成为若干个不同的数据区域。 程序计数器(Program Counter Register) 每一个线程都有一个程序计数器,各线程之间互不影响,独立存储,属于线程的私有内存。如果线程正在执行一个Java方法,这个计数器记录的是正在执行的虚拟
阅读全文
摘要:在Java虚拟机中,如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用。一共有4类引用: 强引用(Strong Reference) 类似Object obj = new Object()这类的引用,只要强引用还存在,垃圾收集器永远不会回收掉被引用
阅读全文
摘要:###无锁 无锁是指线程通过无限循环来执行更新操作,如果执行成功就退出循环,如果执行失败(有其他线程更新了值),则继续执行,直到成功为止。CAS操作就属于无锁。如果从性能的角度来看,无锁状态的性能是非常高的。 ###自旋锁 自旋锁是一种通过让线程不释放当前的CPU执行一个忙循环,来尝试获取锁的方式。
阅读全文
摘要:最近阅读了《Java并发编程实践》这本书,总结了一下几个相关的知识点。 线程安全 当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。可以通过原子性、一致性、不可变对象、
阅读全文
摘要:最常用的HotSpot VM垃圾收集器是分代垃圾收集。该方案是基于两个观察事实。大多数分配对象的存活时间很短。存活时间久的对象很少引用存活时间短的对象。上述两个观察事实统称为弱分代假设(Weak Generational Hypothesis)。基于此假设,HotSpot VM将堆分成2个物理去。1...
阅读全文
摘要:HotSpot VM运行时系统为HotSpot JIT编译器和垃圾收集器提供服务和通用API,同时还为VM提供启动、线程管理、JNI(Java本地接口)等基本功能。HotSpot VM运行时环境担当许多职责,具体如下:1、命令行选项 通过命令行选项来配置HotSpot VM,相当于HotSpot ...
阅读全文