`
boriszhang78
  • 浏览: 21201 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

JVM学习笔记2--非堆区域

    博客分类:
  • JVM
阅读更多

上一篇主要描述了JVM的一些基本概念,和大致的结构。这一篇我们详细学习非堆区域(除了heap内容之外的全称为栈不知道是否合适,因此干脆叫非堆)的内容。在后一篇里面我们再学习堆的内容,包括GC策略等。下图列出了JVM规范中JVM的整个架构。

 


从图中可以看出,JVM内存主要由class load subsystem、runtime data areas、execution engine组成。除了heap使用-Xmx指定内存,其他的都占用java进程内存寻址空间减去heap内存,在内存充足的情况下。 其中class load subsystem和execution engine对应用比较透明,就不在这里讨论了。我们重点讨论runtime data areas。

 

首先看method area,参考下图,method area是存放class的定义的,heap存放class实例化的object(特殊:class本身的表达对象放在方法区),这两个区域都是被整个JVM共享使用的。



方法区主要包括以下内容:

  • Methods of a class (including the bytecodes)
  • Names of the classes (in the form of an object that points to a string also in the permanent generation)
  • Constant pool information (data read from the class file, see chapter 4 of the JVM specification for all the details).
  • Object arrays and type arrays associated with a class (e.g., an object array containing references to methods).
  • Internal objects created by the JVM (java/lang/Object or java/lang/exception for instance)
  • Information used for optimization by the compilers (JITs)

 参考下图,Object和Class的关系,还有Class的表达对象kclassKclass。



 

方法区在SUN的jdk中又叫持久代(Perm Gen),可以指定大小,一旦不满足则出现java.lang.OutOfMemoryError: PermGen space。在IBMD的jdk中不能设置大小,在0~(Java进程的寻址空间大小-heap大小)之间动态扩展(操作系统内存足够的情况下)。

 

java stacks存放线程私有的数据,如局部变量和线程变量。他的结构如下图所示:

 



 当创建一个线程的时候分配线程自身的pc register和Java stack,Java stack由一些stack frames组成,每个stack frame包含了Java方法调用的状态。当线程调用java方法的时候,JVM将一个新的frame压入Java stack,当方法调用结束,弹出这个frame并丢弃。JVM本身没有地方保持中间变量的值。指令集用Java stack 存储中间变量的值。Java stack大小不够的话,会出现如下错误:java.lang.OutOfMemoryError: unable to create new native thread

 

native method stacks里面包括Socket Buffers、Direct Memory Space、JNI Code、JNI Allocated Memory。
  

  • 大小: 38.8 KB
  • 大小: 48.6 KB
  • 大小: 35.7 KB
  • 大小: 70.7 KB
分享到:
评论

相关推荐

    JVM学习笔记

    ### JVM学习笔记 #### JVM内存模型 (JMM) JVM内存模型主要分为以下几个部分: - **Java堆**:这是所有线程共享的一块区域,在虚拟机启动时创建。主要用于存放对象实例,几乎所有的对象实例都在这里分配内存。 - *...

    JVM学习笔记.docx

    本篇JVM学习笔记主要涵盖了以下几个核心知识点: 1. **运行时数据区**: - **程序计数器**:记录当前线程执行的字节码的行号,用于线程恢复执行时跳转到正确位置。 - **Java虚拟机栈**:每个方法执行时创建的栈帧...

    jVM学习笔记.ppt

    逻辑结构主要包括Java源码编译器、JVM执行引擎、类加载器等组件,而物理结构则涵盖了堆、栈、本地方法栈、方法区等内存区域。JDK与JRE的区别在于,JDK包含了开发工具和JRE,而JRE仅包含运行时环境。 Java代码的编译...

    虚拟机学习笔记--周志明老师第三版

    虚拟机学习笔记 Java 虚拟机(JVM)是 Java 语言的 runtime 环境,负责加载、验证、执行 Java 字节码。以下是 JVM 相关知识点的总结。 1. 运行时数据区域 JVM 的运行时数据区域主要包括: * 堆(Heap):...

    JVM学习资料+笔记

    这个资料包不仅涵盖了理论知识,还包含个人的学习笔记,对于学习和掌握JVM的各个方面都将大有裨益。无论是初学者还是经验丰富的开发者,都可以从中找到提升自己技能的宝贵资源。通过深入学习和实践,可以更好地理解...

    JVM学习笔记核心知识点整理

    ### JVM学习笔记核心知识点整理 #### 一、引言与背景 随着软件开发技术的不断发展,Java作为一种广泛应用的编程语言,其背后的核心技术——Java虚拟机(JVM)的重要性日益凸显。掌握JVM不仅可以帮助开发者更好地理解...

    jvm学习笔记

    《JVM学习笔记》 Java虚拟机(JVM)是Java平台的核心组成部分,它负责运行所有的Java应用程序。这篇笔记将深入探讨JVM的工作原理、内存管理、类加载机制以及优化策略,帮助读者全面理解JVM并提升Java程序的性能。 ...

    狂神说JVM探究.rar

    这份资料出自B站上的【狂神说Java】系列教程,为快速入门JVM提供了详实的笔记。以下是根据这些资源可能包含的一些关键知识点的详细解析: 1. **JVM概述**: - JVM是Java平台的核心组成部分,它是一个运行Java字节...

    Java分布式应用学习笔记-谈JVM.doc

    【Java分布式应用学习笔记-谈JVM】 在Java分布式应用中,JVM(Java虚拟机)扮演着至关重要的角色。虽然有些人可能认为分布式系统与JVM的关系并不密切,但事实上,尤其是在大型分布式环境,如云计算服务平台,对Java...

    JVM性能学习笔记思维导图

    本文将根据"JVM性能学习笔记思维导图"的主题,详细阐述JVM的主要组成部分,性能调优的关键点以及相关的工具与实践策略。** 1. **JVM结构与内存模型** - **类装载器(ClassLoader)**:负责加载类文件,确保类在运行...

    JVM笔记(阳哥).zip

    《JVM笔记(阳哥)》是一份深入探讨Java虚拟机(JVM)的资料,由阳哥精心整理。这份笔记涵盖了JVM的基础概念、内存管理、类加载机制、性能优化等多个方面,对于理解Java程序的运行机制以及提升开发效率具有重要的...

    jvm学习笔记(jvm内存模型&垃圾收集算法&类加载机制)

    在JVM的学习中,理解其内存模型、垃圾收集算法以及类加载机制至关重要。 1. **JVM内存模型** - **方法区**:也称为“永久代”,存储虚拟机加载的类信息、常量、静态变量等,是线程共享的区域。在Java 8之后,这...

    大数据笔记kafka-jvm.zip

    3. 内存模型:JVM内存包括堆、栈、方法区、本地方法栈和程序计数器等,理解这些区域的作用和垃圾回收机制是优化JVM的关键。 四、JVM在Kafka中的优化 1. 参数调优:根据Kafka的特性,调整JVM内存大小、GC策略、并发...

    深入JVM笔记word版

    ### 深入解析 JVM 内存区域 #### 一、Java内存区域概述 Java虚拟机(JVM)作为Java程序的运行环境,负责管理和分配内存...理解这些区域对于深入学习JVM原理至关重要,也有助于开发者编写更加高效和可靠的Java应用程序。

    ImagesForJVM-JVM笔记图片

    【描述】"ImagesForJVM——JVM笔记图片" 暗示这些图片可能是教学或学习笔记的一部分,旨在通过视觉化的方式解释JVM的关键概念,如内存模型、类加载机制、垃圾收集以及性能优化等方面。 【标签】"java" 明确了这些...

    JVM内存管理学习笔记

    《JVM内存管理学习笔记》 在Java世界中,JVM(Java Virtual Machine)是运行所有Java应用程序的核心。深入理解JVM内存管理对于优化程序性能、预防和解决内存泄漏问题至关重要。本文将从JVM内存模型、内存区域划分、...

    学习jvm笔记.zip

    堆是所有线程共享的区域,用于存储对象实例。栈则为每个线程独有,存放方法调用时的局部变量、方法参数和返回地址。Java还提供了方法区和程序计数器,方法区存储类信息、常量、静态变量,程序计数器记录下一条要执行...

    JVM-LearningAndOptimize:JVM学习笔记与调优实战

    《JVM学习笔记与调优实战》是一本深入探讨Java虚拟机(JVM)的书籍,旨在帮助读者理解和掌握JVM的工作原理以及如何进行性能优化。在这个项目中,作者不仅分享了理论知识,还提供了实战调优的经验。下面将详细讨论JVM...

    黑马JVM学习笔记二

    本地方法栈是JVM为执行本地(非Java)方法提供内存的地方,例如JNI接口调用的C/C++代码。虽然这部分内存也是线程私有的,但它与Java代码无关,因此不涉及垃圾回收。 堆内存是所有线程共享的一片区域,用于存储通过`...

Global site tag (gtag.js) - Google Analytics