IL分析及本地代码提前生成性能分析
来源:互联网 发布:ps4全境封锁网络 编辑:程序博客网 时间:2024/04/27 23:19
IL提供的最大的优势在于对应用程序的健壮性和安全性。将IL编译成本地CPU指令时,CLR会执行验证过程。这个过程会确保一切都是安全的。比如确保有正确的参数,类型,返回值等等。在Windows中,每个进程都有它自己的虚拟地址空间,这是因为不能简单的信任一个应用程序的代码。一个应用程序完全可能读写一个无效的内存地址。将每个Windows进程都放到一个独立的地址空间,将获得健壮性和稳定性;一个进程无法干扰另一个进程。事实上,CLR提供了在一个操作系统进程中分析多个托管应用程序的能力。每个托管的应用程序都在一个AppDomain中执行。默认情况下,每个托管的EXE文件都在它自己的独立地址空间运行,这个地址空间只有一个AppDomain.
注意:每当CLR加载一个程序集文件,都会检查是否存在一个对应的NGen生成的本地文件,如果找不到本地的文件,CLR就会像往常那样对IL代码进行JIT编译。如果存在,那么就不要在运行中进行编译。
在运行的时候,CLR要求访问程序集的元数据,目的是使用类似反射和序列化这样的机制,这就要求同时发布IL和元数据的程序集,而且,当环境某些方面发生了变化,CLR也无法使用NGen生成后的文件。这个时候可能就会进行JIT了,比如CLR版本发生了变化,CPU类型改变了,Windows系统升级了,安全权限更改了...太多的原因可能改变了,那么NGen就会无法使用了,除此之外,生成的NGen文件执行的性能很差,因为编译代码时,NGen无法像JIT编译器那样对最终的执行环节作出许多假设,这样会造成生成较差的代码。例如:NGen不能优化特定CPU指令的使用;讲台字段只能间接访问,而不能直接访问,因为静态字段的实际地址只能在运行时确定。所以有时候效率不一定高。
NGen新建程序集文件会放到C:\Windows\Assembly\NativeImages_v4.0.#####_64这样一个目录下的一个文件下,在目录名称中,会包含CLR版本号,还会包含是多少位系统版本编译的。
0 0
- IL分析及本地代码提前生成性能分析
- IL代码的分析
- IL代码简单分析(1)
- IL字节码分析
- IL字节码分析
- IL字节码分析
- gcov测试代码覆盖率及分析代码性能
- android 代码性能分析
- Erlang代码性能分析
- UE4 性能及分析
- mysql 性能分析及explain分析
- php代码的性能分析
- Java代码性能分析工具
- Java代码性能分析工具
- 性能分析原则及步骤
- 软件性能分析及诊断
- 堆排序及性能分析
- UE3 性能、分析及优化
- 支付宝旗下
- ssh能够连接而sftp不能连接的解决方法
- phpmyadmin import 数据库时出现 #1153 - Got a packet bigger than 'max_allowed_packet' bytes
- static作用(修饰函数、局部变量、全局变量)
- UTF-8编码方式
- IL分析及本地代码提前生成性能分析
- Android Dex:com.android.dex.DexException: Multiple dex files define 解决办法
- javaSE-面向对象-this关键字
- 驱动层-3 I2C驱动
- 文件传输0.7版
- 黑马程序员_网络编程之简易文本转换器
- javaSE-面向对象-static关键字
- 黑马程序员—File类
- 二十条MySQL性能优化的经验