快速了解什么是JVM

1.什么是JVM

  • JVM可以看作一个用C语言编写虚拟机软件(提供远行环境规范),运行的是JAVA(又名C+±-)程序
  • JVM调优在方法区(Method Area)、堆(Heap)(99%)进行
    三种JVM:
  • Sun公司的HotSpot
  • BEA公司的Oracle JRockit
  • IBM

2.JVM的位置

  • 图示
    在这里插入图片描述

3.JVM结构体系

  • 图示
    在这里插入图片描述

4.类加载器

  • 作用:加载Class文件~(就是加载Java类到虚拟机里面)new polarBear();创建一个实例他的名字放在栈(Stack)里面,具体的对象放在堆(Heap)里面
  • 不同的类加载器负责不同的区域类的加载
    1.启动类(根)加载器(Bootstrap ClassLoader):这个加载器不是一Java类,底层由C语言实现,因此启动类加载器不属于Java类库无法直接被Java程序直接引用。
    2.扩展类加载器(ExtClassLoader):开发者可以直接使用
    3.应用程序加载器(AppClassLoader):也叫系统类加载器,负责加载用户类路径上所制定的类库,可直接使用

5.双亲委派机制

  • 为什么使用该机制:为了保证Java核心库的类型安全,通过该机制对于Java核心库的类加载工作由启动类加载器来统一完成,保证了Java应用所使用的都是同一版本的Java核心库得类,是互相兼容的
  • 加载过程:
    1.类加载器收到类加载的请求
    2.将这个请求向上委托给父类加载器去完成,一直向上委托,直到启动类加载器
    3.启动加载器检查是否能够加载当前这个类,能够加载就结束并使用当前的加载器,否则抛出异常并通知加载器进行加载
    4.重复步骤 3

6.沙箱安全机制

  • 相关介绍:我们都知道,当你编写一个Java程序,默认是访问该机器的任意资源,比如读取、删除一些文件或者网络操作。当你把程序正式部署到正式的服务器上,系统管理员要为服务器的安全承担责任,那么他可能不确定你的程序会不会访问不该访问的资源,为了消除潜在的安全隐患,有两种方法:
    1.让你的程序在一个限定得账号下运行
    2.利用Java得沙箱机制来限定你的程序不能肆意访问
  • 什么是沙箱机制:在Java中将执行程序分为本地代码和远程代码两种,本地代码默认视为可信,而远程代码则被视为是不受信的。对于授信的本地代码可以访问本地一切资源。而对于非授信的远程代码在早期Java实现中安全依赖于沙箱机制。但如此安全的机制也给程序的扩展功能带来了障碍,当用户希望远程代码访问本地资源时无法实现。
  • 改进:因此针对该问题Java1.1进行了改进,增加了安全策略,允许用户指定代码访问本地资源。在Java1.2中再次进行改进安全机制,增加了代码签名,不论是本地代码还是远程代码都会按照用户的安全策略设定,由类加载器加载到虚拟机中不同权限的运行空间,来实现差异化的代码执行权限控制
  • 什么是域:当前最新的安全机制引入了域(Domain)的概念。虚拟机会把所有代码加载到不同的系统域和应用域。系统域部分专门负责与关键资源进行交互,而应用域则通过系统域的部分代理来对各种需要的资源进行访问。虚拟机中不同的保护域对应不一样的权限。存在不同区域的类文件就具有了当前域的权限
  • 组成沙箱的组件:
    1.字节码校验器(bytecode verifier):确保Java类文件遵循Java语言规范,实现内存保护,但并不是所有类的文件都会经过字节码校验,比如核心类
    2.类加载器:类装载器采用双亲委派机制,其中类装载器在三个方面对Java沙箱器作用:
    1.它防止恶意代码去干涉善意代码
    2.它保护了被信任的类库边界
    3.它将代码归入保护域,确定了代码可以进行那些操作

7.Native关键字

  • 凡事带Native关键字的方法说明Java的作用范围达不到了,回去调用底层C语言的库
  • 会进入本地方法栈调用本地方法库
  • 调用本地方法接口 JNI(扩展Java得使用,配合不同语言的编程语言(C、C++)为Java所用),调用C、C++的程序
  • 他在内存区域中专门开辟了一个标记区域:Native Method Stack,登记native方法
  • 在最终执行的时候加载本地方法库的方法通过JNI

8.栈

  • 先进后出,后进先出
  • 因为栈的进出规则,所以main方法先执行最后结束
  • 线程结束栈内存释放(不存在垃圾回收)
  • 栈里存放八种基本数据类型、对象引用(名称)、实例方法
  • 栈运行原理:栈帧,每个方法执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口信息,每一个方法从调用直至执行完毕的过程,就对应着一个栈从进栈到出栈的过程

9.HotSpot

  • HotSpot是一款高性能的Java虚拟机,可以大大提高Java运行的性能
  • 我已写了一个专门讲述HotSpot的专题博客(我的HotSpot专题博客
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白熊又宕机了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值