JVM内存划分
一、引导
内存作为系统中重要的资源,对于系统稳定运行和高效运行起到了关键的作用,Java和C之类的语言不同,不需要开发人员来分配内存和回收内存,而是由JVM来管理对象内存的分配以及对象内存的回收(又称为垃圾回收、GC),这对于开发人员来说确实大大降低了编写程序的难度,但带来的一个副作用就是,当系统运行过程中出现JVM抛出的内存异常(例如OutOfMemoryError)的时候,很难知道原因是什么,另外一方面,要编写高性能的程序,通常需要借助内存来提升性能,因此如何才能合理的使用内存以及让JVM合理的进行内存的回收是必须掌握的。
二、JVM内存划分
1. 栈区(stack segment):由编译器自动分配释放,存放函数的参数值,局部变量的值等,具体方法执行结束之后,系统自动释放JVM内存资源
2. 堆区(heap segment):一般由程序员分配释放,存放由new创建的对象和数组,jvm不定时查看这个对象,如果没有引用指向这个对象就回收
3. 全局数据区(data segment):存放全局变量,静态变量和字符串常量,不释放
4. 代码区(code segment):存放程序中方法的二进制代码,而且是多个对象共享一个代码空间区域
三、解释说明
1.在方法(代码块)中定义一个变量时,java就在栈中为这个变量分配JVM内存空间,当超过变量的作用域后,java会自动释放掉为该变量所分配的JVM内存空间;
2.在堆中分配的JVM内存由java虚拟机的自动垃圾回收器来管理
3.堆的优势是可以动态分配JVM内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配JVM内存的。缺点就是要在运行时动态分配JVM内存,存取速度较慢;
4.栈的优势是存取速度比堆要快,缺点是存在栈中的数据大小与生存期必须是确定的无灵活性。
- JVM内存区域划分 EDEN SPACE、SURVIVOR SPACE、TENURED GEN
- JVM学习01——Java内存区域划分及内存溢出
- JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释
- (一)JVM内存区划分
- JVM的内存区域划分
- jvm-内存划分
- jvm内存划分与GC工作机制
- JVM内存划分
- JVM的内存区域划分,对象实例化分析
- 浅析JVM内存区域的划分
- JVM内存区域划分(JDK6/7/8中的变化)
- JVM内存区域划分详解
- JVM的内存区域划分
- JVM的内存区域划分
- JVM内存的划分及职能(各种变量所存储得位置)
- JVM 深入笔记(1)内存区域是如何划分的?
- JVM的内存区域划分
- JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释
- JVM的内存划分
- JVM的内存区域划分