字节码指令简介 java虚拟机的指令由一个字节长度的,代表某种含义的数字(操作码,Opcode),以及跟在后面的若干参数组成。由于java虚拟机采用基于栈的指令集机构,因此大多数指令都只有操作码,参数则存在于操作数栈中。 字节码指令集只占1个字节,因此不会最多256条(0~255)。class文件编译后不会执行操作数长度对齐,因此在处理超过一个字节的数据时,必须重建出具体的数据结构,比如将 2021-01-19 java jvm
java内存模型 1. 硬件内存架构 我们知道,在计算机中,由于处理器和存储设备之间的运算速度有着数量级的差距,为了解决这个问题,现代计算机会加入一或多层告诉缓存(Cache)来作为内存和处理器之间的缓冲:将运算需要使用的数据复制到缓存中,让运算能快速进行,运算结束后再从缓存同步会内存之中,这样处理器就无须等待缓慢的内存读写了。 运作原理:通常情况下,当一个CPU需要读取主存时,它会将主存的部 2021-01-10 java jvm
JVM常用监控命令 1. jps 列出正在运行的虚拟机进程信息。 jps -l:显示主类全名 jps -v:显示启动时jvm参数 jps -q:显示main函数参数 jps -m:只输出LVMID 2. jstat 统计信息监视工具。 2.112345☁ blog jstat -gcutil 1396 S0 S1 E O M CCS YGC 2021-01-02 java jvm
虚拟机字节码执行引擎 JAVA虚拟机规范中制定了虚拟机字节码执行引擎的概念模型,尽管现在JVM的实现各不相同,有编译执行(通过即时编译器产生本地代码执行,如BEA JRockit)也有解释执行(通过解释器执行,如Sun Classic VM)。但是从概念模型的角度来看,所有JAVA虚拟机的执行引擎都是一致的:输入的是字节码二进制流,处理过程是字节码解析的等效过程,输出的是执行结果。 1. 运行时栈帧结构&e 2020-12-28 java jvm
JVM之内存分配与回收策略 上一篇文章了解了内存分代理论,这次来具体了解下内存分配和回收策略。 1 对象优先在Eden区分配 大多数对象都在Eden区分配,当Eden区没有足够的空间时,会发起一次Minor GC。 1234567891011/*** -Xmn10M:设置年轻代大小为10M* -verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails 2020-12-28 java jvm
JVM之垃圾回收 1. 垃圾回收概述1.1 哪些内存需要回收 为了提高内存利用率,虚拟机可以对无用的内存进行回收清理。虚拟机的内存分配和内存回收技术已经很成熟,但是我们仍然需要了解垃圾回收相关原理,以便于在发生内存溢出、内存泄露等问题时,可以排定位查。 前面说过,运行时内存区域分为程序计数器、虚拟机栈、本地方法栈、堆、方法区和运行常量池。其中pc计数器、虚拟机栈、本地方法栈区域随线程而生,随线 2020-12-04 java jvm
类加载机制 1、类加载机制概述 java虚拟机的结构图如上所示,从详细图可以看出,字节码文件首先会被类加载器子系统加载到内存中,类加载器的工作分为三步:加载、链接和初始化。加载需要加载器,比如引导加载器、扩展加载器和应用加载器等。链接环节分为验证、准备、解析三个步骤,最后是初始化。文件被加载到内存中,内存中又分为不同区域。之后解释器和JIT即时编译器会把字节码翻译成成机器指令。当内存使用完毕后,G 2020-10-29 java jvm
类文件结构分析 class类文件结构 参考:https://docs.oracle.com/javase/specs/jvms/se11/html/jvms-4.html#jvms-4.7.5 jdk11 前面说过,任何语言只要能被编译成符合规范的字节码文件,就可以在虚拟机上运行。字节码文件是java规范中规定的,一个class文件必定对应着一个类或者接口的信息,但是反过来则不一定,因为类或者接口可以 2020-10-10 java jvm
JVM之内存管理 java中内存的管理是由JVM负责的,程序员new了一个对象后无需处理对象的释放删除等工作,较C/C++来说,开发轻松了不少。但是JVM不是万能的,一旦内存出现泄漏等问题,程序员需要排查原因,所以有必要好好理解JVM的内存管理机制。 1.2 jvm线程 jvm线程 线程是一个程序里的运行单元。JVM允许一个应用有多个线程并行的执行 在Hotspot JVM里,每个线程都与操作系统的本 2020-10-10 java jvm
JVM的简单介绍 1、虚拟机概念 虚拟机就是指虚拟的计算机。它是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。 系统虚拟机:对物理计算机的仿真,提供可运行完整操作系统的虚拟平台,比如VirtualBox、VMware等。 程序虚拟机:专门为执行单个计算机程序而设计,比如java虚拟机(JVM),在Java虚拟机中执行的指令我们称为Java字节码指令。 2、jav 2020-10-09 java jvm
Mach-O目标文件格式 1. 目标文件 程序如果被想要跑起来,必须遵循计算机可执行文件的格式。比如linux和unix下的elf、window下的PE、macOS下的Mach-O(Mach Object File Format)。他们都是COFF格式的变种。 我们知道编译器编译源码生成可执行文件,链接器链接各个目标文件和库文件成为可执行文件,其实目标文件和可执行文件的内容和结构很类似,因此目标文件和 2020-09-28 编译和链接
编译和链接基础知识 机器语言:能够被计算机识别和执行的二进制指令。 汇编语言:面向机器的程序设计语言,汇编指令和机器语言之间有着一一对应的关系,人看汇编代码很吃力,但是比起一大串的01代码还是简单的多。 高级语言:程序员编写的语言,C、C++、Java等。 程序员编写的高级语言符合人类的思维模式,但是计算机只认识0和1,无法识别高级语言,因此,我们编写好的代码,需要一种中间过程,将我们写好的代码,转换 2020-09-27 编译和链接