云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > JVM,JAVA虚拟机,内存机制,线程

JVM,JAVA虚拟机,内存机制,线程

  • 62 次阅读
  • 3 次下载
  • 2026/1/8 17:34:29

JVM的机制学习

大纲

代码编译为classSun jdk中的javacClassLoaderClient compiler执行classServer compiler方法区,堆,JVM方法栈,本地方法栈,PC寄存器堆上分配栈上分配TLAB分配CopyingMark-SweepMark-Compact内存回收分代回收新生代可用GCJava代码的执行装载class内存空间内存分配串行GC并行回收GC并行GC算法内存管理Minor GC触发机制串行Mark-Sweep-Compact及日志旧生代GC并行Compact并发Mark-SweepJDK实现GC参数内存状态分析G1Jconsole,jstat,jmap,MAT同步Full GC线程交互状态

JVM标准结构

类加载子系统内存空间方法区Java堆Java栈本地方法栈垃圾收集器指令计数器及其他隐含计数器执行引擎本地方法接口本地方法库

Java代码执行机制

源码编译机制

JVM规范中定义了class文件的格式,JDK在编译java源码时,使用了javac,javac编译的步骤:

1. 分析和输入到符号表(Parse And Enter)

Parse做的是词法和语法的分析。

词法分析:将代码字符串转变为token序列

语法分析:将根据语法由token序列生成抽象语法树

Enter将符号输入到符号表,通常包括确定类的超类和接口,添加默认构造器等。 2. 注解处理

3. 语义分析和生成class文件

通常生成class文件不知包括字节码,一般包括 结构信息,元数据,方法信息。

下面是一个例子:

Compiled from \

//类/继承的超类/实现的接口的声明信息 public class Foo extends java.lang.Object SourceFile: \

//class文件格式版本号,major version 50 表示jdk 6, 49 为jdk 5只有高版本能执行低版本的class文件

minor version: 0

major version: 50

//常量池,存放了所有的Field名称,方法名,方法签名,类型名,代码及class文件中的常量值

Constant pool:

const #1 = Method #7.#27; // java/lang/Object.\const #2 = Field #6.#28; // Foo.count:I

const #3 = class #29; // java/lang/Exception const #4 = String #30; // count overflow

const #5 = Method #3.#31; // java/lang/Exception.\ing;)V

const #6 = class #32; // Foo

const #7 = class #33; // java/lang/Object const #8 = Asciz MAX_COUNT; const #9 = Asciz I;

const #10 = Asciz ConstantValue; const #11 = int 1000;

const #12 = Asciz count; const #13 = Asciz ; const #14 = Asciz ()V; const #15 = Asciz Code;

const #16 = Asciz LineNumberTable; const #17 = Asciz LocalVariableTable; const #18 = Asciz this; const #19 = Asciz LFoo;; const #20 = Asciz bar; const #21 = Asciz ()I;

const #22 = Asciz StackMapTable; const #23 = Asciz Exceptions; const #24 = Asciz ; const #25 = Asciz SourceFile; const #26 = Asciz Foo.java;

const #27 = NameAndType #13:#14;// \const #28 = NameAndType #12:#9;// count:I const #29 = Asciz java/lang/Exception; const #30 = Asciz count overflow;

const #31 = NameAndType #13:#34;// \const #32 = Asciz Foo;

const #33 = Asciz java/lang/Object; const #34 = Asciz (Ljava/lang/String;)V; {

//将符号输入到符号表时生成的默认构造器方法 public Foo(); Signature: ()V

LineNumberTable: line 1: 0

LocalVariableTable:

Start Length Slot Name Signature 0 5 0 this LFoo;

Code:

Stack=1, Locals=1, Args_size=1 0: aload_0

1: invokespecial #1; //Method java/lang/Object.\ 4: return

LineNumberTable: line 1: 0

LocalVariableTable:

Start Length Slot Name Signature 0 5 0 this LFoo;

//bar方法的元数据信息

public int bar() throws java.lang.Exception; Signature: ()I

//对应字节码的源码行号信息,可在编译的时候通过-g:none 去掉行号信息,行号信息对于查找问题而言至关重要,因此最好保留 LineNumberTable: line 5: 0 line 6: 15 line 7: 19 line 9: 29

//局部变量信息,如生成的class文件中无局部变量信息,则无法知道局部变量的名称,并且局部变量信息是和方法绑定的,接口是没有方法体的,所以ASM之类的在获取接口方法时,是拿不到方法中参数的信息的 LocalVariableTable:

Start Length Slot Name Signature 0 33 0 this LFoo;

Code:

Stack=3, Locals=1, Args_size=1 //对应方法的字节码

0: getstatic #2; //Field count:I 3: iconst_1 4: iadd

搜索更多关于: JVM,JAVA虚拟机,内存机制,线程 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

JVM的机制学习 大纲 代码编译为classSun jdk中的javacClassLoaderClient compiler执行classServer compiler方法区,堆,JVM方法栈,本地方法栈,PC寄存器堆上分配栈上分配TLAB分配CopyingMark-SweepMark-Compact内存回收分代回收新生代可用GCJava代码的执行装载class内存空间内存分配串行GC并行回收GC并行GC算法内存管理Minor GC触发机制串行Mark-Sweep-Compact及日志旧生代GC并行Compact并发Mark-SweepJDK实现GC参数内存状态分析G1Jconsole,jstat,jmap,MAT同步Full GC线程交互状态 JVM标准结构 类加载子系统内存空间方法区Java堆Java栈本地方

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com