java JVM GC 笔记

JVM 是在操作系统上的一个平台,与操作系统间有个装换器,将字节码文件转换成对应平台的机器码,字节码文件从编译器编译.java文件产生。

JVM的结构 栈(存放的就是方法的引用,局部变量,方法体)、堆(常量,方法的实例)、方法区(常量池、静态方法区)、程序计数器、本地方方法栈(暂时不了解这是个什么东西 有什么作用 为什么要有这玩意)

有一张图挺详细的

https://blog.csdn.net/Marvel__Dead/article/details/69220153?locationNum=5&fps=1

用户编写的java文件通过jvm的类加载器加载进内存

编译优化的技术

  • 方法内联,去除方法调用成本,
  • 冗余访问消除
  • 复写传播
  • 无用代码消除
  • 公共子表达式消除,没必要重复计算公共子表达式的值
  • 数组边界检查消除
  • 逃逸分析,分析对象的动态作用域,一个对象定以后,被外部方法调用,称为方法逃逸,被其他线程访问到,称为线程逃逸
    • 栈上分配
    • 同步消除
    • 标量替换

 类加载器:

bootstrap(根类加载器)加载JVM自身类

extension(扩展类加载器)加载lib下的jar包

system(系统类加载器)加载用户编写的java文件

JVM加载类是按需加载 使用双亲委派模式

双亲委派模式:

当某个类加载器收到类加载的请求时不会自己直接加载 而是先去找父类加载器 当父类加载器还有父类时一直向上请求 直到根节点根类加载器;然后向下返回 当父类加载器能加载时 成功返回,不能加载就交由子类尝试加载

类加载机制 :  加载  验证  准备 解析  初始化 运行 狗带

猜你喜欢

转载自www.cnblogs.com/javaSAL/p/9370862.html