`
yuyiming1986
  • 浏览: 63430 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

深入JVM读书笔记之运行时数据区

阅读更多
    Java虚拟机运行一个程序时,程序相关的所有数据,都存放在运行时数据区中。运行时数据区包括:方法区,堆,Java栈,PC寄存器,本地方法栈

  



    1.方法区:在Java虚拟机中,被装载类型的信息存储在一个逻辑上被称为方法区的内存中。当虚拟机装载某个类型时,它使用类装载器定位相应的class文件,然后读入这个class文件,一个线性二进制数据流,然后将它传输到虚拟机中,紧接着虚拟机提取其中的类型信息,并将这些信息存储到方法区。此类型的静态变量同样也是存储在方法区中。(Class对象是在堆上分配内存空间)。

    方法区存储的类信息包括:

      (1).这个类型的全限定名
      (2).这个类型的直接超类的全限定名
      (3).这个类型是类类型还是接口类型
      (4).这个类型的访问修饰符(public, protected, private,final, abstract,默认)
      (5).任何直接超接口的全限定名的有序列表.
      (6).此类型的常量池
      (7).字段信息:字段名,字段类型,字段修饰符.
      (8).方法信息:方法名,方法的返回值,方法参数数量,类型和顺序,方法的修饰符。
      (9).除了常量以外的所有静态变量
      (10).一个到类的ClassLoader的引用:每个类型被装载的时候,虚拟机必须跟踪它是由启动类装载器还是由用户自定义的类装载器装载的。如果不是由启动类装载器进行装载的必须保存ClassLoader的引用。为的是请求同一个类装载器来装载被当前类所引用到的类。
    
     (11).一个到Class类的引用:每一个类都对应着一个Class对象。
                         Class.forName("")装载指定的类,并返回一个Class对象.
                         obj.getClass();
                         类名.class;
          (ClassLoader实例和Class类的对像都是在堆上面的)
           Class类使得运行程序可以访问方法区中保存的有关装载的类的信息,是外部Java程序与虚拟机内部状态间的访问接口

     2.:Java程序在运行时创建的所有类实例和数组都放在同一个堆中。一个Java虚拟机实例中只存在一个堆空间,所有线程共享这个堆。每个Java程序独占一个Java虚拟机实例,因此每个Java程序都有自己的堆空间。


     3.Java栈:Java栈则总是存储此线程中Java方法调用的状态--包括它的局部变量,传入的参数,返回值,和一些中间结果等等。

     4.PC寄存器:PC寄存器的大小是一个字长,因此它能够持有一个本地指针,内容总是下一条将被执行指令的"地址"。

     5.本地方法栈:而本地方法调用的状态,则是以某种依赖于具体实现的方式存储在本地方法栈中,也可能是在寄存器或者其它某些与特写实现相关的内存区中。


    一个新线程被创建时,它将会得到自己的PC寄存器(程序计数器)以及一个Java栈,线程的PC寄存器和Java栈是私有的,任何其它的线程都不能访问。

    每个Java虚拟机实例都有一个方法区和一个堆,它们是由此虚拟机实例中所有线程共享的。




  • 大小: 29.9 KB
分享到:
评论

相关推荐

    Java - JVM: 读书笔记 Chapter 05 The Java Virtual Machine ( Part I Basic )

    书中涵盖了JVM的体系结构、字节码规范、运行时数据区、异常处理、线程模型等多个方面,对于深入学习JVM非常有帮助。 6. **源码和工具**:了解JVM的源码有助于开发者更深入地理解其工作原理,同时,工具如JVisualVM...

    深入理解Java虚拟机读书笔记之:第3章 安全(3)

    《深入理解Java虚拟机》是Java开发者必读的经典之作,其中第三章主要探讨了Java安全方面的内容。在Java中,安全是一个至关重要的概念,因为Java的设计目标之一就是提供一种可以在不同环境中安全运行的代码机制。本章...

    狂神说JAVA的所有笔记.zip

    集合框架是存储和操作数据的主要工具,IO流用于文件操作和数据传输,多线程则可以实现程序的并发执行,网络编程则是开发分布式应用的基础,反射提供了运行时动态操作类和对象的能力,注解则为代码添加元数据,增强了...

    java完美经典读书笔记

    《Java完美经典》读书笔记是Java开发者不可或缺的学习资源,它涵盖了Java编程的各个方面,旨在帮助读者深入理解Java语言,提升编程技巧。以下是对该书笔记的一些核心知识点的详细阐述: 1. **Java基础** - **变量...

    Java学习笔记(必看经典)

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems...通过阅读《Java学习笔记(必看经典)》和《Java与模式》,初学者或有经验的开发者都能深入理解Java编程,并掌握设计和实现高效、可维护的Java应用的方法。

    HeaderFirst读书笔记代码.zip

    这些是所有Java编程的基石,通过阅读笔记中的代码,可以更好地理解这些基本概念的实际运用。 2. **面向对象编程**: Java是一种面向对象的语言,"HeaderFirst"可能会详细解释类、对象、封装、继承、多态等概念。源码...

    java博客笔记源码

    这个压缩包包含了从第1章到第6章的Java编程笔记的源代码,旨在帮助读者深入理解Java语言的基本概念、语法和常用技术。在本文中,我们将详细探讨这些章节可能涵盖的关键知识点。 1. **Java简介** - Java的历史和...

    java编程思想读书笔记

    15. **注解(Annotation)**:注解是元数据的一种形式,用于向编译器或JVM提供信息,如编译时检查、运行时代码处理等。 这15个知识点只是《Java编程思想》一书中部分内容的概述,实际上,书中还涵盖了更多高级主题...

    mldn 李兴华笔记

    8. **反射与注解**:反射是Java动态性的重要体现,笔记会讲解如何在运行时获取类的信息并进行操作。注解则是元数据的一种形式,用于提供编译器和JVM的额外信息。 9. **JVM原理**:笔记可能会涉及到Java虚拟机的工作...

    李兴华核心技术笔记 mldn

    10. **JVM原理**:笔记可能涉及Java虚拟机的工作原理,如类加载机制、内存模型(堆、栈、方法区等)以及垃圾回收机制。 11. **设计模式**:作为软件开发的最佳实践,笔记可能会介绍一些常见的设计模式,如单例、...

    java基础知识笔记 java基础知识笔记

    Java是一种广泛使用的面向对象的编程语言,以其跨平台性、稳定性以及丰富的库而著名。这份“java基础知识笔记”涵盖了学习Java编程所必需的关键概念。...通过深入阅读和实践这些笔记,初学者可以建立起坚实的Java基础。

    JAVA学习笔记和例子程序值得看看

    12. **注解(Annotation)**:注解提供了一种元数据方式,可以用来标注代码,方便工具、框架和JVM在编译或运行时进行处理。 13. **Java 8及以后的新特性**:例如lambda表达式、Stream API、日期时间API的改进等,都...

    Java学习笔记(整理)

    Java是一种广泛使用的面向对象的编程语言,以其跨平台、高性能和丰富的类库而著名。...通过阅读和学习这份“Java学习笔记”,你可以逐步建立起自己的Java知识体系,为更深入的学习打下坚实的基础。

    JVM学习资料(zzm版3).rar

    通过阅读《深入理解Java虚拟机》这本书,可以提升对JVM的理解,从而更好地优化代码,解决性能问题,提升Java应用的稳定性和效率。而“新建文本文档.txt”可能包含个人笔记或者临时记录,对于JVM学习的具体内容没有...

    java编程思想读书笔记.rar

    《Java编程思想》是 Bruce Eckel 的经典之作,这本书深入浅出地介绍了Java语言的核心概念和技术,对于初学者和有经验的程序员来说都是极好的学习资源。以下是对书中的主要知识点进行的详细解读: 1. **Java语言基础...

    入门必须学大数据语言Java基础笔记

    它具有高度的可移植性,因为它的运行环境是Java虚拟机(JVM)。Java的基础知识主要包括以下几个方面: 1. **语法基础**:Java的语法结构与C++类似,但更简洁。它包括数据类型(如整型、浮点型、字符型、布尔型等)...

    Java 学成在线笔记

    9. **反射机制**:Java反射机制的运用,如何在运行时动态获取类的信息并进行操作。 10. **JVM原理**:虚拟机的工作原理,内存模型,垃圾收集机制,以及性能优化的相关知识。 11. **设计模式**:常见设计模式的介绍...

    java学习笔记

    - **JRE (Java Runtime Environment)**:Java运行环境,包含了运行Java应用程序所需的库和JVM。 - **JVM (Java Virtual Machine)**:Java虚拟机,负责执行由JDK编译器生成的字节码(.class文件)。 ##### 在Linux下...

    java se学习笔记

    - **异常的分类**:检查异常和运行时异常的区别。 - **异常的抛出与捕获**:try-catch-finally结构的使用,以及throw关键字的运用。 4. **字符串处理**: - **String类的特性**:不可变性,常用的方法如concat()...

Global site tag (gtag.js) - Google Analytics