深入理解JVM 中

前言经过上一篇文章《深入理解JVM 上》的内容总结可以让自己知道JVM大致的运行原理,本章接下来介绍的是如何解析与加载类。Class文件存储的是字节码是为了跨平台运行而设计,这种结构不仅仅是能存储Java语言,比如Kotlin也可以编译为Class文件虚拟机一样可以运行,虚拟机无需关心Class的来源是什么语言因为它更像一个独立的系统。Class文件结构Class文件是一组以8个字节为基础单位的二进制流, 各个数据项目严格按照顺序紧凑地排列在文件之中, 中间没有添加任何分隔符, 这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据, 没有空隙存在。 当遇到需要占用8个字节以上空间的数据项时, 则会按照高位在前(高位字节在地址最低位,最低字节在地址最高位来存储数据 )的方式分割成若干个8个字节进行存储。 下方是代码对应编译好的Class文件的HEX,例如:HelloWorld.Class “0xCAFEBABE”四个字节的“魔数” (00~03),接着(04-07)Class主副版本号,这组8个字节是为了保证虚拟机识别文件而设计。//此源码使用的是java1.8编译...

自己动手编译一个Java

开始这次编译的JDK为OpenJDK是开源的和OracleJDK(平常使用的Java)是差不多相似一样是使用HotSpot虚拟机。想更深入了解JVM就得去自己编译和调试JDK。带着内存是如何布局、内存是如何回收、类是如何加载等这些问题去学习会得到一个好的学习效果。吐槽: (Write Once、Run Anywhere) 这个JDK花费我很多时间才编译好的,所以不想编译第二次了 /dog 以下需要安装的环境或软件可能需要外网,请自行配置代理。官方编译参考文档:%OpenJDK% /README-builds.html环境OS:macOS Catalina 10.15.16 编译器:xcode11 Java:JDk7 (用于编译) OpenJDK:JDK8u准备条件1、Homebrew: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" 2、Mercurial:brew install Mercurial 3、fre...

深入理解JVM 上

什么是JVM​ JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。​ 引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。(引用百度百科)SunJDK和OpenJDK内置的是 HotSpot JVM,是目前使用范围最广的Java虚拟机,当然还有很多虚拟机也非常优秀比如 KVM、Squawk VM、IBM J9 VM等。深入理解JVM不同的系统指令是不一样的如果只是把源码编译为专属的指令,那么只能在这个系统运行,如果想在另一个系统运行则需要重新编译的,Java为了达到一次编译到处运行的效果,选择的是源码编译成字节码而不是像C++直接编译为本地系统专属的指令,虚拟机就像一台计算机一样.class保存的就是虚拟机指令只要你的系统装上JVM就...

图-最小生成树

Prim 算法示例算法思想:代码import java.util.Scanner; public class main { static int Vnum=9; static int Map[][]=new int[Vnum][Vnum]; static int MAX=Integer.MAX_VALUE; public static void main(String[] args) { Scanner scanner=new Scanner(System.in); //初始化 for(int i=0;i<Vnum;i++) { for(int j=0;j<Vnum;j++) { if(i==j) { Map[i][j]=0; //(i,j)=0 } else { M...

红黑树学习笔记

红黑树特性(1)每个结点或者是黑色,或者是红色。(2)根结点是黑色。(3)每个叶子结点(NIL)是黑色。 (这里的NIL结点非空 结点,是一个实实在在的结点 用于删除的方便)(4)如果一个结点是红色的,则它的子结点必须是黑色的。(5)从一个结点到该节点的子孙节点的所有路径上包含相同数目的黑结点。简易说明:红黑树由黑高来和旋转操作置底向上来维护的。阅读建议:​ 1、读者储备二分搜索树的增删改和树的旋转知识。​ 2、更多细节希望去读《算法导论》此文章仅作为参考笔记。统一名称:​ PP: 为祖父结点​ P:为父结点​ Y:为叔结点​ Z:当前结点INSERT红黑树插入结点会影响到他的结构特性,所以分成三种情况来处理。情况1(P和Y结点为红色)当D插入了就违法了第4个特性,就需要把P结点和Y结点变黑色...