java虚拟机的内存划分:
1:程序计数器:一条运行的指令。
2:虚拟机栈:函数调用的堆栈信息。
3:本地方法栈:函数调用的堆栈信息,针对JVM方法栈我们无需要关心。
4:java 堆:存放运行时所需要的对象信息。
5:方法区:存放程序类元数据信息。
1:程序计数器:
用于每个任务执行的一条指令,如线程正在执行一个本地方法,则程序执行器记录正在执行的java字节码地址;每一个执行的程序执行器之间相互隔离,互不影响,是一块私有的内存空间;
2:java虚拟机栈:
2.1.用于保存方法的局部变量、部份结果、并参与方法的调用和返回;
2.2.java虚拟机栈大小是可以指定一个初始阀值与最大阀值,JVM启动时会初始化大小,当系统所要的栈空间大小超过初始阀值时,会向系统申请资源,执行垃圾回收,当超过最大阀值时则会抛出StackOverflowError错误;
2.3.栈的大小决定程序方法的调用深度;
2.4.栈运行使用了一种叫着栈桢的数据结构保存上下文数据,主要包括:局部变更表、操作数栈、动态连接方法和返回地址等信息,
2.5.每一个方法的调用都代表着方法的入栈和出栈操作,如果方法的参数和局部变量较多,那么栈帧的局部变量表就会增大,执行时间周期也会相应的变长。
2.6.栈帧中局部表量表用于存放方法参数和方法内部的局部变量。局部变量以“字”为单位进行内存的划分,一个字为32位长度。long、double占用2个字,其它为1个字,在方法调用时,对于非static方法,虚拟机会将当前this作为局部变量参数传递给当前方法,方法的传递利用局部变量表完成。
3:本地方法栈:
完成函数的调用,使用C实现,和虚拟机栈类似,但无需关心实现。
4:Java堆:
4.1. 堆用于存放所有生成的对象;
新生代又划分为eden 和 survivor space0(to 和 from)
eden:用于刚刚产生的对象
survivor:表示至少经过一次垃圾回收后还幸存的对象。
4.2.老年代:长时间停留未没垃圾收集器回收到的对象.
方法区:
方法区最要存储类元素信息包括类常量与类定义,信息来源于class文件,方法区也称为永久区。
JVM内存参数分配
1:堆的分配
设置最大堆内存 -Xmx:新生代和老年代相加的值
设置最小堆内存 -Xms:设置最小堆,在程序运行初期会分配初始值大小,当指定的内存大小无法满足应用程序时,JVM会向操作系统申请更多的内存,至内存达到-Xmx值,如果仍然无法满足则抛出OutOfMemoryError异常,如果初始堆空间很小,当程序触及-Xms时,为了保证系统内存尽可能的限制在-Xms,程序在运行期间也会频繁的GC,从而对系统性能产生一定的影响。
2:新生代 –Xmn
2.1:-Xmn:新生代大小一般设置为堆内存的1/3 或 1/4
注:在HotSpot中: -XX:NewSize:用于设置新生代初始大小;-XX:MaxNewSize:用于设置最大值;设置不同的-XX:NewSize和-XX:MaxNewSize:有可能会导致内存震荡,产生不必要的系统性能开销;常规情况下只可设置-Xmn就可以满足HotSpot的要求
3:设置持久代:
-XX:perSize:最小值
-XX:MaxPerSize:最大值
注:持久代的大小决定系统开销可以支持多少个类及常量的定义。
4:设置线程栈:-Xss
线程栈是系统分配的一块私有内存空间,函数的调用,都是相互隔离;
如果栈分配太小,如果没有足够的空间调用函数,将导致异常;
线程栈空间分配越大,相对系统可分配的线程数量就会减小;线程栈越小,可用线程数量则越多
5:堆的比例分配
-XX:SurvivorRatio:用来设置新生代中,eden空间和s0空间的比例关系;s0划分为 from 和 to 空间;eden区是s0区的2倍大小,由于s0和s1相同,所以eden=[新生代大小/(1+1+2)]*2
-XX:NewRatio:设置老年代与新生代的比例
相关推荐
《深入理解Java虚拟机》是一本深度探讨Java虚拟机(JVM)的著作,涵盖了JVM性能调优、内存模型以及虚拟机原理等多个关键领域。本文将基于这些主题,详细阐述其中的重要知识点。 首先,我们要了解Java虚拟机(JVM)...
jvm性能调优+内存模型+虚拟机 jvm性能调优+内存模型+虚拟机 jvm性能调优+内存模型+虚拟机
### 个人总结之—JVM性能调优实战 #### 概述 本文档是一篇关于JVM(Java虚拟机)性能调优的经典实战总结。在实际应用开发与维护过程中,JVM性能调优是一个非常重要的话题,它直接关系到应用程序运行效率、资源利用...
### JAVA JVM性能调优监控工具详解 在Java开发过程中,特别是在企业级应用中,经常会遇到各种性能瓶颈问题,如内存溢出(`OutOfMemoryError`)、内存泄露、线程死锁、锁争用等问题。这些问题如果不能及时有效地解决...
JVM性能调优总结 JVM性能调优是Java开发中非常重要的一方面,直接影响到系统的性能和稳定性。本文将总结JVM性能调优的经验和技巧,并提供一些实用的配置参数和建议。 一、堆大小设置 堆大小是JVM性能调优中的一个...
JVM性能调优 JVM(Java Virtual Machine)是Java程序执行的核心组件,负责执行Java字节码指令。JVM性能调优是Java开发者应该掌握的重要技能,以下是JVM性能调优的知识点总结: JVM基础知识 * 虚拟机:是一种软件...
了解Java对象引用类型、垃圾回收算法以及分代处理垃圾的概念是进行JVM性能调优的基础。这些知识点对于准备Java面试的开发者来说,是必须掌握的重要内容,同时也是深入理解JVM内存管理和性能优化的基础。
标题《JVM系列之性能调优参考手册(实践篇)》涉及的知识点主要集中在Java虚拟机(JVM)性能调优的实践操作。...因此,手册的实践操作部分对于开发者来说是作为深入理解和应用JVM性能调优知识的参考。
基于Spring Boot框架的JVM性能调优与内存管理 项目简介 本项目是一个基于Spring Boot框架的Java应用程序,专注于JVM性能调优与内存管理。通过深入探讨JVM的内存分配、垃圾收集、线程管理、并发控制等核心概念,...
JVM性能调优是一项关键技术,旨在优化JVM的内存管理、垃圾收集、类加载等方面,以提升程序运行速度、减少内存占用并避免系统崩溃。本教程"JVM性能调优经典教程"由马士兵老师倾力讲解,旨在帮助Java开发者进阶,掌握...
本文将详细解析JVM性能调优分析的过程,并提供常见参数选择配置的建议。 首先,进行JVM参数调优时,我们需要考虑以下几个步骤: 1. **对象占用内存计算**:了解业务系统每秒钟创建的对象数量及其占用的内存空间,...
以下是根据提供的内容,对JVM性能调优的一些关键知识点的详细解释: 1. **内存设置**: - `-Xmx` 和 `-Xms` 参数用于设置Java堆的最大和初始内存大小。在示例中,它们都设置为2000M,这意味着JVM启动时会分配2GB的...
JVM性能调优-JVM内存整理及GC回收 JVM(Java Virtual Machine)性能调优是 Java 开发者需要掌握的重要技能之一。 JVM 的性能调优主要涉及到 JVM 内存整理、垃圾回收(GC)机制等方面。 Java 中的值传递和引用传递...
《JVM性能调优-JVM内存整理及GC回收》是一份深入探讨Java虚拟机(JVM)优化的重要学习资料,特别适合对JAVA编程有经验的开发者。这份文档详细阐述了JVM性能调优的关键概念,包括JVM内存模型、垃圾回收(Garbage ...
深入理解Java虚拟机详细视频教程,包括jvm性能调优、Java内存模型及虚拟机原理。有详细的文档资料,配合深入理解Java虚拟机书籍学习效果更佳
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解 本文将对一些常用的 JVM 性能调优监控工具进行介绍,包括 jps、jstack、jmap、jhat、jstat 等工具的使用详解。这些工具对于 Java 程序员来说是必备的,...
JVM性能调优和常见问题!JVM结构和常见错误解决
jvm性能调优实战篇视频
《深入理解JVM性能调优和内存模型,垃圾回收,虚拟机原理,经典视频教程》是一套详尽的教育资源,旨在帮助Java开发者深入探索Java虚拟机(JVM)的内部工作机制,提升性能优化的能力。本教程共包含110讲,内容丰富,适合...