快速了解什么是JVM
朋友希望能帮助到你1.什么是JVM2.JVM的位置3.JVM结构体系4.类加载器5.双亲委派机制6.沙箱安全机制7.Native关键字8.栈9.HotSpot1.什么是JVMJVM可以看作一个用C语言编写虚拟机软件提供远行环境规范,运行的是JAVA又名C±-程序JVM调优在方法区Method Area、堆Heap99%进行三种JVMSun公司的HotSpotBEA公司的Oracle JRockitIBM2.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.重复步骤 36.沙箱安全机制相关介绍我们都知道当你编写一个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方法在最终执行的时候加载本地方法库的方法通过JNI8.栈先进后出后进先出因为栈的进出规则所以main方法先执行最后结束线程结束栈内存释放不存在垃圾回收栈里存放八种基本数据类型、对象引用名称、实例方法栈运行原理栈帧每个方法执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口信息每一个方法从调用直至执行完毕的过程就对应着一个栈从进栈到出栈的过程9.HotSpotHotSpot是一款高性能的Java虚拟机可以大大提高Java运行的性能我已写了一个专门讲述HotSpot的专题博客我的HotSpot专题博客