堆
java程序在运行时所创建的所有类实例或数组都存放在同一个堆中。而每个java虚拟机实例中只存在一个堆空间,因此所有线程都将共享这个堆,又由于每个java程序独占一个java虚拟机实例,因此都有它自己的堆空间。
因此要考虑多线程访问对象(堆数据)的同步的问题了。
java虚拟机有一条在堆中分配新对象的指令,但是没有释放内存的指令。java虚拟机的垃圾回收机制负责回收没有被使用的内存。
只要有一个对象引用,虚拟机就必须能够快速定位对象类型的数据。另外它也必须通过该对象引用访问相应的类数据(存储于方法区中的类型信息)。因此在对象中通常会有一个指向方法区的指针。
堆空间的设计举例
一种设计:把堆分为两部分:一个句柄池,一个对象池。句柄池的每个条目有两个部分,一个指向对象实例的指针,一个指向方法区类型数据的指针。这种设计的好处是便于堆碎片的整理。每次移动对象池中的对象,只需要更改指向对象的新地址就可以了,缺点是每次访问对象的实例变量都要经过两次指针的传递。
另一种设计:对象指针直接指向一组数据,该数据包括对象实例数据和指向方法区的指针。但是使得当整理内存碎片而移动对象变得复杂。
java虚拟机使用一种特殊的数据结构把方法区和对象引用联系起来。这个特殊的数据结构位于方法区:由一个指向方法区对应类数据的指针和此对象的方法表。
方法表是一个指针数组,其中每一项都是之歌指向“实例方法数据”的指针,实例方法可以被那类的对象调用。
实例方法数据包含以下信息:
1)此方法的操作数栈和局部变量区的大小
2)此方法的字节码
3)异常表
每个对象都有一个对象锁,用来在多个线程访问这个对象时进行同步。这个锁是可重入锁。一个线程可以追加请求并获得这个锁,但请求几次,也要释放几次。
每个对象逻辑上还有与实现等待集合(wait set)的数据相关联。锁是用来实现多个线程对共享数据的互斥访问的,而等待集合是为了多个线程为了实现同一个共同目标而协调工作的。
等待集合由等待方法和通知方法联合使用,每个类都从objec继承了三个等待方法,wai()的重载方法和两个通知方法notify和notifyall。
当一个线程调用等待方法时,java虚拟机就阻塞这个线程,并将这个线程放入这个对象的等待集合,直到另外一个线程在这个对象上调用通知方法,这个线程中的一个或者多个线程才会被唤醒。
方法区的结构
方法表,方法数据,类中所有数据的入口点。
最后一种数据是堆中对象的垃圾收集管理数据。垃圾收集器必须使用某种方式追踪程序引用的每个对象。
另外在java中数组是真正的对象,因此也存放在堆中。
程序计数器
每个java线程都有自己的pc寄存器,当线程启动时创建。pc寄存器的大小是一个字长,即能维持一个本地指针,也能持有一个returnAddress。当线程执行某个方法时,pc寄存器的内容总是下一个被执行指令的“地址”,这里的地址可以是一个指针,也可以是该方法起始指令的偏移量。如果该线程在执行一个本地方法,这个寄存器的值为undefined。
分享到:
- 2009-01-02 00:19
- 浏览 1072
- 评论(0)
- 论坛回复 / 浏览 (0 / 1780)
- 查看更多
相关推荐
深入 Java 虚拟机.pdf Java 虚拟机(Java Virtual Machine,JVM)是 Java 语言的 runtime 环境,是 Java 程序执行的核心组件。它提供了一个平台无关的环境,允许 Java 程序在不同的操作系统和硬件平台上运行。 一...
《深入Java虚拟机(原书第2版)》,原书名《Inside the Java Virtual Machine,Second Edition》,作者:【美】Bill Venners,翻译:曹晓钢、蒋靖,出版社:机械工业出版社,ISBN:7111128052,出版日期:2003 年 9 ...
《深入JAVA虚拟机第二版》是由Bill Venners撰写,并由曹晓钢和蒋靖翻译的中文书籍。这本书是Java开发者必备的经典读物,它详细地解析了Java虚拟机(JVM)的工作原理,帮助读者深入理解Java程序的运行机制。尽管描述...
第5章 Java虚拟机 第6章 Java class文件 第7章 类型的生命周期 第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16...
《深入Java虚拟机》这本书是Java开发者深入了解JVM(Java Virtual Machine)的必备经典之作。它详尽地探讨了Java虚拟机的工作原理、内存管理、类加载机制、字节码执行以及性能优化等多个核心主题,旨在帮助开发者...
《深入JAVA虚拟机 不那么完美的第二版》这本书虽然在印刷上可能存在一些小瑕疵,但这并不影响我们从中汲取宝贵的Java虚拟机(JVM)知识。Java虚拟机是Java平台的核心组成部分,它负责执行Java程序,提供了跨平台的...
《深入Java虚拟机第二版》是一本深受Java开发者喜爱的经典著作,它详尽地剖析了Java虚拟机(JVM)的工作原理,为程序员提供了深入了解Java平台核心机制的机会。随书光盘包含了书中提及的各种示例代码、实验数据以及...
本书共分20章,第1-4章解释了Java虚拟机的体系结构,包括Java栈、堆、方法区、执行引擎等;第5-20章深入描述了Java技术的内部细节,包括垃圾收集、Java安全模型、Java的连接模型和动态扩展机制、class文件、运算及...
深入java虚拟机第二版 不是很清晰 但还能看 第1-4章介绍了java虚拟机的体系结构,包栈、堆,方法区、执行引擎等; 第5-20章深入介绍了java的内部细节,垃圾回收、java安全模型、java的连接模型和动态扩张机制,...
《深入JAVA虚拟机第二版》是一本专注于Java虚拟机(JVM)的权威指南,针对JVM的深入了解和优化提供了详尽的解析。这本书对于Java开发者、系统管理员以及对Java性能调优感兴趣的读者来说,是不可或缺的参考资料。下面...
第5章 Java虚拟机 第6章 Java class文件 第7章 类型的生命周期 第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16...
### 深入Java虚拟机知识点总结 #### 第一章 Java体系结构介绍 - **Java体系结构概述**:本章主要介绍了Java体系结构的基本概念及其组成部分。Java体系结构旨在为开发者提供一个统一、高效且跨平台的应用开发环境。...
《深入Java虚拟机第二版》是一本深度剖析Java虚拟机(JVM)的权威著作,其英文版以CHM(Microsoft Compiled HTML Help)格式呈现,为读者提供了方便的电子阅读体验。CHM文件是一种常见的帮助文档格式,它将HTML页面...
第5章定义Java虚拟机启动以及类与接口的加载、链接和初始化过程;第6章阐释并列举Java虚拟机指令集;第7章提供一张以操作码值为索引的Java虚拟机操作码助记符表。 《Java核心技术系列:Java虚拟机规范(Java SE 8版...
《深入Java虚拟机(带目录+清晰+光盘) 第二版》是Java开发者们不可或缺的一本技术宝典。本书全面、深入地探讨了Java虚拟机(JVM)的工作原理和内部机制,对于理解Java程序的运行性能以及优化代码具有极其重要的价值。...
第5-20章深入描述了Java技术的内部细节,包括垃圾收集、Java安全模型、Java的连接模型和动态扩展机制、class文件、运算及流程控制等等,其中第6章和附录A-C安全可以作为class文件和指令集的参考手册。本书还附带光盘...
《深入JAVA虚拟机》这本书是Java开发者深入理解JVM内部工作原理的重要参考资料,书中涵盖了许多关键概念和技术,包括类加载机制、内存管理、垃圾回收、性能优化、JVM调优等方面。下面,我们将深入探讨这些知识点。 ...
《深入Java虚拟机》是Java开发者必读的经典之作,由Bill Venners撰写。这本书以其深入浅出的方式,详尽地解析了Java虚拟机(JVM)的工作原理和内部机制,帮助开发者提升对Java程序运行时环境的理解,从而能够编写出...