一,为什么要学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类加载学习笔记:jvm java classloader 垃圾回收 gc
Java虚拟机JVM类加载学习笔记
JVM 学习笔记(Java虚拟机)
JVM深入理解Java虚拟机 - 学习笔记
比较全面学习笔记文档,初学Java虚拟机建议下来看看
Java分布式应用学习笔记02再谈JVM
自己有个习惯,学习新的知识喜欢一边看一边写笔记,这个是学习java虚拟机的时候写的笔记。
java虚拟机源码学习 Understanding the JVM 深入理解Java虚拟机第三版 (周志明)源码及学习笔记
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 引入Java语言虚拟机后,Java语言在不同平台...
包括jvm 的内存模型 对象的创建过程 垃圾回收算法 垃圾回收器 内存分配和回收策略
Java虚拟机(Java Virtual Machine,简称JVM),Java的“一处编译,处处运行”,就是因为Java程序编译成字节码文件后可以在任何计算机的JVM上执行,所以JVM是我们学习Java的重点之一。 JVM = 类加载器(classloader) + ...
Java基础学习笔记(印象笔记) Java 是一种广泛使用的面向对象编程语言,最初由 Sun Microsystems(现为 Oracle Corporation)于1995年发布。它具有简单、易学、可移植、安全和高性能等特点。 Java 是一种跨平台语言...
这里我们使用举例来说明为什么要学习Java虚拟机,其实这个问题就和为什么要学习数据结构和算法是一个道理,工欲善其事,必先利其器。曾经的我经常害怕处理内存溢出的问题,因为不知道他为什么会出现这个问题,当我在...
JVM是Java Virtual Machine(Java虚拟机)的缩写,是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟计算机功能来实现的,JVM屏蔽了与具体操作系统平台相关的信息,Java程序只需生成在Java虚拟机上运行的字节...
java的跨平台性是通过JVM(java虚拟机)实现的,java代码不直接与底层操作系统打交道,而是通过JVM这个中间介质间接与底层操作系统交互,JVM屏蔽了各操作系统之间的差异,不同版本的操作系统就有不同版本的JVM,只有...
它采用了“一次编写,到处运行”的原则,即一次编写的程序可以在不同的操作系统上运行,这得益于Java虚拟机(JVM)的存在。JVM是Java的核心组成部分,它可以将Java代码解释成特定平台上的机器码,从而实现跨平台运行...
它采用了“一次编写,到处运行”的原则,即一次编写的程序可以在不同的操作系统上运行,这得益于Java虚拟机(JVM)的存在。JVM是Java的核心组成部分,它可以将Java代码解释成特定平台上的机器码,从而实现跨平台运行...
它采用了“一次编写,到处运行”的原则,即一次编写的程序可以在不同的操作系统上运行,这得益于Java虚拟机(JVM)的存在。JVM是Java的核心组成部分,它可以将Java代码解释成特定平台上的机器码,从而实现跨平台运行...