JVM

首先会把java编译成为字节码。然后通过类加载器加载字节码。

JVM加载 双亲委任模型:

java在加载一个类的时候,会首先判断是否这个类已经被加载了,如果被加载了就会直接返回,如果没有被加载,则会使用一个互斥锁,开始对类进行加载,在加载的时候,会递归的调用parent.loadclass 就是一直到最后上层(boostraploader)看最上层能不能够加载该类,如果最上层能够加载,那么这一层的加载器就不会加载类,如果上层加载器不能加载,上层会抛出异常,这样这一层才会使用自己的加载方法,这样的一个好处就是,例如我们在如果写了一个本地list类,就不会被成功加载,因为上层加载器已经加载了一个同样名称的类,这样就会报错,这样的好处就是,我们可以实现类加载的安全性隔离。(类加载器只会加载指定路径下的类,所以如果我们想加载一个和系统类同名的类,我们可以自己写一个类加载器,并且把需要加载的类放到别的路径当中)


image.png

JVM的组成

虚拟机栈:
本地方法栈:包含八大基础类型和一个引用类型
堆:用于存放new出来的对象
方法区:类信息(一个类的名字及类中包含的方法) 常量(final) 静态变量(static) JIT编译后的代码(经常使用的代码,类似于缓存热点代码)
程序计数器:


image.png

image.png

image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这篇文章是我之前翻阅了不少的书籍以及从网络上收集的一些资料的整理,因此不免有一些不准确的地方,同时不同JDK版本的...
    高广超阅读 15,764评论 3 83
  • 每个使用Java的开发者都知道Java字节码是在JRE中运行(JRE: Java 运行时环境)。JVM则是JRE中...
    燕京博士阅读 1,467评论 0 6
  • 前言 写这篇文章的目的: 总结所学的 JVM 知识 帮助想了解 JVM 的朋友,知无不言,言无不尽 本篇文章将会介...
    SavySoda阅读 5,016评论 11 105
  • 这篇文章解释了Java 虚拟机(JVM)的内部架构。下图显示了遵守Java SE 7 规范的典型的 JVM 核心内...
    饮墨飨书阅读 744评论 0 1
  • 编译地址: jamesdbloom译者: ImportNew.com - 挖坑的张师傅原文地址: http://w...
    IT程序狮阅读 2,653评论 1 26