jvm
文章平均质量分 71
dreamytian
这个作者很懒,什么都没留下…
展开
-
jvm内存模型(总结性质)
jvm内存模型。 设计目的: 屏蔽掉硬件和操作系统的内存访问差异。以达到java程序在各种平台下达到一致的访问效果。这个c/c++ 不同,后者是直接使用物理硬件和操作系统的内存模型。设计原则:围绕着并发过程总如何处理原子性 可见性 有效性这三个特征来建立。具体的目标就是定义程序中变量的访问规则,即在虚拟机将变量存储到内存和从内存中取出变量的底层细节。所以内存模型本质上 是对特定内存和高速缓存 进...原创 2018-03-18 21:30:13 · 429 阅读 · 0 评论 -
jvm类加载和解析过程(总结性质)
类加载机制的定义:把class文件加载到内存,对数据进行校验解析和初始化最终形成虚拟机直接使用的java类型。具体来说:1 通过一个类的全限定名来获取定义此类的二进制字节流。2 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构(jdk7 中就是基于InstanceKlass类的描述链)3 在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入...原创 2018-03-18 22:47:30 · 4034 阅读 · 2 评论 -
java对象的创建和内存布局
对象的创建:对象的创建的基础就是类的加载过程。1 首先检查 new指令的参数是否能在常量池中定位到一个类的符号引用,以及检查类是否被加载 解析 初始化过,否则必须先执行类的加载过程。2 为对象分配内存,有指针碰撞和空闲列表两种方式,具体也跟垃圾收集算法的实现有关。3 对象的数据区域各字段初始化为0值。4 初始化对象头。5 执行init方法进行初始。对象的内存区域:对象头,实例数据,对齐填充。对象头...原创 2018-03-18 23:07:13 · 184 阅读 · 0 评论 -
java虚拟机垃圾回收机制
前置知识:之前在对象的内存布局中,提到对象头 mark word有个分代年龄。下面总结一下垃圾收集算法。哪些内存需要回收:垃圾收集主要是针对堆内存区域中的对象的垃圾收集,因为程序计数器 虚拟机栈 本地方法栈3个区域的声明周期是依赖线程的。方法或者线程结束,内存就自然回收了。方法区(永久代)也可能会回收但是条件会很苛刻。但是大量使用反射 动态代理以及相关框架,osgi这种大量定义classloade...原创 2018-03-18 23:09:25 · 168 阅读 · 0 评论 -
java类加载器总结
类加载机制的加载阶段,是通过类加载器来加载的。类加载器的模型。 双亲委派, 就是你要加载一个类的,首先会委派给父类的类加载器,看看这个类有没有加载。 不同的类加载器,实现加载不同位置的类。当一个 JVM 启动的时候,Java 缺省开始使用如下三种类型类装入器: 启动(Bootstrap)类加载器: /lib 下面的类库加载到内存中 标准扩展(Extension)类加载器 它负责...原创 2018-03-18 23:42:00 · 244 阅读 · 0 评论 -
jvm字节码执行引擎
字节码执行引擎。 包含三部分:字节码解释器 pc计数器 虚拟机栈 (栈帧结构 包括局部变量表 操作数栈 动态连接 返回地址。) pc计数器: pc计数器是通过字节码解释器根据代码逻辑 来选取下一条指令,并交给 pc计数器。可以理解就是解释器决定用来执行某个指令的 指令地址 。。 在一个方法内, 程序计...原创 2018-03-18 23:50:45 · 229 阅读 · 0 评论 -
浅析volatile
关于 volatile 我这里要好好总结一下。volatile关键字 对一个变量修饰,起到了两个作用,立即可见和禁止指令重排序。本质上 都是在该变量被赋值后 多了一条指令 lock addl $0x0,(%esp) 这个指令起了两个作用。首先说立刻可见:一个是带lock前缀的addl汇编指令,作用是本cpu的cache 立刻写入主内存(这里是把当前修改变量的虚拟机栈的内存模型认为是cpu寄存...原创 2018-03-19 14:04:20 · 184 阅读 · 0 评论 -
浅析轻量级锁
从轻量级锁 来看锁机制。(目前 上的唯一一张图。= =。 因为有些东西没有图的话 是很难理清楚的 - - )对象是否被某个线程的锁定的依据是, 对象头中记录的信息。 mark word 也叫对象标志词。对象头的信息内容是变化的,变化后是根据不同的锁标志位来描述对应的信息。比如当对象头未锁定时候 存储的是对象哈希码和分代年龄。锁标志位为01 。而锁被占用时候存储的指向锁记录的指针以及锁标志位。syn...原创 2018-03-19 15:51:30 · 1858 阅读 · 0 评论