1, Java 文件是怎么运行的

进阶学习(4.1) JVM结构和原理(未完)

  1. 编译java 成 class文件
  2. 执行带有主方法的class文件
  3. 找到jvm.cfg, jvm配置文件, 里面配置了JVM.DLL的C++, JVM实现
  4. 类加载器开始加载类进入JVM
  5. 找到主类然后运行

2, JVM 数据模型

进阶学习(4.1) JVM结构和原理(未完)

  1. 栈: 栈是每个线程私有的, 由很多个栈帧组成 , 可以看到栈1,栈2, 栈3, 栈是有深度和空间大小的, 死循环就会导致栈的深度错误StackOverflowError  栈深错误 和 OutofMemoryError 栈溢出错误, 每调用一个函数都会产生一个栈帧, 栈帧存储, 函数的输入参数, 局部变量, 返回参数
  2. 堆: 
  • 新生代(PSYoungGen), 又分为eden 伊甸园, form 和 to  幸存区(Survivor), f 和 t 之间会来回切换, 空的就是to, 专门设计给复制清除GC 算法的,判断变量是否由引入, 有就复制到to, 没有就留下, 然后删除form 的空间, to 编程form, form 变成 to, 以形换位大法
  • 老年代(ParOldGen), 当一个对象在form 和 to 之间转了很多次的时候, 这个对象将被移送到老年代, 老年代的GC扫描会相比新生代会减少频率,  在JVM中, 最多15次新生代GC后还活着的, 它必然将转移到老年区

  • 元数据, 存放类信息, 方法, 代码, 常量, 静态变量, 这块内存使用的是本地内存, 和主机内存相关

    3. 本地方法栈, 调用本地方法接口时的执行栈帧和Java 栈是相似的

    4. PC 寄存器, 存储一下条指令的位置, 可以理解未一下行代码的行数

相关文章:

  • 2021-07-26
  • 2021-11-23
  • 2021-09-09
  • 2021-12-09
  • 2021-06-07
  • 2021-05-15
  • 2021-08-06
  • 2021-12-23
猜你喜欢
  • 2021-07-18
  • 2021-10-07
  • 2021-04-03
  • 2021-09-14
  • 2021-06-07
  • 2022-12-23
  • 2021-05-23
相关资源
相似解决方案