![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 76
向程序猿进化
这个作者很懒,什么都没留下…
展开
-
JVM内存区域划分及其作用
一、运行时数据区1、程序计数器(寄存器)当前线程所执行的字节码行号指示器字节码解释器工作依赖计数器控制完成通过执行线程行号记录,让线程轮流切换各条线程之间计数器互不影响线程私有,生命周期与线程相同,随JVM启动而生,JVM关闭而死线程执行Java方法时,记录其正在执行的虚拟机字节码指令地址线程执行Nativan方法时,计数器记录为空(Undefined)唯一在Java虚拟机规范中没有规定任何Out...原创 2018-06-21 21:34:26 · 2277 阅读 · 0 评论 -
JVM垃圾收集器与内存分配策略
判断对象是否存活在进行GC之前,首先要确定的就是在java堆中那些对象已经“死去”那些对象还“活着”引用记数法(Referencecounting)了解即可,虚拟机并不是通过该算法来判断对象是否存活。引用计数器的实现很简单,对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1,当引用失效时,引用计数器就减1。只要对象A的引用计数器的值为0,则对象A就不可能再被使用。存在的问题:很难处...原创 2018-06-21 21:42:12 · 144 阅读 · 0 评论 -
虚拟机类加载机制
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中准备、验证、解析3个部分统称为连接(Linking)。如图所示。加载、验证、准备、初始化和卸载这5个阶段的顺序...原创 2018-06-21 21:45:16 · 133 阅读 · 0 评论 -
volatile的实现原理
关键字volatile是JVM提供的最轻量级的同步机制 为什么要使用Volatile Volatile变量修饰符如果使用恰当的话,它比synchronized的使用和执行成本会更低,因为它不会引起线程上下文的切换和调度。 Java内存模型对volatile专门定义了一些特殊的访问规则,当一个变量被定义成volatile之后,他将具备两种特性: 1、保证此变量对所有线程的可见性。 2、禁止...原创 2018-08-16 19:12:09 · 722 阅读 · 0 评论 -
Synchronized的实现原理
版本1: 每个对象有一个监视器锁(monitor)。当monitor被占用时就会处于锁定状态,线程执行monitorenter指令时尝试获取monitor的所有权,过程如下: 1、如果monitor的锁计数器为0,则该线程进入monitor,然后将计数器设置为1 ,该线程即为monitor的所有者。 2、如果线程已经占有该monitor,只是重新进入,则进入monitor的计数器加1 3....原创 2018-08-16 19:14:08 · 254 阅读 · 0 评论 -
happens-before(先行发生原则)
JSR-133使用happens-before的概念来阐述操作之间内存的可见性,在JMM中如果一个操作的结果需要对另一个可见,那么这两个操作之间必须要存在happens-before规则 注意:两个操作之间有happens-before关系,并不意味着前一个操作必须要在后一个操作之前执行。happens-before仅仅要求前一个操作的(执行的结果)对后一个操作可见。 JMM的设计思想:程序员...原创 2018-08-16 19:15:04 · 1021 阅读 · 0 评论