• java 内存结构



    一、JVMJava Virtual MachineJava虚拟机)的缩写,不同平台上的JVM都是不同的,但向编译器提供同样的接口,编译器面向JVM生成JVM能够理解的.class字节码文件,相应平台的JVM对.class文件进行解释运行生成与该平台相应的机器码,JVM屏蔽了与详细操作系统平台相关的信息。在java跨平台实现中起到转换器的作用。


    二、Java虚拟机包含一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域


    1、 指令集

    。。。

    。。

    2、 寄存器

    用于保存系统状态和处理器所需信息。如指令、计数存储

    3、 java栈(JAVA  STACK):编译时由JDK编译器为方法分配

    aJava栈是JVM存储信息的主要方法。当JVM得到一个Java字节码应用程序后。便为该代码中一个类的每个方法创建一个栈框架(分配内存空间。执行期间不会改变内存大小)。以保存该方法的状态信息。栈是线程私有的、存储局部变量表、操作栈、动态链接、方法的状态信息、出口(非方法字节码)

    b【局部变量表:局部变量表存放了编译期可知的各种基本数据类型(booleanbytecharshortintfloatlongdouble)、对象引用等】

    cJava 虚拟机规范中,对这个区域规定了两种异常状况:假设线程请求的栈深度大于虚拟机所同意的深度,将抛出StackOverflowError 异常;假设虚拟机栈能够动态扩展。当扩展时无法申请到足够的内存时会抛出OutOfMemoryError 异常。

    dStack的限制大小着线程的数量,通过设置-Xss參数决定Stack大小,过大过小都easy导致stack泄露

    4、 堆(heap):执行时由JVM解释器为对象实例分配

    aJava的堆内存是一个执行时数据区。用以保存类的实例。JVM的对内存中存储着正在执行的应用程序所建立的全部对象(数组也分配在此区域),是垃圾回收器GC主要管理的区域,是线程共享的

    b)通过设置-Xmx-Xms 控制堆内存大小。假设在堆中没有内存完毕实例分配。而且堆也无法再扩展时。将会抛出OutOfMemoryError 异常。

     

    5、 存储方法域(method area 存储区或方法区):执行时由JVM解释器分配,依赖于详细平台的实现方式。

    aJVM有两类存储区:常量缓冲池和方法区。

    常量缓冲池用于存储类名称、方法名称和字段名称、静态变量以及串常量。

    方法区则用于存储Java方法的字节码、即时编译器编译后的代码

    b)当此区域无法满足内存分配需求时。 将抛出OutOfMemoryError 异常。

  • 相关阅读:
    简单区分Vmware的三种网络连接模式(bridged、NAT、host-only)
    linux创建账户并自动生成主目录和主目录下的文件
    EF 通用数据层类
    html在线美化网站
    图片在页面中居中显示
    __dopostback的用法
    rdlc报表集锦
    .NET开源免费的功能强大控件库
    使用webclient上传下载实例
    消息队列将并发变串行
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/6849903.html
Copyright © 2020-2023  润新知