一,为什么要学JVM内存
java程序无需显示分配和回收内存,由jvm自动管理内存的分配及回收,给开发人员降低了编写程序的难度, 副作用是可能在不知不觉中浪费了很多内存, 导致jvm花费很多时间进行内存回收, 另外由于不清楚jvm内存的分配和回收机制, 有可能造成内存泄露. 因此jvm如何进行内存的分配和回收也是要关注的问题.
二, JVM内存的结构
Jvm将内存空间划分为方法区, 堆 ,本地方法栈, PC寄存器 和jvm方法栈.
JVM标准结构
JVM内存结构
三,分析各个区域
3.1 方法区
方法区又叫持久带(Permanent Generation). 默认最小16M, 最大64M, 超过最大时会抛出OutOfMemory异常, 可通过
-XX:PermSize 及 –XX:MaxPermSize来指定最小值和最大值.
方法区存放哪些东西?
加载的类的信息(名称,修饰符等), 字段的信息, 方法的信息, 静态变量, final的常量.
方法区是全局共享的, 一定条件下也会被GC.
3.2 堆
堆是干嘛的?
用来存储对象实例及数组值
堆有多大空间?
默认最小为物理内存的1/64但小于1G, 最大为物理内存的1/4但小于1G, 可以用-Xms和-Xmx来调节最大和最小值,不过在32位系统上最大为2G,在64位系统上没有最大值限制.
什么时候堆的空间达最大?什么时候达最小?
默认当剩余空间小于40%时JVM会将堆增大到-Xmx指定的大小,当剩余空间大于70%时JVM会将其减小到-Xms指定的大小,这个比例也可以自己设置,
通过-XX:MinHeapFreeRatio和-XX:MaxHeapFreeRatio指定最大和最小比例.
对运行系统而言,为避免JVM频繁调整堆大小,通常将-Xms和-Xmx设为一样.
JDK1.2后堆分为新生代(new Generation)和旧生代(old Generation)两部分.
新生代 = Eden Space + 2个相同大小的Survivor space(通常称S0和S1或from和to)
大多数情况下新建的对象都在新生代中
旧生代干什么的?
用来存放经过多次垃圾回收但仍然存活的对象, 存放没有引用外部对象的大数组对象, 存放超过-XX:PretenureSizeThreshold=100(单位为字节,默认0)指定的字节数的对象,这个参数就是说如果某个对象超过100字节就不放在新生代中,直接放在旧生代中
当堆上空间不足时会触发GC, 如果GC后空间仍然不足则抛出OutOfMemory
3.3 本地方法栈
支持带有native修饰的方法执行, 比如说Thread类中就有
private static native void registerNatives();
public static native Thread currentThread();等native方法
SUN JDK的实现中本地方法栈和JVM方法栈是同一个
3.4 jvm方法栈
JVM方法栈是干嘛的?
按照”本地方法栈”的解释,我自己理解就是支持非native的方法执行.
每个线程都会创建JVM方法栈,是每个线程私有的,当方法运行完,其对应的内存也会自动释放.jVM方法栈空间不足时抛出StackOverFlowError错误
3.5 PC寄存器
PC寄存器是干嘛的?
不知道,不过每个线程都会创建PC寄存器
学习内容来自<<java分布式应用基础与实践>> 林昊 著
- 大小: 22.2 KB
- 大小: 19.3 KB
分享到:
相关推荐
Java 虚拟机学习笔记: Java 内存区域, 垃圾收集, 内存分配与回收策略, JVM 调优, 文件结构, 类加载机制, Java 程序 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,...
Java 虚拟机(JVM)自动内存管理机制是 Java 语言的一大特色,它使得 Java 程序员无需手动管理内存,从而提高了开发效率和程序稳定性。JVM 自动内存管理机制主要通过 JVM 的内存模型来实现,它将 JVM 的内存在运行时...
虚拟机学习笔记 Java 虚拟机(JVM)是 Java 语言的 runtime 环境,负责加载、验证、执行 Java 字节码。以下是 JVM 相关知识点的总结。 1. 运行时数据区域 JVM 的运行时数据区域主要包括: * 堆(Heap):...
### 深入Java虚拟机JVM类加载学习笔记 #### 一、Classloader机制解析 在Java虚拟机(JVM)中,类加载器(ClassLoader)是负责将类的`.class`文件加载到内存中的重要组件。理解类加载器的工作原理对于深入掌握JVM以及...
**JVM学习笔记(Java虚拟机)** Java虚拟机(JVM)是Java语言的核心组成部分,它是Java程序运行的平台,负责解释和执行字节码。深入理解JVM对于优化Java应用程序性能至关重要。本笔记将从以下几个方面详细介绍JVM:...
Java 虚拟机(JVM)是Java编程语言的核心组成部分,它允许Java代码在不同的操作系统上运行,实现了“一次编写,到处运行”的目标。JVM 是一个虚拟计算机,能够执行字节码(.class文件),这些字节码是Java源代码经过...
Java虚拟机(JVM)是Java程序的核心组成部分,它负责执行字节码并管理程序的内存。本篇文章将深入探讨Java虚拟机中的垃圾收集器(GC)及其对内存管理的影响。 1. 垃圾收集器的由来与作用 垃圾收集器的引入主要是...
Java虚拟机(JVM)是Java程序的核心组成部分,它负责执行字节码并管理程序运行时的内存。本文主要探讨JVM的类加载机制,包括类加载、连接、初始化等关键过程,以及类的主动使用和被动使用的情况。 首先,我们要理解...
尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机)学习笔记_NOTE_JVM
Java虚拟机(JVM)是Java程序的核心组成部分,它负责执行字节码并管理内存。在JVM的学习中,理解其内存模型、垃圾收集算法以及类加载机制至关重要。 1. **JVM内存模型** - **方法区**:也称为“永久代”,存储...
### Java分布式应用学习笔记02再谈JVM 在深入探讨Java虚拟机(JVM)时,我们再次聚焦于这个核心组件,它不仅是Java运行环境的心脏,也是构建分布式应用的关键技术之一。JVM作为Java语言的核心执行环境,其设计与...
### 学习笔记之Java虚拟机详解 #### 运行时数据区域概览 Java虚拟机(JVM)运行时数据区域主要包括以下几部分:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区以及运行时常量池。 1. **程序计数器**: -...
深入理解Java虚拟机,首先我们要明白Java虚拟机(JVM)的核心功能:它负责装载类文件,执行字节码,并管理内存。Java虚拟机的结构复杂且高效,主要由类装载器、执行引擎、内存管理和类库等组件构成。 类装载器是JVM...
读书笔记:深入理解Java虚拟机JVM高级特性与最佳实践第3版学习笔记
### 学习深入理解Java虚拟机的前几章笔记 #### JVM内存模型 Java虚拟机(JVM)的内存模型主要分为两大类:线程共享区和线程私有区。 ##### 线程共享区 - **堆**:是所有线程共享的内存区域,在这里存放着对象实例...
《JVM内存管理学习笔记》 在Java世界中,JVM(Java Virtual Machine)是运行所有Java应用程序的核心。深入理解JVM内存管理对于优化程序性能、预防和解决内存泄漏问题至关重要。本文将从JVM内存模型、内存区域划分、...
读书笔记:深入理解Java虚拟机JVM高级特性与最佳实践第3版 周志明 学习笔记
《JVM:深入理解Java虚拟机》是一本深入解析Java虚拟机工作原理和技术细节的经典书籍。这份学习笔记将涵盖JVM的关键概念、架构以及它如何影响Java程序的性能。我们将探讨以下几个方面: 1. **JVM概述** Java虚拟机...
通过阅读《深入理解Java虚拟机》第三章,开发者不仅可以深入理解Java的安全机制,还能学习到如何在实际项目中实施这些安全策略,提升应用的安全性。对于想要从事Java开发或者对系统安全有深入了解需求的人来说,这一...
读书笔记:《深入理解Java虚拟机JVM高级特性与最佳实践第2版》学习笔记