JVM

一.Jvm的位置

  1. JVM是Java程序运行的环境,但是他同时也是运行在操作系统上的一个应用程序一个进程。

二.jvm的体系结构

1.类加载器的分类

  • Bootstrap ClassLoader 根类加载器
  • Extension ClassLoader 扩展类加载器
  • System ClassLoader 系统类加载器(应用程序)

2.类加载器的作用

  • Bootstrap ClassLoader 根类加载器
    也被称为引导类加载器,负责Java核心类的加载,比如System,String类。在JDK中JRE的lib目录下rt.jar文件中
  • Extension ClassLoader 扩展类加载器
    负责JRE的扩展目录中jar包的加载在JDK中JRE的lib目录下ext目录
  • System ClassLoader 系统类加载器(应用程序)
    负责在JVM启动时加载来自java命令的class文件,以及classpath环境变量所指定的jar包和类路径

3.双亲委派机制
双亲委派机制是指当一个类加载器收到一个类加载请求时,该类加载器首先会把请求委派给父类加载器。每个类加载器都是如此,只有在父类加载器在自己的搜索范围内找不到指定类时,子类加载器才会尝试自己去加载。如果均加载失败,就会抛出ClassNotFoundException异常。

4.什么是沙箱?
Java安全模型的核心就是Java沙箱(sandbox),什么是沙箱?沙箱是一个限制程序运行的环境。沙箱机制就是将 Java 代码限定在虚拟机(JVM)特定的运行范围中,并且严格限制代码对本地系统资源访问,通过这样的措施来保证对代码的有效隔离,防止对本地系统造成破坏。沙箱主要限制系统资源访问,那系统资源包括什么?——CPU、内存、文件系统、网络。不同级别的沙箱对这些资源访问的限制也可以不一样。

5.Native(本地方法栈)
简单地讲,一个Native Method就是一个java调用非java代码的接口。一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C。这个特征并非java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调用一个C的函数。

6.方法区
方法区是一块所有线程共享的内存区域,存放着静态变量,常量,类信息(构造方法,接口定义),运行时的常量池存在方法区中,当实例变量存在堆中。

7.栈区
栈的数据结构:先进后出
栈内存,主管程序的运行,生命周期和线程同步,线程结束,栈内存也就结束了,所以栈区域不存在垃圾回收问题
存放着8大基本类型,对象引用,实例方法。
运行原来:栈中的数据都是以栈帧(Stack Frame)的格式存在,当一个方法A被调用时就产生了一个栈帧 F1,并被压入到栈中,A方法又调用了 B 方法,于是产生栈帧 F2 也被压入栈,B方法又调用了 C方法,于是产生栈帧 F3 也被压入栈,……执行完毕后,先弹出 F3 栈帧,再弹出 F2 栈帧,再弹出 F1 栈帧……

posted @ 2020-12-10 23:52  阿布v  阅读(148)  评论(0)    收藏  举报