java内存管理体系结构之方法区和线程区域
讲解java内存管理的时候首先我要围绕这个图进行讲解:
在程序的运行期间java虚拟机定义不同的数据运行区域,一些数据区域是由JVM启动的时候就创建了,一些数据区域是由线程创建的。
一、方法区
整个线程要使用的两个区域就是方法区(也称Perm区域)和heap区。
方法区负责存储class信息,classLoader加载class字节码,然后装入JVM,JVM将会把class信息转换成二进制码并且存储在方法区域里面。下面描述方法区域存储了一些什么信息:
- 常量池:int、long、float或double类型的常量,字符串常量,整个方法的引用等,注意常量池是可以动态变化的,如:String类的intern()方法,在程序的运行期间可以动态的添加至常量池中
- 方法代码:class信息中的整个方法信息包含构造函数等
- 类中的field信息以及类中的信息如:class父类、实现的接口、方法等等
总结:方法区存放了要加载的类信息(名称、修饰符)、类中的静态变量、类中定义为final类型的常量、类中的field信息、类中的方法信息,当程序员通过Class对象调用getName、isInterface等方法来获取信息时,这些数据都是来源于方法区域。
JVM对该区域参数的设置:-XX:PermSize、-XX:MaxPermSize来指定最小值和最大值,建议两个参数设置一样大,不要让JVM动态的去扩展大小。
所以说该区域也会导致JVM抛出OutOfMemory的错误信息。
二、线程区
2.1 程序计数器PC register
字节码解释器都会通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复都需要依赖这个pc register来实现。
如果线程执行的是一个java方法,该计数器记录的是正在执行的虚拟机字节码指令的地址;如果执行的是native方法,该计数器是空的。而且该内存区域唯一没有被java 虚拟机规范中定义任何OutOfMemoryError情况的区域。
2.2 java方法栈
存放多个stack frame:存放局部变量、操作栈、动态链接、方法出口等信息。也就是说明了每个方法被执行的时候都会创建一个stack frame。
当方法栈的空间不足时,会抛出StackOverFlowError的错误,JVM可以通过参数-Xss=256来指定。
2.3 本地方法栈
三、对象的访问
对象的访问会涉及到Java栈、java堆、方法区之间的关联关系,如:
Object obj = new Object();
Object obj 会反映到java栈的本地变量表中,作为reference出现,而new Object()这部分的将会反映在java堆中,而java堆中还必须包含能够找到此对象类型数据(如:Class对象访问的数据,即通过反射),这些数据存放在方法区中。
reference 只规定了一个指向对象的引用,没有说明通过哪种方式去定位。主流的访问方式有:使用句柄和直接指针。
- 大小: 143.8 KB
分享到:
相关推荐
总的来说,这个“体系结构图”涵盖了Java语言的基础、内存管理、并发编程和高级特性,是学习和复习Java的良好资源。对于初学者来说,理解这些知识点可以帮助构建完整的Java知识体系,进一步提升编程技能。在深入学习...
### Java卡技术体系结构与程序员指南 #### 一、引言 随着信息技术的快速发展,智能卡作为一项重要的安全技术,在金融、身份验证等多个领域发挥着关键作用。Java卡技术作为一种在智能卡上运行Java应用程序的技术,...
《汇编语言与计算机体系结构:使用C++和Java 配套代码》是一本深入探讨计算机底层运作原理的书籍,其配套代码涵盖了汇编语言、计算机体系结构以及C++和Java编程的相关实践。这本书旨在帮助读者理解计算机硬件与软件...
Java安全体系结构是Java平台的核心组成部分,它为Java的三大特性——平台无关性、网络移动性和安全性提供了坚实的基础。本文将深入探讨Java如何通过其语言特性、类加载器和安全管理器来实现安全性。 首先,Java的源...
《Java就业班体系结构大纲》是针对初学者设计的一份全面的Java学习路径,旨在帮助学员掌握Java编程的基础知识,提升就业竞争力。这份大纲分为三个主要阶段,涵盖了从入门到进阶的关键知识点。 第一阶段:Java开篇 ...
《精通Eclipse Web开发--Java体系结构、工具、框架及整合应用》这本书是为Java开发者提供的一本深度学习Eclipse IDE、Web开发技术以及相关工具和框架的指南。以下是本书涵盖的一些关键知识点: 1. **Java体系结构**...
1.2 JVM内存管理 JVM内存主要分为堆内存和栈内存。堆内存用于存储对象实例,而栈内存则用于存储方法调用时的局部变量。此外,还有方法区(或称为永久代)存放类的元数据,包括类信息、常量池等。Java的垃圾收集机制...
### 基于沙箱的Java安全体系结构 #### 概述 Java作为一种跨平台的编程语言,其安全模型的设计尤为关键。Java的安全沙箱机制是确保Java应用程序能够在不损害系统安全的前提下运行的重要保障。本文将详细介绍Java...
在"嵌入式系统_体系结构_编程与设计"这一主题中,我们将深入探讨其体系结构、编程方法和设计策略。 体系结构是理解任何系统的基础,嵌入式系统也不例外。通常,嵌入式系统包括处理器(如微控制器或数字信号处理器)...
操作系统中的内存管理是计算机科学中的核心概念之一,它涉及到如何有效地分配、使用和回收内存资源。在这个名为"操作系统模拟内存...这个项目对于学习计算机体系结构、操作系统原理以及高级编程技巧都是非常有价值的。
【Java开发体系结构详解】 Java开发体系结构是Java应用程序开发的基础框架,主要由J2EE(Java 2 Platform, Enterprise Edition)组成。J2EE体系结构包含多个层次和组件,旨在提供一个统一的平台,用于构建分布式...
Linux 内核提供了安全性、内存管理、进程管理、网路协议以及驱动模型等核心系统服务。Linux 内核是 Android 操作系统的基础,所有的上层组件都是基于 Linux 内核来实现的。 二、Android Runtime Android Runtime...
标题:“Oracle11g体系...综上所述,Oracle11g体系结构的深入理解和掌握对于数据库管理员而言至关重要。通过合理利用Oracle11g的功能和特性,结合最佳实践和避免常见误区,可以显著提升数据库的性能、稳定性和安全性。
- **链表**:适合频繁插入和删除操作的场景,如虚拟内存管理。 - **栈**:常用于表达式求值、函数调用堆栈等。 - **队列**:适用于需要按照顺序处理任务的场合,如消息队列系统。 - **散列表/哈希表**:广泛应用于...
5. **语言特性**:Java语言设计时就考虑了安全性,例如,它移除了可能导致内存管理问题的指针,采用强类型系统和自动内存管理,减少程序员犯错的可能性。此外,Java的异常处理机制可以捕获和处理潜在的错误,增加...
- **语法**:Java语法与C++类似,但更简洁,没有指针和内存管理。 - **数据类型**:包括基本类型(如int、float、boolean)和引用类型(类、接口、数组)。 - **变量**:声明变量时需要指定类型,并在使用前初始...
### Java语言中内存管理的关键技巧...综上所述,Java内存管理涉及多方面的考量和实践。开发者应根据具体应用场景,灵活运用上述技巧,不断优化代码结构,减少不必要的内存消耗,从而构建出既高效又健壮的Java应用程序。
综上所述,Oracle数据库体系结构涉及多个层次的管理和优化策略,从内存结构到进程管理,再到实例管理,每一层都有其独特的功能和技术特点。了解这些基础知识对于有效地利用Oracle数据库至关重要。