zoukankan      html  css  js  c++  java
  • JAVA-对java平台的理解

    Java特性:
    面向对象(封装,继承,多态)
    平台无关性(JVM运行.class文件)
    语言(泛型,Lambda)
    类库(集合,并发,网络,IO/NIO)
    JRE(Java运行环境,JVM,类库)
    JDK(Java开发工具,包括JRE,javac,诊断工具)
    Java是解析运行吗?
    不正确!
    1,Java源代码经过Javac编译成.class文件
    2,.class文件经JVM解析或编译运行。
    (1)解析:.class文件经过JVM内嵌的解析器解析执行。
    (2)编译:存在JIT编译器(Just In Time Compile 即时编译器)把经常运行的代码作为"热点代码"编译与本地平台相关的机器码,并进行各种层次的优化。
    (3)AOT编译器: Java 9提供的直接将所有代码编译成机器码执行。

    以下是我在本节课所得到的收获,结合TIJ的内容整理了一下我个人的理解,若有错误,还望老师指出。
    Java采用的是解释和编译混合的模式。它首先通过javac将源码编译成字节码文件class.然后在运行的时候通过解释器或者JIT将字节码转换成最终的机器码。
    只是用解释器的缺点:抛弃了JIT可能带来的性能优势。如果代码没有被JIT编译的话,再次运行时需要重复解析。
    只用JIT的缺点:
    需要将全部的代码编译成本地机器码。要花更多的时间,JVM启动会变慢非常多;
    增加可执行代码的长度(字节码比JIT编译后的机器码小很多),这将导致页面调度,从而降低程序的速度。
    有些JIT编译器的优化方式,比如分支预测,如果不进行profling,往往并不能进行有效优化。
    因此,HotSpot采用了惰性评估(Lazy Evaluation)的做法,根据二八定律,消耗大部分系统资源的只有那一小部分的代码(热点代码),而这也就是JIT所需要编译的部分。JVM会根据代码每
    次被执行的情况收集信息并相应地做出一些优化,因此执行的次数越多,它的速度就越快。
    JDK 9引入了一种新的编译模式AOT(Ahead of Time Compilation),它是直接将字节码编译成机器码,这样就避免了JIT预热等各方面的开销。JDK支持分层编译和AOT协作使用。
    注:JIT为方法级,它会缓存编译过的字节码在CodeCache中,而不需要被重复解释

    需要进一步了解
    剧透一下,未来jre将退出历史舞台!

  • 相关阅读:
    CCOrbitCamera卡牌翻转效果
    用CCRenderTexture和BlendFunc制作游戏教学时使用的黑色覆盖层
    cocos2d-x触摸分发器原理
    cocos2d-x动作原理
    c++之函数原型
    cocos2d-x调度器原理
    cocos2d-x之MoonWarriors用c++实现
    cocos2d-x回收池原理
    SQL*Net more data to client等待事件
    asynch descriptor resize等待事件
  • 原文地址:https://www.cnblogs.com/linmsen/p/11729603.html
Copyright © 2011-2022 走看看