
jvm
文章平均质量分 93
zy丶秋水
change me
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JVM笔记 -- 垃圾回收机制
目录对象存活判定算法引用计数算法可达性分析算法方法区的回收垃圾收集算法(GC算法)分代收集算法(Generational Collection)标记 - 清除算法复制算法标记 - 整理算法HotSpot的算法实现对象引用随着程序的运行,内存中存在的实例对象、变量等信息占据的内存越来越多,如果不及时进行内存回收,势必会带来程序性能的下降及因...原创 2018-12-16 16:42:04 · 405 阅读 · 0 评论 -
HotSpot中的几种锁优化技术
在JDK 1.6中,HotSpot虚拟机实现不少锁优化技术来提高程序的执行效率。自旋锁自旋锁可以使线程在没有取得锁的时候不被挂起,而转去执行一个空循环。这样可以避免线程切换的开销,在锁被占用时间很短时对性能有所提高。反之,如果锁占用时间过长,那么自旋的线程只会白白消耗处理器资源。在jdk 1.6中还引入了自适应的自旋锁,即锁的自旋次数不在固定,而是根由前一次在同一个锁的自旋时间及锁的拥有者...原创 2018-07-12 22:44:17 · 402 阅读 · 0 评论 -
JVM笔记 -- JVM内存结构
jvm内存结构组成1. 程序计数器是最小的一块内存区域,它可以看作是当前线程所执行的字节码的行号计数器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程回复等基础功能都需要依赖这个计数器来完成。线程私有:各线程都有一个独立的程序计数器,他们之间独立存储、互不影响。执行Java方法时,计数器记录正在执行的...原创 2018-12-02 15:54:20 · 290 阅读 · 0 评论 -
JVM笔记 -- Java内存模型
Java内存模型(JMM)规定了所有的变量都存储在主内存(Main Memroy)中,每条线程还有自己的工作内存(Working Memory),线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存中的变量。不同线程之间也无法直接访问对方工作内存中的变量,线程间变量值的传递均需要通过主内存来完成。三个特性原...原创 2018-12-09 23:06:50 · 269 阅读 · 0 评论 -
JVM笔记 -- Java对象模型
简介在HotSpot虚拟机中,对象在内存中的存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。对象头(instanceOopDesc) Mark Word,主要存储对象运行时记录信息,如hashcode, GC分代年龄,锁状态标志,线程ID,时间戳等 元数据指针,即指向方法区的instanceKlass实例,虚拟...原创 2018-12-15 16:46:35 · 267 阅读 · 0 评论 -
JVM笔记 -- 即时编译(JIT)
编译简介在谈到JIT前,还是需要对编译过程有一些简单的了解。在编译原理中,把源代码翻译成机器指令,一般要经过以下几个重要步骤:JIT简介JIT是just in time的缩写,也就是即时编译。通过JIT技术,能够做到Java程序执行速度的加速。那么,是怎么做到的呢?我们都知道,Java是一门解释型语言(或者说是半编译,半解释型语言)。Java通过编译器javac先将...原创 2019-01-01 16:11:57 · 8651 阅读 · 1 评论 -
JVM笔记 -- 类加载机制
类的生命周期类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段。其中验证、准备、解析3个部分统称为连接。在一般情况下,它们开始的顺序如上图所示。当然,在某些特定情况下,为了支持Java语言的动态绑定的特性,解析阶段可以在初始化阶段之后开始。(注:是按序开始,它们的执行通常都是互相交叉地混合进行的)加载通过一个类的...原创 2019-03-04 21:15:01 · 284 阅读 · 0 评论