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对象布局

  • 相关阅读:
    ECMAScript5之Object学习笔记(二)
    ECMAScript5之Object学习笔记(一)
    【笔记】css 自定义select 元素的箭头样式
    【笔记】h5 页面唤起电话呼叫
    【笔记】vue-cli 打包后路径问题出错的解决方法
    【笔记】BFC 模型知识整理
    【笔记】浏览器的缓存
    【笔记】web 的回流与重绘及优化
    【js 笔记】读阮一峰老师 es6 入门笔记 —— 第二章
    【js 笔记】读阮一峰老师 es6 入门笔记 —— 第一章
  • 原文地址:https://www.cnblogs.com/fcb-it/p/13341252.html
Copyright © 2011-2022 走看看