JVM类加载之深入探究
本博客参考自http://1509221674.iteye.com/blog/2158485。
我们平时在Eclipse或者IDEA写一个java程序的时候,都是编辑器帮助我们自动完成编译,我们点击绿色按钮运行程序,整个过程遂心应手,但是你可曾想过你写的代码如何被编译?编译后的字节码又如何在运行的时候被加载到JVM(JAVA Virtual Machine)?
我们写的java代码要被JVM执行首先要被编译成.class的文件,这个文件是可以被JVM执行的字节码,也就是相当于1000111这种被JVM所识别的”机器语言“。那么我们的被编译好的class文件在运行的时候又是怎么被加载到JVM中呢?下面就结合一个例子进行说明。
首先看第一个例子:
class Shape { private int ShapeCommonValue = init("the ShapeCommonValue is inited"); private static int ShapeStaticValue = init("the ShapeStaticValue is inited"); static { init("the static block is executed"); } public Shape() { init("the construction of Shape is executed"); } public static int init(String out) { System.out.println(out + " the staticValue is " + ShapeStaticValue); ShapeStaticValue++; return ShapeStaticValue; } } public class Circle extends Shape { private static int CircleStaticValue = init("the CircleStaticValue is inited"); private int CircleCommonValue = init("the CircleCommonValue is inited"); public Circle() { init("the construction of Circle is executed"); } public static void main(String[] args) { Circle circle = new Circle(); } }
这个例子说明了子类和父类的初始化的过程,
首先JVM对Circle类进行加载时,发现有父类Shape
则JVM首先加载父类Shape 的.class文件
然后 对父类中静态资源进行初始化:先加载静态变量,后执行静态块
对子类的静态资源初始化
对父类Shap普通属性初始化
对父类构造方法的初始化
对子类成员属性的初始化
对子类构造方法的初始化
则运行程序后将验证以上过程:
相关推荐
【狂神说JVM探究】是一份集合了多种格式的学习资料,主要涵盖了Java虚拟机(JVM)的基础知识。这份资料出自B站上的【狂神说Java】系列教程,为快速入门JVM提供了详实的笔记。以下是根据这些资源可能包含的一些关键...
【JVM探究】 Java虚拟机(JVM)是Java编程语言的核心组成部分,它负责执行Java程序,提供了一个跨平台的运行环境。理解JVM的工作原理对于优化Java应用程序性能至关重要。以下是一些关于JVM的关键知识点: 1. **JVM...
JVM运行机制复杂且至关重要,涉及到内存分配、垃圾回收、类加载机制等多个方面。冯立全在分享中重点介绍了JVM运行机制,尤其强调了运行时数据区域的布局、Class文件的结构、字节码技术、类加载机制以及垃圾回收算法...
JVM是Java知识体系中的重要部分,对JVM底层的了解是每一位Java程序员深入Java技术领域的重要因素。本课程试图通过简单易懂的方式,系统的深入讲解JVM相关知识。包括JVM执行过程、虚拟机类加载机制、运行时数据区、GC...
JVM的核心组件之一就是字节码解释器,它负责执行字节码指令。此外,JVM还包含一个即时编译器(JIT Compiler),能够将热点代码编译成本地机器码,提高执行效率。 #### 3. 内存分配与回收策略 - **内存分配**:对象...
Monkey老师的JVM调优课程,无疑为我们提供了一个宝贵的平台,来深入探究JVM的工作原理及其优化技巧。下面,我们就一起来深入学习Monkey老师关于JVM调优的核心知识点。 首先,我们要明白JVM的重要性。它是Java程序...
深入理解JVM对于Java开发者来说至关重要,尤其是对于那些热衷于性能优化、内存管理或者想要探究程序运行机制的程序员。本讲解将从以下几个关键点详细阐述JVM的知识点: 1. **JVM结构**:JVM主要由类加载器、运行时...
在深入探讨JVM之前,我们先来了解一下Java的开发环境和源码到字节码的转换过程。Java是由Oracle公司提供的...通过学习这些知识,我们可以深入探究Java的内存管理、异常处理、多线程等高级主题,提升我们的编程技能。
我们将关注于机器如何运作,并且更重要的是,探究JVM开发者为何选择特定的方式来设计这些功能。 #### 为什么称为“虚拟”机器? 你可能听说过与Java语言相关的Java虚拟机(JVM)。那么,这里所说的“虚拟”到底...
**狂神说JVM探究** 是一套深度剖析Java虚拟机(JVM)的教程,以Markdown格式编写,包含了丰富的文字描述和辅助图片。本教程旨在帮助开发者深入理解JVM的工作原理,提升Java程序的性能调优能力。以下是教程中可能涉及...
深入理解和探究Java类加载机制—- 1.java.lang.ClassLoader类介绍 java.lang.ClassLoader类的基本职责是根据一个指定的类的名称,找到或者生成其对应的字节代码,然后从这些字节代码中定义出一个Java 类,即 ...
《深入理解Java虚拟机:JVM高级特性与最佳实践》这本书是Java开发者深入探究JVM(Java Virtual Machine)的重要参考资料。JVM作为Java程序运行的基础,它的理解和优化对于提升Java应用性能至关重要。以下将详细阐述...
第88节类加载的过程-加载00:15:15分钟 | 第89节类加载的过程-验证00:10:24分钟 | 第90节类加载的过程-准备00:05:40分钟 | 第91节类加载的过程-解析00:14:04分钟 | 第92节类加载的过程-初始化00:19:41分钟 | 第...
在Java编程语言中,ClassLoader是核心组件之一,它负责加载类到JVM(Java虚拟机)中。理解ClassLoader的工作机制以及类变量初始化的顺序对于深入理解Java运行时环境至关重要。这篇博文将探讨这两个主题。 首先,让...
JikesRVM的设计目标是成为一个研究平台,帮助开发者深入理解JVM的内部工作机制,并用于实验新的虚拟机技术。 JikesRVM的设计理念是模块化和可配置性,这意味着它可以被调整以适应不同的应用场景,例如,优化服务器...
在《Java深度历险》这本书中,读者将深入探究这些主题,通过实例分析和实战演练,掌握Java核心技术。书中可能还会涉及编译过程、异常处理、多线程、反射等高级话题,帮助开发者从底层到应用层全面理解Java,提升编程...
Java虚拟机(JVM)是Java程序的核心执行环境,它负责解释和执行字节码,同时也管理内存和类加载。在处理Java数组时,有一些关键的特性...理解这一点有助于我们更好地理解和使用Java数组,以及深入探究JVM的工作原理。
1. **类加载器**:在运行时,JVM通过类加载器将字节码文件(.class文件)加载到内存中。类加载器分为引导类加载器、扩展类加载器和应用程序类加载器,它们共同完成类的加载工作。 2. **字节码验证**:JVM在运行前会...
《自己动手写Java虚拟机及class文件解析分析工具(java8运行)》是一份深入探讨Java虚拟机(JVM)工作原理以及如何解析与分析Java类文件(.class)的资源。通过使用Go语言实现一个简化的JVM,这份资料旨在帮助读者...
执行此命令后,控制台将详细列出JVM加载的每个类文件,包括JDK自带的系统类库以及用户自定义的类。通过观察这些输出,可以清晰地看到,只有当程序真正使用到某个类时,该类才会被加载,这体现了Java的动态加载机制。...