zoukankan      html  css  js  c++  java
  • 虚拟机内存结构

    程序计数器:
            程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。
            如果线程正在执行一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是native方法,这个计数器值为空。
    虚拟机栈:
            每个方法在执行的同时都会创建一个栈桢,栈桢用来存储局部产量、操作数栈、动态链接、方法出口等信息。每个方法从开始到结束的过程,就对应着栈桢在虚拟机栈中入栈到出栈的过程。局部产量在编译Java时就会分配好内存,long和dubble这种64位的基本数据类型会分配2个局部产量空间,其他分配1个。
            栈深度是栈桢中的可用内存大小,如果线程请求的栈深度大于虚拟机所允许的深度,会抛出StackOverflowError。
     
    本地方法栈:
            本地方法栈和虚拟机栈的作用差不多,区别是虚拟机栈为虚拟机执行的Java方法服务,而本地方法栈是为虚拟机使用的Native方法服务。
     
    Java堆:
            Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建,几乎所有的对象实例都存放在这里。
            JAVA堆是垃圾回收器管理的主要区域,从内存回收的角度看,由于收集器基本都采用分代收集算法,所以Java堆可以细分为:新生代和老生代,再细致一点可以分为Eden空间、Form Survior空间、To Survior空间等。
            虚拟机大小可以通过-Xmx -Xms控制
     
    方法区:
            方法区与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据
    运行时常量池:
            方法区的一部分,用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。运行时常量池具备动态性,可以在运行期间使用String.intern()方法将新的常量放入池中
     
  • 相关阅读:
    动态生成java、动态编译、动态加载
    boostrap标签
    Java后端WebSocket的Tomcat实现
    编程过程与规范
    敏捷开发过程
    软件过程模型
    软件过程
    ISO9126 质量模型
    手机淘宝架构演化实践
    蒋勋:知识分子应具备怎样的美学修养
  • 原文地址:https://www.cnblogs.com/gqymy/p/10971677.html
Copyright © 2011-2022 走看看