[JVM]JVM 内部原理

JVM 内部原理
========


JVM 虚拟机的功能主要是加载 class 文件,并执行其中的字节码。它包括 ClassLoader 类加载器与 Enginee 执行引擎。引擎包括普通的一次性解释引擎(字节码直接解释成机器码,不缓存机器码)、 JIT compiler 即时编译器(性能要求高的字节码对应的机器码缓存之)、自适应的优化器(频繁执行的字节码对应的机器码缓存之)。
JVM 虚拟机包括软件与硬件实现虚拟机两种。硬件实现的虚拟机由硬件芯片构成,它使用本地方法执行字节码;软件实现的虚拟机与本机交互是通过调用本地方法实现的。本地方法放在动态链接库中,格式是各个平台专有的。
JNI Java 本地方法调用, 首先加载包含这个本地方法的动态链接库,然后调用本地方法。本地方法一般编译成和处理器相关的机器码。使用JNI将导致失去平台无关性。

类装载器体系结构

[img]http://dl.iteye.com/upload/attachment/303721/9c1f24ec-73e4-38e3-bd32-bb37c58011b7.bmp[/img]

类装载器不止一个。包括启动类装载器 bootstrap和用户自定义类装载器。
类装载策略:
1. 当某个类被启动类装载器或用户自定义类装载器装载的时候,它所引用的类也使用同一个类装载器加载。
2. 被不同的类加载器加载的类处于同一命名空间,默认不能跨命名空间访问类。这样可阻止不同类加载器加载的类之间的恶意访问。
3. 基于双亲委派模式的类加载器及运行时库存可保证标准库文件不被替换或添加恶意类。

垃圾回收器:
1. 垃圾回收的时机是不确定的。
2. 线程执行顺序是不确定的。

垃圾收集算法:
1. 引用计数收集器
2. 标记清除收集器
3. 按代收集器
4. 自适应收集器
5. 渐进式按代收集器
...


安全沙箱:
1. 类加载器安全策略,它使用命名空间区分同名的类,限制不同类加载器之间的代码可见性。
2. 类文件安全策略, 这校验CLASS 文件是正常编译输出,而不是伪造的。
3. 内部安全机制
4. 安全管理器

JVM 虚拟机的安全性有一定的作用,但对于故意导致内在溢出或调用本地方法恶意代码的安全保证略有不足。

JVM 体系结构

[img]http://dl.iteye.com/upload/attachment/303739/6ccd73fb-e315-37da-bbdb-a002f3c358e2.bmp[/img]

类装载包括加载,连接,初始化。
加载 指二进制CLASS文件加载到虚拟机。
连接 包括验证、准备、解析。验证CLASS文件正确性,准备阶段为其分配内存空间,解析阶段把常量池中的符号引用转换为直接引用。
初始化 指给类变量分配初始值。解析也可在初始化后进行。


多线程
互斥与协作
对象锁
对象锁计数器

同步方法 实际上也是先获取对象锁。
同步块 ?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值