深入理解Java虚拟机学习总结(一) 自动内存管理机制

1、java技术体系:主要五类如下

     java语言    

    各种硬件平台上的java虚拟机

    class文件格式

    java  API类库

    第三方java类库

    java card

    JAVA ME(J2ME)

    JAVA SE(standard edition)

    JAVA EE(enterprise edition)

   java语言,java虚拟机,java  API类库:不准确的统称为JDK(java development kit):支持java程序开发的最小环境

   java虚拟机,java  API类库:不准确的统称JRE(java runtime environment):JAVA运行的标准环境

2、运行时数据区域

     方法区,  : 由所有线程共享

     虚拟机栈,本地方法栈,程序计数器线程隔离的数据区

     

    程序计数器:由于java虚拟机的多线程轮流切换并分配处理器时间的方式来实现的,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器(线程 私有的内存)

    虚拟机栈:java虚拟机栈也是线程私有的,它的生命周期与线程相同,虚拟机栈描述的是java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧用于存储局部变量表、操作栈、动态链接、方法出口等信息。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中的从入栈到出栈的过程。

              局部变量表:存放了编译期可知的各种基本数据类型、对象引用和returnAddress类型(指向了一条字节码指令的地址)。

             
两种异常情况:如果线程请求的栈深度大于虚拟机所允许的深度,抛StackOverFlowError

                                       如果虚拟机栈可以动态扩展,当扩展到无法申请到足够的内存时会抛OutOfMemoryError

    本地方法栈:虚拟机栈类似,为虚拟机使用到的native方法服务。

    java堆:堆是java虚拟机所管理的内存最大的一块,所有线程共享,在虚拟机启动时创建,用于存放对象实例(所有对象的实例以及数组都放在这里)。堆是垃圾收集器主要管   理的区域

    方法区:线程共享的内存区域,用于存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据

http://blog.csdn.net/zhushuai1221/article/details/51378474
http://www.cnblogs.com/java-my-life/archive/2012/08/01/2615221.html

    原文作者:java虚拟机
    原文地址: https://blog.csdn.net/zhengchao1991/article/details/51373367
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞