JVM初学一

在水木上看到了一则关于撒加的文章,于是看了看它关于JVM的介绍,并开始收集了关于JVM的资料,并开始查看JVM spec.网上有中文和英文两个版本
    书中从第三章开始步入正题介绍了关于JVM的基本概念,CLASS文件的结构,常量池及其解析。并在后面介绍了JVM的基本指令集,一般JAVA源码的编译和一些优化。其中最重要的还是前面的基本概念,这里是看懂JVM指令代码的基础。因为是Spec,所以它的宗旨是介绍Class文件格式及其其中的含义,并为JVM提供解析Class文件并运行它提供一个准则。也就是说,Class文件也可以由其他语言例如C语言实现。只要Class文件满足Spec,并通过JVM的链接过程。
    JVM运行是基于以下数据的:
    1 运行期数据,包括:PC寄存器,Java栈,堆,方法区。
    A PC寄存器
    和普通汇编指令中的没有什么区别
   
    B Java栈
    每个线程拥有一个栈,这点和以前的常识一样。它的作用主要存储JVM框架,其实就是栈帧。栈帧包括:局部变量表,操作数栈及一些其他引用信息。这些引用信息包括方法和类实例的引用。运行期间会利用这些信息进行一些连接操作。
   
    C Java堆
    所有线程共享此存储区。用于运行期间new object或者new array,交由GC进行回收。


    D 方法区
    这部分也是所有线程共享的,GC也可以进行回收它。可以将它理解为汇编代码中的正文段,它包含:常数池,域,方法数据,方法,构造函数以及<init><clinit>代码。
    a 常数池
    相当于Symbol表,对应于class文件中的constant_pool
    b 自身方法栈
    这个是为Native方法服务的,可以设置它的大小。
    c 方法,构造行数及<init><clinit>代码
    就是执行代码,对应于class文件中的methods
    d 域
    对应于class文件中fields
    e 接口
    对应于class文件中interfaces

    在class文件加载的时候建立方法区,当进行方法调用的时候会操作Java栈,并有可能因为创建实例或数组操作Java堆。我们可以先从Class文件结构开始来了解方法区的布局,并创建它的数据结构
   
   

你可能感兴趣的:(jvm)