JVM将内存空间划分为:方法区、堆、本地访法栈、PC寄存器和JVM方法栈
◆方法区
- 一个JVM只存在一个方法区,所有线程共享;
- 类的信息(类的完整有效名称、父类的完整有效名称<interface 与 Object除外>、修饰符等);
- 类中的静态变量;
- 类中定义为final的常量;
- 类中的Field信息(域名、域类型和域修饰符等);
- 类中的方法信息(方法名、方法返回类型、方法参数、方法的修饰符、方法的字节码等);
- 方法区也可以被GC;
- 方法区的内存大小默认最小16MB,最大64MB,可通过-XX:PermSize及-XX:MaxPermSize来指定最小最大值;
◆堆
- 一个JVM只存在一个堆,所有线程共享;
- 类的实例和数组;
- 堆的内存大小默认最小值为物理内存的1/64(<1GB),最大值为物理内存的1/4(<1GB),可通过-Xms和-Xmx来指定其最大最小值;
- 当空余堆内存小于40%时,JVM会增大Heap到-Xmx指定的大小,可通过-XX:MinHeapFreeRatio=来指定此比例;
- 当空余堆内存大于70%时,JVM会减小Heap到-Xms指定的大小,可通过-XX:MaxHeapFreeRatio=类指定此比例;
-
为了使内存回收更高效,从JDK1.2开始对堆采用分代管理;
- 新生代(New Generation):一般来说,Java程序中新创建的对象都是从新生代分配内存,新生代由Eden Space和两块相同大小的Survisor Space(又称为S0和S1或From和To)构成,可通过-Xmn参数来指定新生代的内存大小,也可以通过-XX:SurvisorRatio来调整Eden Space和Survisor Space的大小;
- 老生代(Old Generation):用于存放新生代中经过多次垃圾回收仍然存活的对象,例如缓存对象,新创建的对象也有可能在老生代上直接分配内存,主要有两种情况(由不同的GC实现来决定):一种为大对象,可通过-XX:PretenureSizeThreshold=1024(单位是字节,默认为0)来代表当对象超过多大时就不在新生代中分配内存,而是直接在老生代中分配,此参数在新生代采用Parallel Scavenge GC时无效,Parallel Scavenge GC会根据运行状况决定什么对象直接在老生代中分配内存;另一种为大的数组对象,且数组中无引用外部对象;
- 老生代所占用的内存大小为-Xmx对应的值减去-Xmn对应的值;
◆本地方法栈
- 用于支持native方法的执行,存储每个native方法调用的状态;
- JDK中本地方法栈和JVM方法栈是同一个;
◆PC寄存器和JVM方法栈
- 每个线程都会创建PC寄存器和JVM方法栈;
- JVM方法栈只有“压栈”和“出栈”操作,操作的单位是栈帧,其中栈帧由“局部变量区”,“操作数栈“,“栈帧数据区”三部分组成;
- JVM方法为线程私有;
- 当JVM方法栈内存不足时,会抛出StackOverflowError错误,可通过-Xss来指定其大小
============================================
注:摘抄自《分布式JAVA应用基础与实践》
分享到:
相关推荐
1. **JVM内存结构** JVM内存主要分为以下几个区域: - **方法区(Method Area)**:这是所有线程共享的区域,存储类信息、常量、静态变量、即时编译后的代码等。在Java 8以前,这部分也被称为永久代(Permanent ...
### JVM内存结构详解 #### 一、概述 Java虚拟机(JVM)作为Java程序的运行环境,其核心组件之一便是内存管理系统。理解JVM的内存布局对于开发高性能的应用程序至关重要。本文将详细介绍JVM内存结构及其各个组成部分...
JVM 内存结构和 6 大区域 JVM 是 Java虚拟机,它是 Java 语言的核心组件之一,为 Java 程序提供了运行环境。JVM 的内存结构是 Java 程序的基础,它的设计和实现对 Java 程序的性能和可靠性产生了深远的影响。 JVM ...
"Jvm性能优化-JVM内存结构原理分析03" Jvm性能优化是Java虚拟机(JVM)中非常重要的一部分,它对Jvm的性能产生了很大的影响。本文将从Jvm内存结构的角度来分析Jvm性能优化的原理。 Jvm内存结构主要分为五部分:堆...
JVM内存结构的理解对于优化Java程序性能、避免内存溢出等问题至关重要。以下是对JVM内存结构的详细阐述: 1. **堆内存(Heap)** 堆内存是Java程序中最大的一块内存区域,用于存储对象实例。所有通过`new`关键字...
总之,深入理解JVM内存结构及其管理机制,有助于我们编写更高效、更稳定的Java程序,并能有效地处理内存相关问题。这份"JVM内存结构笔记"将详细阐述这些内容,是学习和研究JVM内存管理的重要参考资料。
总结来说,Linux和JVM内存结构分析是提升系统效率和稳定性的重要手段。通过阅读和分析上述文件,我们可以深入了解系统资源的使用情况,进而进行针对性的调优。对于IT专业人士而言,掌握这些知识不仅能提升工作效率,...
了解JVM内存结构对于优化代码性能、防止内存泄漏以及理解程序运行时的行为至关重要。本文将深入探讨JVM内存的各个区域,帮助你全面掌握JVM的工作原理。 首先,JVM内存主要分为以下几个部分: 1. **程序计数器...
JVM内存结构-JVM体系结构 程序计数器 虚拟机栈 本地方法栈 堆 方法区
2019最新深入理解JVM内存结构及运行原理(JVM调优)高级核心课程视频教程下载。JVM是Java知识体系中的重要部分,对JVM底层的了解是每一位Java程序员深入Java技术领域的重要因素。本课程试图通过简单易懂的方式,系统...
Java虚拟机(JVM)内存结构是理解Java...总之,JVM内存结构是Java平台的核心特性,它为程序提供了动态的内存分配和管理,确保了程序的稳定性和效率。深入理解这一结构,有助于开发者写出更高效、更健壮的Java应用程序。
Java内存模型(JMM)与JVM内存结构不同,它是针对多线程环境下内存访问的抽象模型。JMM确保在多线程环境下,共享变量的读写操作具有正确的顺序和可见性,通过volatile、synchronized等关键字来实现这一目标。JMM关注...
java jvm内存结构 调优
理解JVM内存结构和垃圾回收机制对于Java开发者至关重要,它可以帮助我们更好地优化程序性能,避免内存溢出等问题。通过调整JVM参数,如堆大小、新生代与老年代的比例、垃圾收集器的选择等,我们可以根据应用的需求...
了解JVM内存结构及其功能对于优化Java应用程序的性能和排查内存问题至关重要。 首先,我们来详细探讨JVM的内存结构。在Java中,内存主要分为以下几个区域: 1. **程序计数器(Program Counter Register)**:每个...
在JDK8中,JVM内存结构发生了显著变化,尤其是元空间(MetaSpace)替代了永久代(Permanent Generation)作为方法区的一部分。这种方法区的调整是由于永久代存在的一些问题,比如大小设定困难,容易引发溢出,以及给...
2019最新深入理解JVM内存结构及运行原理(JVM调优)高级核心课程视频教程下载。JVM是Java知识体系中的重要部分,对JVM底层的了解是每一位Java程序员深入Java技术领域的重要因素。本课程试图通过简单易懂的方式,系统...
jvm内存结构-栈的变化,机器指令的格式/执行模式文章中的demo代码。