
深入理解Java虚拟机
文章平均质量分 93
库里不会投三分
会持续更新Java初阶到进阶实战的知识
展开
-
第十章Java之语法糖
所谓的 语法糖 ,其实就是指 java 编译器把 *.java 源码编译为 *.class 字节码的过程中,自动生成和转换的一些代码,主要是为了减轻程序员的负担,算是 java 编译器给我们的一个额外福利(给糖吃嘛)注意,以下代码的分析,借助了 javap 工具,idea 的反编译功能,idea 插件 jclasslib 等工具。另外,编译器转换的结果直接就是 class 字节码,只是为了便于阅读,给出了 几乎等价 的 java 源码方式,并不是编译器还会转换出中间的 java 源码,切记。原创 2022-12-01 22:57:47 · 477 阅读 · 0 评论 -
第一章初识JVM
定义Java Virtual Machine ,Java 程序的运行环境(Java二进制字节码的运行环境)。好处一次编译,处处执行我们编写的源代码,经过编译成二进制字节码,相同的字节码在不同的系统的不同版本的JVM上运行自动的内存管理机制,垃圾回收机制数组下标越界检查(相比数组越界保错和内存覆盖,肯定是内存覆盖更加严重)多态(JVM中用虚方法的机制实现多态)比如我们的C语言就没有数组越界检查的功能数组的下标是有范围限制的。数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1。原创 2022-12-01 11:49:44 · 833 阅读 · 0 评论 -
第六章JVM虚拟机字节码执行引擎——类文件和类加载之前必看
程序试图访问或修改一个属性或调用一个方法,这个属性或方法,你没有权限访问。一般的,这个会引起编译器异常。这个错误如果发生在运行时,就说明一个类发生了不兼容的改变。原创 2022-11-28 02:04:17 · 598 阅读 · 0 评论 -
第九章类文件结构和初识一些字节码指令
上面所列举的指令助记符中,有一部分是以尖括号结尾的(例如iload_)。这些指令助记符实际上代表了一组指令(例如iload_代表了。原创 2022-11-28 01:59:40 · 466 阅读 · 0 评论 -
第七章类加载机制和类加载器
在Java的日常应用程序开发中,类的加载几乎是由上述3种类加载器相互配合执行的,在必要时,我们还可以自定义类加载器,来定制类的加载方式。为什么要自定义类加载器?隔离加载类在某些框架内进行中间件与应用的模块隔离,把类加载到不同的环境。比如:阿里内某容器框架通过自定义类加载器确保应用中依赖的jar包不会影响到中间件运行时使用的jar包。再比如:Tomcat这类Web应用服务器,内部自定义了好几种类加载器,用于隔离同一个Web应用服务器上的不同应用程序。修改类加载的方式。原创 2022-11-28 00:34:13 · 449 阅读 · 1 评论 -
第八章类加载与类文件结构
在Java的日常应用程序开发中,类的加载几乎是由上述3种类加载器相互配合执行的,在必要时,我们还可以自定义类加载器,来定制类的加载方式。为什么要自定义类加载器?隔离加载类修改类加载的方式扩展加载源防止源码泄漏开发人员可以通过继承抽象类ava.lang.ClassLoader类的方式,实现自己的类加载器,以满足一些特殊的需求。原创 2022-11-21 01:28:39 · 271 阅读 · 0 评论 -
第五章Java对象内存结构和创建过程
简单类对象的实例化过程1、在方法区加载类;2、在栈内存申请空间,声明变量P;3、在堆内存中开辟空间,分配对象地址;4、在对象空间中,对对象的属性进行默认初始化,类成员变量显示初始化;5、构造方法进栈,进行初始化;6、初始化完成后,将堆内存中的地址赋给引用变量,构造方法出栈;子类对象的实例化过程1、在方法区先加载父类,再加载子类;2、在栈中申请空间,声明变量P;3、在堆内存中开辟空间,分配对象地址;4、在对象空间中,对对象的属性(包括父类的属性)进行默认初始化;5、子类构造方法进栈;原创 2022-11-18 17:13:11 · 671 阅读 · 0 评论 -
第四章JVM垃圾回收机制和内存分配策略
基于可达性算法的垃圾回收实线是强引用,虚线是其他引用。原创 2022-11-18 12:46:57 · 410 阅读 · 0 评论 -
第二章Java的五大引用
基于可达性算法的垃圾回收实线是强引用,虚线是其他引用。原创 2022-11-13 21:22:48 · 711 阅读 · 0 评论 -
第三章JVM之自动内存管理
JVM支持着java语言本身和 运行库,它是java程序赖以生存的平台,它由一个解释器(解释字节码)和一些连接到本地代码的库组成。然而不管怎样,它毕竟不是一个完整的系统,它经常依赖于一些底层系统的支持。这些底层系统常常是强大的操作系统。通过使用本地方法,我们得以用java实现了jre的与底层系统的交互,甚至JVM的一部分就是用C写的。还有,如果我们要使用一些java语言本身没有提供封装的操作系统特性时,我们也需要使用本地方法。原创 2022-11-12 19:09:38 · 673 阅读 · 0 评论