为什么要学习Java对象头 学习Java对象头主要是为了解synchronized底层原理,synchronized锁升级过程,Java并发编程等。JAVA对象头 由于Java面向对象的思想,在JVM中需要大量存储对象,存储时为了实现一些额外的功能,需要在对象中添加一些标记字段用于增强对象功能,这些标记字段组成了对象头。 在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header),实例数据(Instance Data)和对齐填充(Padding)。 也...
1、类的生命周期类从被加载到虚拟机内存开始,到卸载出内存为止,其声明周期流程如下: 上图中红色的5个部分(加载、验证、准备、初始化、卸载)顺序是确定的,也就是说,类的加载过程必须按照这种顺序按部就班的开始。这里的“开始”不是按部就班的“进行”或者“完成”,因为这些阶段通常是互相交叉混合的进行的,通常会在一个阶段执行过程中调用另一个阶段。 2、加载“加载”阶段是“类加载”生命周期的第一个阶段。在加...
HotSpot绝对是当今商用虚拟机的王者,但是在Java历史上出现过很多Java虚拟机,这篇文章就来整理下历史上出现过的Java虚拟机以及他们的特性。 Sun Classic Sun Classic虚拟机是JDK 1.0默认的虚拟机。但是这个虚拟机不带即时编译技术,性能稍差。Classic虚拟机在JDK 1.2之前是JDK中唯一的虚拟机,在JDK 1.2时,它与HotSpot VM并存,但默认是使用ClassicVM(用户可用java-hotspot参数切换至HotSpot VM),而在JDK 1.3时,HotSpot 成为...
前言 学习类加载器就一定要自己实现一个类加载器,今天就从一个简单的自定义类加载器说起。 自定义类加载器 例1 一个简单的类加载器,从一个给定的二进制名字读取一个字节码文件的内容,然后生成对应的class对象。 package com.jamie.jvmstudy;import java.io.*;public class CustomizedClassLoader extends ClassLoader {private String classLoaderName;private String fileExtension = ".class";public CustomizedClassLoader(S...
1.前言 最近上线了一个项目,做性能优化时又重新温习了一下Java虚拟机相关知识,随笔记录下来,转载的文章我会列出转载的地址。虽然我做不了技术的创造者,但是争取做一个好的传播者,我们不生产水~~ 2.什么是Java 经过了多年的发展,Java早已由一门单纯的计算机编程语言,演变为了一套强大的技术体系。是的,什么是Java,我想技术体系四个字应该是最好的概括了吧。Java设计者们将Java划分为3种结构独立但却彼此依赖的技术体系分...
声明:本文摘抄自:https://blog.csdn.net/u010349169/article/details/50529868 读完本文,你将了解到:一、为什么说Jabalpur语言是跨平台的二、Java虚拟机启动、加载类过程分析三、类加载器有哪些?其组织结构是怎样的?四、双亲加载模型的逻辑和底层代码实现是怎样的?五、类加载器与Class<T> 实例的关系六、线程上下文加载器 一、为什么说Java语言是跨平台的?Java语言之所以说它是跨平台的、可以在当前绝大部分的操作系统平台下...
声明:本文摘抄自:https://blog.csdn.net/u010349169/article/details/41046443 读完本文,你将会学到:1、类中定义的field字段是如何在class文件中组织的2、不同的数据类型在class文件中是如何表示的3、static final类型的field字段的初始化赋值问题 1.概述字段表集合是指由若干个字段表(field_info)组成的集合。对于在类中定义的若干个字段,经过JVM编译成class文件后,会将相应的字段信息组织到一个叫做字段表集合的结构中,字...
前言 Java是目前用户最多、使用范围最广的软件开发技术,Java 的技术体系主要由支撑Java程序运行的虚拟机、为各开发领域提供接口支持的Java API、Java 编程语言及许许多多的第三方Java框架(如Spring和Struts等)构成。在国内,有关Java API、Java 语言及第三方框架的技术资料和书籍非常丰富,相比之下,有关Java虚拟机的资料却显得异常贫乏。 本书读者对象 (1)使用Java技术体系的中、高级开发人员。 Java虚拟机作为中、高级开发人员...
本文转载自Java SE7 虚拟机指令操作码助记符导语 在Class文件中,Java方法里的方法体,也就是代表着一个Java源码程序中程序的部分存储在方法表集合的Code属性中。存储在Code属性中的是字节码,也就是编译后的程序。Java虚拟机的指令由两部分组成,首先是一个字节长度、代表某种含义的数字(即操作码),在操作码后面跟着零个或多个代表这个操作所需的参数(即操作数)。由于Java虚拟机采用的是面向操作数栈而不是寄存器的架构,所以...
<style></style>
<style></style> <style></style> <style></style> <style></style>
<style></style>
一、概述 1.1、概念Java虚拟机把描述类的数据从Class文件加载到内存, 并对数据进行校验、 转换解析和初始化,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构,最终形成可以被虚拟机直接使用的Java类型, 这个过程被称作虚拟机的类加载机制。类加载器并不需要等到某个类被“首次主动使用”时再加载它,JVM规范允许类加载器在预料某个类将要被使用时就预先加载它。 1.2、...
在之前的笔记中记录过,Java程序变成可执行文件的步骤是:源代码——>经过编译变成class文件——>经过JVM虚拟机变成可执行的二进制文件。因此,为了对JVM执行程序的过程有一个好的了解,我们需要先明白class文件到底是什么东西,它里面有那些信息以及如何存储的。 Class类文件结构Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑排列在Class文件中。当遇到需要占用超过8位字节的数据项时,则会按照高...
这是why的第 47 篇原创文章 荒腔走板大家好,我是 why。老规矩,先是简短的荒腔走板聊聊生活。 上面的图是前几天拍的,那天晚上下班后,刚刚走进小区就看到了这一轮弯月和旁边那一颗特别特别亮的星星。 不知道为什么,一瞬间,我感觉一下回到了小时候的夏天。 脑海里浮现出了一些画面:一个大铁勺子舀一勺透心凉的井水、经过水缸冰镇的西瓜、树荫下卖樱桃的老爷爷、小河边嬉笑着抓螃蟹的同伴、提着一杯凉白开走在上学路上的自己,还...