JVM

JVM

jvm结构
在这里插入图片描述

类加载器相关知识

1.类加载器概念

​ Java类加载器是Java运行时环境的一部分,负责动态加载Java类到Java虚拟机的内存空间中。类通常是按需加载,即第一次使用该类时才加载。由于有了类加载器,Java运行时系统不需要知道文件与文件系统。学习类加载器时,掌握Java的委派概念很重要

2.虚拟机自带的加载器

在这里插入图片描述
1.启动类加载器(Bootstrap)C++

2.扩展类加载器(Extension) Java

3.应用程序类加载器也叫系统类加载器(AppClassLoader)

4.用户自定义加载器(继承Java.lang.ClassLoader的子类)

3.双亲委派机制

当一个类收到了类加载请求,他首先不会尝试自己去加载这个类,而是把这个请求委派给父类去完成,每一个层次类加载器都是如此,因此所有的加载请求都应该传送到启动类的加载器中,只有当父类加载器反馈自己无法完成这个请求的时候(在它的加载路径下没有找到所需加载的Class),子类加载器才会尝试自己去加载。

好处:采用双亲委派的好处是比如加载位于rt.jar包中的类Java.lang.Object,不管是哪个加载器加载这个类,最终都是委托给顶层的启动类加载器进行加载,这样就保证了使用不同的类加载器最终得到的都是同一个Object对象。

4.沙箱安全机制

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

所有的Java程序运行都可以指定沙箱,可以定制安全策略。

本地接口

​ 本地接口的作用是融合不同编程语言为Java所用,它的初衷是融合C/C++程序,Java诞生的时候是C/C++横行的时候,想要立足,必须有调用C/C++的程序,于是就在内存中专门开辟了一块区域处理标记为native的代码,它的具体做法是Native Method Stack 中登记native 方法,在Execution Engine 执行时加载native libraies.

​ 目前该方法使用越来越少,除非是与硬件相关的应用,比如Java程序驱动打印机或者管理生产设备,在企业级应用中已经比较少见。因为现在异构领域间通信很发达,如socket通信,web Service 等。

native关键字修饰的方法,有声明,无实现。具体实现由其他语言实现。

1.PC寄存器

上图运行时数据区(Runtime Data Area)灰色:1.线程私有2.内存占有少

每个线程都有一个程序计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码(用来存储指向下一条指令的地址,也即将要执行的代码),由执行引擎读取下条指令,是一个非常小的空间。

这块区域是当前线程所指行的字节码的行号指示器。

如果是native方法,这个计数器是空的

用以完成分支、循环、跳转、异常处理、线程恢复等基础功能。不会发生内存溢出(OutOfMemory=OOM)错误

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值