[TOC] Java 程序运行机制 运行过程 1. 源文件 (a.java) 2. Java 编译器 3. 字节码文件(a.class) 4. 进入 JRE ,分别执行 类装载器 字节码校验器 解释器 5. 系统平台,执行. 注释 JRE 中包含 JVM (JAVA虚拟机); 其中的字节码校验器也是 ...
分类:
编程语言 时间:
2020-04-10 00:59:13
阅读次数:
77
1.JVM Java虚拟机(JVM)是运行Java字节码的(.class)。-->高效;可移植 Java程序从源代码到运行一般有以下3步: .java文件(源代码) -->(JDK中的javac编译) --> .class文件(JVM可理解的Java字节) --> (JVM) -->机器可执行的二进 ...
分类:
编程语言 时间:
2020-04-10 00:26:42
阅读次数:
80
运行时数据区域 java虚拟机在执行java程序过程中会把他所管理的内存划分为若干个不同的数据区域。 java虚拟机运行时数据区 方法区(线程共享区),虚拟机栈,本地方法栈,堆(线程共享区),程序计数器 1.程序计数器 程序计数器是一块较小的内存空间,他可以看作当前线程所执行的字节码指示器。每条线程 ...
分类:
编程语言 时间:
2020-04-09 14:11:41
阅读次数:
81
类的流程 类的加载流程各阶段说明: 全限定名 : 包名 + 类名 加载 : 1. 根据类的全限定名找到对应的二进制流 2. 将静态数据结构转换为方法区运行时数据结构 3. 在堆中生成一个java.lang.class对象,作为访问方法区这些数据的入口 验证 : 校验字节码正确性 和 二进制流正确性等 ...
分类:
其他好文 时间:
2020-04-08 19:34:28
阅读次数:
84
代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步 ...
分类:
其他好文 时间:
2020-04-06 13:53:38
阅读次数:
46
JVM 把字节码文件加载进来之后放在哪里?代码运行的时候,方法和局部变量放在哪里?创建的对象又该放在哪里? ...
分类:
其他好文 时间:
2020-04-06 10:13:18
阅读次数:
90
从源码到类文件 java文件—词法分析—tokens流--语法分析--语法树--语义分析--注解抽象语法树--字节码生成器--class文件 简单来说就是编译过程。 从类文件到虚拟机 装载:查找导入class文件 验证:文件格式、字节码验证、符号引用验证等 准备:为静态量分配内存,初始化为“默认值” ...
分类:
其他好文 时间:
2020-04-05 20:29:51
阅读次数:
72
javap是JDK自带的反汇编器,可以查看java编译器为我们生成的字节码。通过它,我们可以对照源代码和字节码,从而了解很多编译器内部的工作。语法: javap [ 命令选项 ] class. . . javap 命令用于解析类文件。其输出取决于所用的选项。若没有使用选项,javap 将输出传递给它 ...
分类:
编程语言 时间:
2020-04-05 15:12:04
阅读次数:
90
ClassLoader 顾名思义就是类加载器,ClassLoader 作用: 负责将 Class 加载到 JVM 中审查每个类由谁加载(父优先的等级加载机制)将 Class 字节码重新解析成 JVM 统一要求的对象格式类加载时机与过程类从被加载到虚拟机内存中开始,直到卸载出内存为止,它的整个生命周期 ...
分类:
其他好文 时间:
2020-04-04 11:38:36
阅读次数:
65
一、原理区别: java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。 而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。 1、如果目标对象实现了接口,默认情况下会采用JDK的动态 ...
分类:
编程语言 时间:
2020-04-04 09:45:51
阅读次数:
85