JVM内存结构

JVM栈

jvm栈是为java服务的

  1. 栈的作用: 存放基本类型变量 , 局部变量 , 对象的引用 
  2. 栈的特点如下:

 1.自动分配与回收内存

 2.是一块连续的内存的区域,有大小限制,如果超过了就会栈溢出,并抛出栈溢出的异常StackOverflowErro;

 3.线程私有

栈帧 : 

是java方法的内存模型 , 每个方法执行都会创建一个栈帧 , 入栈; 方法调用结束 , 出栈

栈帧堆满了栈会报异常, 如下面代码:

public class Test01 {
    private static int stacklength = 0;
    
    public static void main(String[] args) throws Throwable {
        
        try {
            Test01 t = new Test01();
            t.stackOverFlow();
        } catch (Throwable e) {
            System.out.println(stacklength);
            throw e;
        }
    }
    
    //递归调用
    public static void stackOverFlow() {
        stacklength++;
        stackOverFlow();
    }
}

本地方法栈

为native方法服务

堆分为新生代和老年代 ,  又可细分为 Eden空间、From Survivor空间、To Survivor空间 ; 在运行时动态分配内存 

  1. 堆的作用 : 存放new创建的对象和数组
  2. 堆的特点如下: 
1.是不连续的内存区域, 当堆无法分配空间时,抛出OutOfMemoryError
2.由自动垃圾回收器来管理

3.线程共享

方法区

可以看做是堆内存的扩展

  1. 方法区的作用 : 存储常量 , 类信息 

程序计数器

  1. 程序计数器的作用 : 是行号指示器, 记录当前线程字节码的执行行数
  2. 特点如下:
1.线程私有
2.对应java方法, 记录的是指令的地址; 对于native方法, 记录器的值为0

 

posted @ 2017-05-23 22:37  liuconglin  阅读(139)  评论(0)    收藏  举报