jvm理论-class文件】的更多相关文章

当JVM运行Java程序的时候,它会加载对应的class文件,并提取class文件中的信息存放在JVM的方法区内存中. Class文件组成 1.Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按顺序紧凑排列在Class文件中,中间没有分隔符.所以Class文件中存储的内容几乎全部是程序运行的必要数据. 2.当遇到占据8位字节以上空间的数据项时,会按照高位在前的方式, 分割成若干个8位字节进行存储. ClassFile { u4 magic; u2 minor_version;…
配置classpath 根据path环境变量的原理,可以定义一个名为classpath环境变量,将要运行的class文件所在目录定义在该变量中. 例:set classpath=c:\ classpath变量值是java类文件的目录 path变量是windows程序文件的目录 JVM查找类文件的顺序: 如果没有配置classpath环境变量,JVM只在当前目录下查找要运行的类文件. 如果配置了classpath环境,JVM会先在classpath环境变量值的目录中查找要运行的类文件. 值的结尾处…
获取JVM的dump文件的两种方式 1. JVM启动时增加两个参数: #出现 OOME 时生成堆 dump: -XX:+HeapDumpOnOutOfMemoryError #生成堆文件地址: -XX:HeapDumpPath=/home/liuke/jvmlogs/ 2. 发现程序异常前通过执行指令,直接生成当前JVM的dmp文件,6214是指JVM的进程号 jmap -dump:format=b,file=serviceDump.dat 6214 由于第一种方式是一种事后方式,需要等待当前J…
一直想成为一名优秀的架构师的我,转眼已经工作快两年了,对于java内核了解甚少,闲来时间,看看JVM,吧自己的一些研究写下来供大家参考,有不对的地方请指正. 废话不多说,一起来看看JVM中类文件是如何加载和运行的. (1)首先,编写简单代码,对其编译生成的class文件进行研究,其java代码如下: public class test { private static int count = 0; public static void recursion(){ count++; recursio…
一直想成为一名优秀的架构师的我,转眼已经工作快两年了,对于java内核了解甚少,闲来时间,看看JVM,吧自己的一些研究写下来供大家参考,有不对的地方请指正. 废话不多说,一起来看看JVM中类文件是如何加载和运行的. (1)首先,编写简单代码,对其编译生成的class文件进行研究,其java代码如下: public class test { private static int count = 0; public static void recursion(){ count++; recursio…
一.class文件结构 介绍之前,请下载一个Bytecode工具,例如byte code viewer或者Java Bytecode Editor,我用的是后者Java Bytecode Editor 1.1 平台无关性 Java 是与平台无关的语言,这得益于 Java 源代码编译后生成的存储字节码的文件,即 Class 文件,以及 Java 虚拟机的实现. 不仅使用 Java 编译器可以把 Java 代码编译成存储字节码的 Class 文件,使用 JRuby 等其他语言的编译器也可以把程序代码…
当系统出现问题时,分析java虚拟机GC日志可以帮助我们定位问题,一般来说, 我们可以通过制定JVM参数使tomcat保存GC日志文件,具体实现如下: Windows下: 找到tomcat的解压目录,进入bin文件夹,修改catalina.bat,在第一行加入如下代码 set "JAVA_OPTS=%JAVA_OPTS% -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:D:\MyDisk\gc.log" GC日志文件路径可自己制定,…
今天看了些粗浅的JVM原理的知识 1.class文件编译过程: 词法分析 语法分析 源码 ---------Token流-------------语法树----------字节码 2.classloader类 Bootstrap ClassLoader---JVM自己控制 AppClassLoader------------JVM一部分,但非JVM实现 ExtClassLoader-------------最一般的加载器 3.JAVA不动态加载类对象,JVM不理解运行时类型而只理解编译时类型 4…
Java虚拟机的指令由一个字节长度的.代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成. 基本数据类型 1.除了long和double类型外,每个变量都占局部变量区中的一个变量槽(slot),而long及double会占用两个连续的变量槽. 2.大多数对于boolean.byte.short和char类型数据的操作,都使用相应的int类型作为运算类型. 加载和存储指令 1.将一个局部变量加载到操作栈:iload…
三大流行jvm sun HotSpot ibm j9 BEA JRockit Oracle 会基于HotSpot整合 JRockit. jvm运行时数据区 java虚拟机所管理的内存将会包括以下几个运行时数据区域 程序计数器 1.线程私有,随线程而生,随线程而灭. 2.如果线程在执行java方法,计数器记录正在执行的虚拟机字节码指令的地址. 3.如果线程在执行native方法,计数器值为空. java虚拟机栈 1.线程私有,随线程而生,随线程而灭. 2.java方法执行的内存模型:局部变量表.操…