序号 | 数据区 | 描述 | 共享范围 | 常用控制参数 | 主要异常 |
1 | 程序计数器 | 是一块较小的内存空间,是当先线程执行的字节码指示器,主要控制分支,循环,跳转,异常处理,线程恢复等基础功能,需呀依赖计数器完成 | 线程私有 | JVM里唯一一个没有OutOfMemoryError情况的区域 |
2 | 虚拟机栈 | 是方法执行的内存模型每个方法执行时都会创建一个栈帧用于存储局部变量表,动态链接,方法出口,每个方法的调用开发至结束就对应一个栈帧从入栈到出栈的过程,局部变量表存储了各种基本数据类型以及引用类型的指针 | 线程私有 | -Xss128k,设置栈大小 | (1)如果请求的栈深度大于虚拟机所允许的深度,将抛出StackOverFlowError异常(2)如果虚拟机栈动态扩展时,无法申请到足够的内存,就会抛出OutOfMemoryError异常 |
3 | 本地方法栈 | 与虚拟机栈的作用非常类似,区别仅在于虚拟机栈为JAVA服务,执行java方法,本地方法栈为虚拟机条用Native方法服务,有的虚拟机把二者直接合并为一个模块。 | 线程私有 | -Xss128k,设置栈大小 | StackOverFlowError,OutOfMemoryError |
4 | Java堆 | 堆是Java虚拟机里,管理内存最大的一块,在虚拟机启动时创建,用来存储所有的对象实例和数组,堆可以细分为新生代和老年代,再细致有Eden空间,From Survivor空间和To Survivor空间,Java堆可以处于物理上不连续的内存空间中,只要逻辑上连续即可。 | 线程共享 | -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError最后一个可以打印dump信息 | OutOfMemoryError |
5 | 方法区 | 与Java堆一样,是线程共享区域,存储已经被加载过的类信息,常量,静态变量,即时编译后的代码等,此区域很少进行垃圾回收,一般习惯上称永久代(Permanent Generation) | 线程共享 | -XX:MaxPermSize设置上限,-XX:PermSize设置最小值,VM Args:-XX:PermSize=10M -XX:MaxPermSize=10M | OutOfMemoryError |
6 | 运行时常量池 | 隶属于方法区,在Class文件中,除了有类的版本,字段,方法,接口等信息,还有一项信息就是常量池,用于存储编译生成的字面量和符号引用,这部分内容在类加载后进行方法区,常量池存放,运行时的常量池,比较多的是String.intern()方法 | 同方法区 | 同方法区 | OutOfMemoryError |
7 | 直接内存 | 直接内存并不是虚拟机运行时的一部分,也不是JAVA虚拟机规范中定义的内存区域,但这部分内存也频繁被使用,在JDK1.4之后,加入了NIO,引入了一种基于通常(Channel)和缓冲区(Buffer)的IO方式,可以直接使用Native函数,直接分配堆外内存,然后通过一个存储在Java堆中的DirectByteBuffer对象,作为这块内存的引用,进行操作,这样能在一些场景显著提高性能 | 线程共享 | -XX:MaxDirectMemorySize设置最大值,默认与java堆最大值一样。例:-XX:MaxDirectMemorySize=10M -Xmx20M | OutOfMemoryError |
相关推荐
### 深入Java虚拟机JVM类加载学习笔记 #### 一、Classloader机制解析 在Java虚拟机(JVM)中,类加载器(ClassLoader)是负责将类的`.class`文件加载到内存中的重要组件。理解类加载器的工作原理对于深入掌握JVM以及...
Java虚拟机(JVM)是Java程序的核心组成部分,它负责执行字节码并管理程序运行时的内存。本文主要探讨JVM的类加载机制,包括类加载、连接、初始化等关键过程,以及类的主动使用和被动使用的情况。 首先,我们要理解...
**JVM学习笔记(Java虚拟机)** Java虚拟机(JVM)是Java语言的核心组成部分,它是Java程序运行的平台,负责解释和执行字节码。深入理解JVM对于优化Java应用程序性能至关重要。本笔记将从以下几个方面详细介绍JVM:...
Java 虚拟机(JVM)自动内存管理机制是 Java 语言的一大特色,它使得 Java 程序员无需手动管理内存,从而提高了开发效率和程序稳定性。JVM 自动内存管理机制主要通过 JVM 的内存模型来实现,它将 JVM 的内存在运行时...
本文将深入探讨JVM中的访问控制器,主要基于“java之jvm学习笔记十一(访问控制器)-源码”这一主题,以及相关的源码分析。 首先,我们得了解Java的安全模型。Java安全模型基于一种称为安全管理器(SecurityManager)...
### 学习深入理解Java虚拟机的前几章笔记 #### JVM内存模型 Java虚拟机(JVM)的内存模型主要分为两大类:线程共享区和线程私有区。 ##### 线程共享区 - **堆**:是所有线程共享的内存区域,在这里存放着对象实例...
读书笔记:深入理解Java虚拟机JVM高级特性与最佳实践第3版学习笔记
它采用了“一次编写,到处运行”的原则,即一次编写的程序可以在不同的操作系统上运行,这得益于Java虚拟机(JVM)的存在。JVM是Java的核心组成部分,它可以将Java代码解释成特定平台上的机器码,从而实现跨平台运行...
读书笔记:深入理解Java虚拟机JVM高级特性与最佳实践第3版 周志明 学习笔记
Java 虚拟机(JVM)是Java编程语言的核心组成部分,它允许Java代码在不同的操作系统上运行,实现了“一次编写,到处运行”的目标。JVM 是一个虚拟计算机,能够执行字节码(.class文件),这些字节码是Java源代码经过...
这个“java之jvm学习笔记五(实践写自己的类装载器)”很可能是对这一主题的详细探讨。 类装载器在Java中的主要职责是动态加载类到JVM中。Java的类装载器分为三个基本层次:启动类装载器(Bootstrap ClassLoader)、...
读书笔记:《深入理解Java虚拟机JVM高级特性与最佳实践第2版》学习笔记
### 学习笔记之Java虚拟机详解 #### 运行时数据区域概览 Java虚拟机(JVM)运行时数据区域主要包括以下几部分:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区以及运行时常量池。 1. **程序计数器**: -...
在深入探讨Java虚拟机(JVM)时,我们再次聚焦于这个核心组件,它不仅是Java运行环境的心脏,也是构建分布式应用的关键技术之一。JVM作为Java语言的核心执行环境,其设计与优化对分布式系统的性能、可扩展性和可靠性...
尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机)学习笔记_NOTE_JVM
读书笔记:学习代码深入理解Java虚拟机JVM高级特性与最佳实践第3版 周志明
除了上述提到的基础知识点外,《深入理解Java虚拟机——JVM高级特性与最佳实践(第2版)》这本书籍还深入探讨了JVM的性能调优、并发编程、以及各种高级特性的具体应用。比如,对于性能调优,书中讲解了如何根据不同的...
它的设计目标是实现“一次编写,到处运行”,通过Java虚拟机(JVM)确保代码在不同操作系统上都能运行。Java语言的特点包括简洁性、面向对象、健壮性、安全性、高效性和可移植性。 【基本语法】 Java的基本语法包括...
《JVM:深入理解Java虚拟机》是一本深入解析Java虚拟机工作原理和技术细节的经典书籍。这份学习笔记将涵盖JVM的关键概念、架构以及它如何影响Java程序的性能。我们将探讨以下几个方面: 1. **JVM概述** Java虚拟机...