zoukankan      html  css  js  c++  java
  • 第一章 Java代码执行流程

    说明:本文主要参考自《分布式Java应用:基础与实践》

    1、Java代码执行流程

    • 第一步:*.java-->*.class(编译期
    • 第二步:从*.class文件将其中的内容加载到内存(类加载)(运行期
    • 第三步:执行代码(运行期

     说明:

    • 整个白框部分表示JVM管理的内存
    • 包含栈帧的地方称作JVM方法栈,一个栈帧就是一个方法
    • 在Hotspot JVM中,JVM方法栈和本地方法栈是同一个
    • java方法是通过出栈操作来执行的(在类加载后入栈),所以执行引擎直接操作的是栈帧(即一个方法)
    • 具体的JVM内存结构,查看第一章 JVM内存结构

    2、代码编译

    javac命令将源码文件编译为*.class文件。

    后边将介绍:

    • javac将*.java编译成*.class文件的过程
    • class文件的文件格式,以及其存储的内容

    3、类加载

    主要是指将*.class文件加载到JVM,并形成Class对象的机制,之后就可以对Class对象实例化并调用了。

    特点:

    • 类加载机制可以在运行时动态加载外部类

    后边将介绍:

    • 类加载的过程
    • 类加载的双亲委托机制
    • 类加载器的层次关系及源码

    4、执行代码

    两种执行方式:

    • 解释执行(运行期解释字节码并执行)
      • 速度慢,效率低
      • 但是要比编译为机器码执行省内存
    • 编译为机器码执行(将字节码编译为机器码并执行,这个编译过程发生在运行期,称为JIT编译),下面是两种模式
      • client(即C1):只做少量性能开销比高的优化,占用内存少,适用于桌面程序。
      • server(即C2):进行了大量优化,占用内存多,适用于服务端程序会收集大量的运行时信息

    注意:

    • 32为机器默认选择C1,可在启动时添加-client或-server来指定,64位机器若CPU>2且物理内存>2G则默认为C2,否则为C1
    • Sun JDK执行代码的机制对在执行过程中执行频率高的代码进行编译,对执行频率不高的代码继续解释执行

    后边将介绍:

    • Sun JDK执行代码的过程
    • C1以及C2执行的一些优化
    • 编译执行与解释执行的使用的衡量点
  • 相关阅读:
    native-base中Input,Textarea等组件在ios平台下不能输入中文
    react-native中TextInput在ios平台下不能输入中文
    react-native android/ios 手动/自动 修改版本号
    react-native修改android包名
    React-Native——html/css
    去除npm run dev日志warn记录
    Python并发编程:多进程-互斥锁
    Python并发编程:多进程-守护进程
    Python并发编程:多进程-join方法
    面向对象练习题
  • 原文地址:https://www.cnblogs.com/java-zhao/p/5185500.html
Copyright © 2011-2022 走看看