请注意:本文描述JDK版本为SUN 5.6+ , IBM 5+
进程和寻址空间
jvm最终表现为一个java进程,也是一个操作系统进程。因此jvm的内存最大就是进程的内存,进程所能占用的内存决定于OS的寻址空间和内存模型。
32位操作系统的寻址空间为:2^32 0x00000000 – 0xFFFFFFFF 4GB
64位操作系统的寻址空间为:2^64 0x0000000000000000 – 0xFFFFFFFFFFFFFFFF 16 EiB
并不是所有的寻址空间都能给用户进程使用,操作系统的kernel、runtime support libraries需要占用一定的内存,这些内存占用多少、占用什么地址段和操作系统内存模型相关,不同的操作系统用户能用的地址空间不同。
32bit User Space Available to the Java Process
64位操作系统由于寻址空间巨大,基本不会出现内存不够用的情况,因此就不详细介绍其内存模型了。
64 bit User Space Available to the Java Process
了解了操作系统的寻址空间和内存模型后,你就可以了解jvm作为一个java process,所能占用用户内存是多大了。
堆栈的概念
栈是运行时的单位,而堆是存储的单位。
栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;堆解决的是数据存储的问题,即数据怎么放、放在哪儿。Java变量中基本类型存放在栈中,引用类型存放在heap中,因为基本类型的长度不变,不需要动态扩展。
在Java中一个线程就会相应有一个线程栈(-Xss)与之对应,而堆则是所有线程共享的。栈因为是运行单位,里面存储的信息都是跟当前线程(或程序)相关信息的。包括局部变量、程序运行状态、方法返回值等等;而堆只负责存储对象信息。线程栈过小会出现java.lang.StackOverflowError错误。
JVM 内存模型
前面介绍了操作系统寻址空间、用户进程可以占用的内存,那我们再来看看在java process里面有多少内存可以用于java application。
java 进程的内存分成两大部分:heap和native heap。Available Memory Space – Max Java Heap Size = Native Heap。
从图中可以看出jvm内存的构成:
Java heap
– 分配的连续内存区
– 通过配置-Xmx在启动的时候占用。但WINDOWS平台测试结果:在jvm启动的时候校验内存是否满足要求,但是并不实际占用,也就是说,如果当jvm heap扩展的时候很可能因为主机内存不够而引起OOM。因此要注意主机内存,不要认为只要事先分配好JVM内存就可以保证JVM运行。
Just In Time (JIT) Compiler
– JIT运行时数据
– 存储动态编译成的二进制代码
Virtual Machine Resources:
– Debug Engine
– Trace Buffers
– Dump Buffers
– GC Infrastructure
JNI Allocations
– JNI函数分配的NativeHeap
Resources to underpin Java Objects
– Classes and ClassLoaders(存放在栈中)
– Threads(关联Native Thread)
– Direct java.nio.ByteBuffers(直接使用NativeHeap)
– Sockets(关联Native Socket)
- 大小: 23.6 KB
- 大小: 51 KB
- 大小: 21.6 KB
- 大小: 26.6 KB
- 大小: 24.1 KB
- 大小: 36.5 KB
- 大小: 23.8 KB
- 大小: 16.5 KB
分享到:
相关推荐
JVM性学习笔记-基本原理,内存模型,JVM参数设置,类加载器原理,JDK自带工具
### JVM学习笔记 #### JVM内存模型 (JMM) JVM内存模型主要分为以下几个部分: - **Java堆**:这是所有线程共享的一块区域,在虚拟机启动时创建。主要用于存放对象实例,几乎所有的对象实例都在这里分配内存。 - *...
### JVM学习笔记(一) #### 一、JVM概述与工具使用 JVM(Java Virtual Machine)是Java语言的核心组成部分之一,它为Java程序提供了一个跨平台的运行环境。本篇学习笔记主要介绍如何利用一系列工具来查看和监控JVM...
在JVM的学习中,理解其内存模型、垃圾收集算法以及类加载机制至关重要。 1. **JVM内存模型** - **方法区**:也称为“永久代”,存储虚拟机加载的类信息、常量、静态变量等,是线程共享的区域。在Java 8之后,这...
"jvm视频及笔记"这个资源显然是一份全面学习JVM的材料,结合了视频教程和书面笔记,帮助学习者深入理解JVM的工作原理及其在实际开发中的应用。 JVM的学习可以从以下几个重要的知识点开始: 1. **JVM架构**:JVM...
3. 内存模型:JVM内存分为堆、栈、方法区、本地方法栈、程序计数器等几部分。其中,堆是对象存储的地方,栈处理方法调用,方法区存储类信息。 4. 垃圾收集:JVM的自动内存管理关键在于垃圾收集,包括可达性分析、...
《JVM内存管理学习笔记》 在Java世界中,JVM(Java Virtual Machine)是运行所有Java应用程序的核心。深入理解JVM内存管理对于优化程序性能、预防和解决内存泄漏问题至关重要。本文将从JVM内存模型、内存区域划分、...
### JVM学习笔记核心知识点整理 #### 一、引言与背景 随着软件开发技术的不断发展,Java作为一种广泛应用的编程语言,其背后的核心技术——Java虚拟机(JVM)的重要性日益凸显。掌握JVM不仅可以帮助开发者更好地理解...
这份资料出自B站上的【狂神说Java】系列教程,为快速入门JVM提供了详实的笔记。以下是根据这些资源可能包含的一些关键知识点的详细解析: 1. **JVM概述**: - JVM是Java平台的核心组成部分,它是一个运行Java字节...
### JAVA学习经典笔记知识点概述 #### 一、Java与C++的区别 1. **内存管理:** Java自动管理内存,通过垃圾回收机制自动清理不再使用的对象;而C++需要程序员手动管理内存,容易出现内存泄漏等问题。 2. **平台...
1. **JVM结构与内存模型** - **类装载器(ClassLoader)**:负责加载类文件,确保类在运行时被正确地加载到JVM中。 - **运行数据区(Run-Time Data Areas)**:包括程序计数器、虚拟机栈、本地方法栈、堆和方法区(在...
3. 内存模型:JVM内存包括堆、栈、方法区、本地方法栈和程序计数器等,理解这些区域的作用和垃圾回收机制是优化JVM的关键。 四、JVM在Kafka中的优化 1. 参数调优:根据Kafka的特性,调整JVM内存大小、GC策略、并发...
这份“JVM的学习笔记PDF版”应该包含了关于JVM的详细信息,帮助学习者深入理解这个复杂的系统。JVM允许Java代码跨平台运行,通过解释器、类加载器、垃圾收集器等组件实现“一次编写,到处运行”的理念。 1. **JVM...
本学习笔记旨在全面解析JVM的工作原理,涵盖内存管理、类加载机制、垃圾收集、性能调优等多个关键领域,帮助读者从基础到深入地掌握JVM。 1. **JVM结构与运行过程** - JVM由类装载器、运行时数据区、执行引擎、...
【描述】"ImagesForJVM——JVM笔记图片" 暗示这些图片可能是教学或学习笔记的一部分,旨在通过视觉化的方式解释JVM的关键概念,如内存模型、类加载机制、垃圾收集以及性能优化等方面。 【标签】"java" 明确了这些...
它用来描述Java方法执行的内存模型,每个方法被执行时都会创建一个栈帧来存储局部变量表、操作数栈、动态链接、方法出口等信息。方法执行过程即为栈帧的入栈和出栈过程。 - **局部变量表**: 存储方法参数和方法内部...
### Java分布式应用学习笔记02再谈JVM 在深入探讨Java虚拟机(JVM)时,我们再次聚焦于这个核心组件,它不仅是Java运行环境的心脏,也是构建分布式应用的关键技术之一。JVM作为Java语言的核心执行环境,其设计与...
1. **Java内存模型**: - **堆内存(Heap)**:Java对象的主要存储区域,所有类实例和数组都在堆中创建。堆内存是所有线程共享的一块区域,由JVM负责管理。 - **栈内存(Stack)**:用于存储基本类型变量和对象...
JVM 设计为一个抽象的计算机模型,可以实现为软件或硬件。它的主要目标是在任何操作系统或硬件架构上都能运行 Java 字节码。JVM 的核心在于字节码的规格定义,包括: - **操作码和操作数**:规定了如何解析和执行...