`
frenchmay
  • 浏览: 232509 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

深入java虚拟机第5章, 堆

阅读更多

java程序在运行时所创建的所有类实例或数组都存放在同一个堆中。而每个java虚拟机实例中只存在一个堆空间,因此所有线程都将共享这个堆,又由于每个java程序独占一个java虚拟机实例,因此都有它自己的堆空间。

因此要考虑多线程访问对象(堆数据)的同步的问题了。

java虚拟机有一条在堆中分配新对象的指令,但是没有释放内存的指令。java虚拟机的垃圾回收机制负责回收没有被使用的内存。

只要有一个对象引用,虚拟机就必须能够快速定位对象类型的数据。另外它也必须通过该对象引用访问相应的类数据(存储于方法区中的类型信息)。因此在对象中通常会有一个指向方法区的指针。

堆空间的设计举例

一种设计:把堆分为两部分:一个句柄池,一个对象池。句柄池的每个条目有两个部分,一个指向对象实例的指针,一个指向方法区类型数据的指针。这种设计的好处是便于堆碎片的整理。每次移动对象池中的对象,只需要更改指向对象的新地址就可以了,缺点是每次访问对象的实例变量都要经过两次指针的传递。

 

另一种设计:对象指针直接指向一组数据,该数据包括对象实例数据和指向方法区的指针。但是使得当整理内存碎片而移动对象变得复杂。

 

java虚拟机使用一种特殊的数据结构把方法区和对象引用联系起来。这个特殊的数据结构位于方法区:由一个指向方法区对应类数据的指针和此对象的方法表。

方法表是一个指针数组,其中每一项都是之歌指向“实例方法数据”的指针,实例方法可以被那类的对象调用。

实例方法数据包含以下信息:

1)此方法的操作数栈和局部变量区的大小

2)此方法的字节码

3)异常表

 

每个对象都有一个对象锁,用来在多个线程访问这个对象时进行同步。这个锁是可重入锁。一个线程可以追加请求并获得这个锁,但请求几次,也要释放几次。

 

每个对象逻辑上还有与实现等待集合(wait set)的数据相关联。锁是用来实现多个线程对共享数据的互斥访问的,而等待集合是为了多个线程为了实现同一个共同目标而协调工作的。

 

等待集合由等待方法和通知方法联合使用,每个类都从objec继承了三个等待方法,wai()的重载方法和两个通知方法notify和notifyall。

当一个线程调用等待方法时,java虚拟机就阻塞这个线程,并将这个线程放入这个对象的等待集合,直到另外一个线程在这个对象上调用通知方法,这个线程中的一个或者多个线程才会被唤醒。

 

方法区的结构

方法表,方法数据,类中所有数据的入口点。

 

最后一种数据是堆中对象的垃圾收集管理数据。垃圾收集器必须使用某种方式追踪程序引用的每个对象。

另外在java中数组是真正的对象,因此也存放在堆中。

 

程序计数器

每个java线程都有自己的pc寄存器,当线程启动时创建。pc寄存器的大小是一个字长,即能维持一个本地指针,也能持有一个returnAddress。当线程执行某个方法时,pc寄存器的内容总是下一个被执行指令的“地址”,这里的地址可以是一个指针,也可以是该方法起始指令的偏移量。如果该线程在执行一个本地方法,这个寄存器的值为undefined。

 

分享到:
评论

相关推荐

    深入java虚拟机.pdf

    深入 Java 虚拟机.pdf Java 虚拟机(Java Virtual Machine,JVM)是 Java 语言的 runtime 环境,是 Java 程序执行的核心组件。它提供了一个平台无关的环境,允许 Java 程序在不同的操作系统和硬件平台上运行。 一...

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

    《深入Java虚拟机(原书第2版)》,原书名《Inside the Java Virtual Machine,Second Edition》,作者:【美】Bill Venners,翻译:曹晓钢、蒋靖,出版社:机械工业出版社,ISBN:7111128052,出版日期:2003 年 9 ...

    深入JAVA虚拟机第二版 Bill Venners著 曹晓钢 蒋靖译

    《深入JAVA虚拟机第二版》是由Bill Venners撰写,并由曹晓钢和蒋靖翻译的中文书籍。这本书是Java开发者必备的经典读物,它详细地解析了Java虚拟机(JVM)的工作原理,帮助读者深入理解Java程序的运行机制。尽管描述...

    深入JAVA虚拟机第二版.pdf 目录

    第5章 Java虚拟机 第6章 Java class文件 第7章 类型的生命周期 第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16...

    深入java虚拟机 高清pdf 高清高清高清

    《深入Java虚拟机》这本书是Java开发者深入了解JVM(Java Virtual Machine)的必备经典之作。它详尽地探讨了Java虚拟机的工作原理、内存管理、类加载机制、字节码执行以及性能优化等多个核心主题,旨在帮助开发者...

    深入JAVA虚拟机 不那么完美的第二版.pdf.zip

    《深入JAVA虚拟机 不那么完美的第二版》这本书虽然在印刷上可能存在一些小瑕疵,但这并不影响我们从中汲取宝贵的Java虚拟机(JVM)知识。Java虚拟机是Java平台的核心组成部分,它负责执行Java程序,提供了跨平台的...

    深入java虚拟机第二版随书光盘

    《深入Java虚拟机第二版》是一本深受Java开发者喜爱的经典著作,它详尽地剖析了Java虚拟机(JVM)的工作原理,为程序员提供了深入了解Java平台核心机制的机会。随书光盘包含了书中提及的各种示例代码、实验数据以及...

    《深入Java虚拟机第二版》 高清完整PDF版

    本书共分20章,第1-4章解释了Java虚拟机的体系结构,包括Java栈、堆、方法区、执行引擎等;第5-20章深入描述了Java技术的内部细节,包括垃圾收集、Java安全模型、Java的连接模型和动态扩展机制、class文件、运算及...

    深入java虚拟机第二版

    深入java虚拟机第二版 不是很清晰 但还能看 第1-4章介绍了java虚拟机的体系结构,包栈、堆,方法区、执行引擎等; 第5-20章深入介绍了java的内部细节,垃圾回收、java安全模型、java的连接模型和动态扩张机制,...

    深入JAVA虚拟机第二版.7z

    《深入JAVA虚拟机第二版》是一本专注于Java虚拟机(JVM)的权威指南,针对JVM的深入了解和优化提供了详尽的解析。这本书对于Java开发者、系统管理员以及对Java性能调优感兴趣的读者来说,是不可或缺的参考资料。下面...

    深入Java虚拟机(原书第2版)及书中源代码

    第5章 Java虚拟机 第6章 Java class文件 第7章 类型的生命周期 第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16...

    深入java虚拟机笔记

    ### 深入Java虚拟机知识点总结 #### 第一章 Java体系结构介绍 - **Java体系结构概述**:本章主要介绍了Java体系结构的基本概念及其组成部分。Java体系结构旨在为开发者提供一个统一、高效且跨平台的应用开发环境。...

    深入Java虚拟机第二版chm英文

    《深入Java虚拟机第二版》是一本深度剖析Java虚拟机(JVM)的权威著作,其英文版以CHM(Microsoft Compiled HTML Help)格式呈现,为读者提供了方便的电子阅读体验。CHM文件是一种常见的帮助文档格式,它将HTML页面...

    Java虚拟机规范.Java SE 8版.zip

    第5章定义Java虚拟机启动以及类与接口的加载、链接和初始化过程;第6章阐释并列举Java虚拟机指令集;第7章提供一张以操作码值为索引的Java虚拟机操作码助记符表。 《Java核心技术系列:Java虚拟机规范(Java SE 8版...

    深入Java虚拟机(带目录+清晰+光盘) 第二版

    《深入Java虚拟机(带目录+清晰+光盘) 第二版》是Java开发者们不可或缺的一本技术宝典。本书全面、深入地探讨了Java虚拟机(JVM)的工作原理和内部机制,对于理解Java程序的运行性能以及优化代码具有极其重要的价值。...

    深入Java虚拟机(中文版第二版高清版)-带书签

    第5-20章深入描述了Java技术的内部细节,包括垃圾收集、Java安全模型、Java的连接模型和动态扩展机制、class文件、运算及流程控制等等,其中第6章和附录A-C安全可以作为class文件和指令集的参考手册。本书还附带光盘...

    深入JAVA虚拟机(随书源代码)

    《深入JAVA虚拟机》这本书是Java开发者深入理解JVM内部工作原理的重要参考资料,书中涵盖了许多关键概念和技术,包括类加载机制、内存管理、垃圾回收、性能优化、JVM调优等方面。下面,我们将深入探讨这些知识点。 ...

    深入Java虚拟机(原书第二版)Bill Venners 著

    《深入Java虚拟机》是Java开发者必读的经典之作,由Bill Venners撰写。这本书以其深入浅出的方式,详尽地解析了Java虚拟机(JVM)的工作原理和内部机制,帮助开发者提升对Java程序运行时环境的理解,从而能够编写出...

Global site tag (gtag.js) - Google Analytics