zoukankan      html  css  js  c++  java
  • jvm(内存分配和回收策略、字节码执行引擎、运行时栈的结构)

    1、默认的垃圾回收器

    Parallel Scavenge(新生代)+Parallel Old(JDK1.7、1.8)

    G1(JDK1.9)

    2、内存分配和回收策略

    (1)大对象直接进入老年代

    大对象是指,需要大量连续内存空间的java对象(字符串、大数组),-XX:PretenureSizeThreshold可以令大于这个设置值的对象直接在老年代分配。这样可以避免在Eden区及两个Survivor区之间发生大量的内存分配

    (2)长期存活的对象进入老年代

    对象在Survivor区中每“熬过”一次MinorGC,年龄就会增加一岁,当他的年龄增加到一定的程度(默认为15),就将进入老年代

    (3)动态对象年龄判断

    如果在Survivor空间中相同年龄所有对象大小的总和大于Surivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,无须等到Max Tenuring Threshold中要求的年龄

    (4)空间分配担保

    HandlePromotionFailure,检查老年代最大可用的连续空间是否大于历次晋升到老年代对象的平均大小,如果大于,将尝试着进行一次Minor GC,如果小于,或者设置不允许冒险,那这时也要改为进行一次Full GC

    3、字节码执行引擎

    (1)所有的java虚拟机的执行引擎都是

    输入的是字节码,输出的是执行结果,处理的过程是字节码的解析过程

    (2)java虚拟机是编译执行还是解释执行

    JIT的出现加快了java的速度(解释的过程较慢),因此java是混合型执行语言

    4、运行时栈的结构

    (1)局部变量表

    局部变量表是一组变量值存储空间,用于存放方法参数和内部定义的局部变量。在Java程序编译为Class文件时,就在方法的Code属性和max_local数据项中该方法所需要的局部变量表的最大容量

    (2)变量槽(Slot)

    数据可以使用32位或者更小的物理内存来存放,他就是变量槽(局部变量表的最小容量单位),一个Slot可以存放一个32位以内的数据类型,对于64位的数据类型,虚拟机会以高位对齐的方式为其分配两个连续的Slot空间

    (3)操作数栈

    同局部变量表一样,操作数栈的最大深度也在编译的时候写入到Code属性的max_stacks数据项中

    大多虚拟机的实现里都会做一些优化处理,令两个栈帧出现一部分重叠,让下面栈帧的部分操作数栈与上面栈帧的部分局部变量表重叠在一起,这样在进行方法调用的时候就可以共用一部分数据,无需进行额外的参数复制传递

    5、long和double在32位系统中是不是原子操作

    不是,赋值或更新的时候需要两个线程操作,而64位的操作系统就是原子操作

    6、方法的返回地址

    (1)当一个方法开始执行后,只有两种方法可以退出这个方法

    执行引擎遇到任意一个方法返回的字节码指令

    在方法执行过程中遇到了异常,并且这个异常没有在方法体内得到处理

    (2)方法退出的过程实际上就等同于把当前的栈帧出栈

    恢复上层方法的局部变量表和操作数栈

    把返回值压入调用者栈帧的操作数中

    调用PC计数器的值以指向方法调用指令后面的一条指令

    7、方法调用

    方法调用不等同于方法执行,该阶段唯一的任务就是确定调用哪一个方法,方法在实际运行时内存分配中的入口地址需要在类加载期间,甚至运行时才能确定

    8、虚方法表

    (1)虚方法表

    在类加载阶段(解析阶段之后)进行初始化,存放了各个方法的实际入口地址,避免了元数据查找,提高了性能,查找过程如下:

     (2)虚方法表的分派机制

    如果某个方法在子类中没有被重写,那么子类的虚方法表里面的入口地址和父类相同方法的地址入口是一致的,都指向父类的实现入口

    如果子类中重写了这个方法,子类方法表中的地址将会指向子类实现版本的入口地址

  • 相关阅读:
    MyBatis学习(一)
    ORM框架
    Java 核心技术点之注解
    git 分支 合并
    TensorFlow——零碎语法知识点
    TensorFlow——深入MNIST
    tensorflow——MNIST机器学习入门
    TensorFlow——小练习:feed
    TensorFlow——小练习:counter
    TensorFlow——交互式使用会话:InteractiveSession类
  • 原文地址:https://www.cnblogs.com/zhai1997/p/12616787.html
Copyright © 2011-2022 走看看