JVM基础:JVM内存组成及分配
Java内存组成介绍:堆(Heap)和非堆(Non-heap)内存
按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给 自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法 的代码都在非堆内存中。
组成图
◆ 方法栈 本地方法栈:
线程创建时产生,方法执行时生成栈帧
◆ 方法区
存储类的元数据信息 常量等
◆ 堆
java代码中所有的new操作
◆ native Memory(C heap)
Direct Bytebuffer JNI Compile GC;
堆内存分配
JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指 定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。对象的堆内存由称为垃圾回收器的自动内存管理系统回收。
非堆内存分配
JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。
保存虚拟机自己的静态(refective)数据
主要存放加载的Class类级别静态对象如class本身,method,field等等
permanent generation空间不足会引发full GC
JVM内存限制(最大值)
JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然 可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统 下为2G-3G),而64bit以上的处理器就不会有限制了。
本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/
Docker资源(CPU/内存/磁盘IO/GPU)限制与分配指南 什么是cgroup? cgroups其名称源自控制组群(control groups)的简写,是Linux内核的一个功能,用来限制、控制与分离一个进程组(如CPU、内存、磁盘输入输出等)。 什么是Docker资源限制?
Go 语言,内存的分配原理 Go 中实现的内存分配器,简单的说就是维护了一大块全局内存,每个线程(Go 中的 P)维护一小块的私有内存,当私有内存不足时再向全局申请。内存分配与 GC(垃圾回收)有密切关系。
(四)-对象内存的分配策略 Java所承诺的自动内存管理主要是:给对象分配内存,回收分配给对象的内存. 在Java虚拟机的五块内存空间中,程序计数器、Java虚拟机栈、本地方法栈内存的分配和回收都具有确定性,一般在编译阶段就能确定需要分配的内存大小,并且由于都是线程私有,因此它们的内存空间都随着线程的创建而创建,线程的结束而回收.也就是这三个区域的内存分配和回收都具有确定性,垃圾回收器不需要在这里花费太大的精力. 而Java虚拟机中的方法区因为是用来存储类信息、常量、静态变量,这些数据的变动性较小,因此不是Java内存管理重点需要关注的区域. 而对于堆,所有线程共享,所有的对象都需要在堆中创建和回收.虽然每个对象的
如何在Java中分配超过-Xmx限制的内存 本文主要介绍Java中几种分配内存的方法。我们会看到如何使用sun.misc.Unsafe来统一操作任意类型的内存。以前用C语言开发的同学通常都希望能在Java中通过较底层的接口来操作内存,他们一定会对本文中要讲的内容感兴趣。
相关文章
- java虚拟机学习-JVM调优总结(5)
- java虚拟机学习-JVM内存管理:深入Java内存区域与OOM(3)
- 小师妹学JVM之:JVM中的Safepoints
- 微服务轮子项目(49) -常见JVM内存错误及解决方案
- JVM virtual memory
- Java8 JVM内存结构讲解及配置优化
- 【jvm系列-02】jvm的类加载子系统以及jclasslib的基本使用
- java中jvm使用jststak定位线程cpu占用内存高的线程
- JVM 面试题,安排上了!!!
- Java Jvm运行机制原理
- JVM探究 面试题 JVM的位置 三种JVM:HotSpot 新生区 Young/ New 养老区 Old 永久区 Perm 堆内存调优GC的算法有哪些?标记清除法,标记压缩,复制算法,引用计数法
- JVM怎么判断对象是否存活
- JVM监控和诊断工具
- 深入理解JVM虚拟机读书笔记——垃圾回收器
- 【JVM】JVM内存模型详解
- 监控JVM内存使用情况,剩余空间小于2M时报警
- 为什么 JVM 不用 JIT 全程编译?
- java 调整jvm堆大小上限
- 初识JVM-JVM内存结构
- JVM(内存划分+类加载+GC)
- 一步步优化JVM三:GC优化基础
- JVM 堆的内存划分
- Java多线程基础(一)---深入理解Thread构造函数(Thread,ThreadGroup,JVM内存,守护线程场景)