zoukankan      html  css  js  c++  java
  • JVM:一些基础知识准备

    类加载机制

    • Load:装载类信息
      • ClassLoader:类加载器
      • 双亲委派:加载器对一个类加载器会先让父类加载器加载,假如父类加载器找不到该类,才让子类加载器加载
    • Linking:连接
      • verify(验证):保证被加载类的正确性
      • prepare(准备):为类的静态变量分配内存空间,变将其的值初始化默认值(0,0.0,null)
      • resolve(解析):将类中的符号引用转换成直接引用
        • 符号引用:classformat中的符号表示
        • 直接引用:地址
    • Initialization:初始化
      • 为静态变量赋真正的值
    • 使用
    • 卸载

    运行时数据区

    方法区

    方法区只有一个,生命周期与JVM相同。方法区内包含了运行时常量池(.class文件中的常量池,String常量池在堆中,不要混淆)
    方法区线程共享,存储类的结构信息、常量、静态变量等。
    方法区基本上不发生垃圾回收,容量不足时会抛出OOM。
    1.7用永久代实现方法区,1.8用元空间(放在本地内存中)实现方法区。

    堆只有一个,生命周期与JVM相同。
    堆线程共享,堆存储对象或者数组数据。
    堆容量不足时会抛出OOM。

    java虚拟机栈

    虚拟机栈每个线程有一个,栈中存储栈帧,栈帧记录的是方法执行信息。
    栈的深度不够用了会抛出StackOverFlowException,默认大小1M。

    • 栈帧
      • 局部变量表:方法中所有局部变量的列表
      • 操作数栈:对数值操作的一个栈结构
      • 动态连接:栈帧中保存了一个指向 运行时常量池中该栈帧所属方法的引用,方法在运行时将符号引用转换成直接引用(有一些符号引用在编译类文件时无法确定其真正的引用)
      • 返回地址:方法被调用时的位置,有正常的地址和异常的地址
    本地方法栈

    和虚拟机栈类似

    程序计数器

    记录当前方法执行的行号,程序发生上下文切换时需要通过该行号返回到方法上次执行的位置。

    Java对象布局

  • 相关阅读:
    20145127 《Java程序设计》第一周学习总结
    Java 问卷调查
    一个没有成就而即将退赛的OIer的告别书
    【深度优先搜索】MZOJ_1344工作依赖
    【算法随笔】最小生成树
    【数据结构】二叉树 学习笔记1
    【深度优先搜索】NOIP2017_D2T1 洛谷3958奶酪
    【树形DP】MZOJ_1063_士兵守卫
    【算法随笔】写一个自己的名词空间
    【树形DP】洛谷1122_最大子树和
  • 原文地址:https://www.cnblogs.com/fcb-it/p/13341252.html
Copyright © 2011-2022 走看看