java中的内存模型

参考文档,Java编程思想、面试详解:http://www.cnblogs.com/java1024/p/7685400.html

一、寄存器、位(bit)、字节(byte)

       寄存器:

                   概念:最快的存储单元,处于处理器内部,数量有限,按需分配,不能直接控制;

                   大小:和系统有关,32位系统就是寄存器的大小位32位,64位系统指的就是寄存器的大小为64位;

       字节:一位等于8字节,存储空间最小的计量单位,字母与数字一个占用一个字节,汉字一个占用俩个字节;

       位:内存中最小的数据单元,只能为0或者1;
二、java的内存模型

          JVM虚拟机规范中将Java运行时数据分为6种

          1、什么是JVM?

                JVM及JAVA字节码代码运行的平台,将字节码文件翻译为对应运行平台的机器指令(也是JVM的与平台无关性)

          2、jdk、jre、jvm的分类;

               jvm:java虚拟机,java字节码文件的运行平台;

               jre:java的运行环境,由jvm、java自带的类库组成;

               jdk:java的开发工具包,由编译、运行环境、以及丰富的类库组成;

               三者之间的关系:jdk包含jre包含JVM;

          3、运行时的数据分类:

              1)、程序计数器(程序计数寄存器):

                   定义:一种数据结构:用于保存当前正在执行的程序的内存地址;(与线程相关)

                   作用:每个线程都具有独立的程序计数器,且互不影响,多线程的实现及为轮流切换并分配处理器的执行时间来实现;

                           ps:若为native修饰的方法,计数器值为空(undefined);

              2)、JVM的栈:

                     定义:

                          (1)类似于C中的栈;

                          (2)内存地址不连续;

                          (3)每个线程都具有自己的栈,线程私有的,与线程的生命周期相同;

                          (4)作用:(相较于局部变量而言)基本类型的变量,(相较于局部变量而言)引用类型变量的引用,以及函数调用的现场,操作栈

                                    ps:操作栈:https://blog.csdn.net/luzhensmart/article/details/81349398

                          (5)栈中存储的是栈帧(stackFrame)

                                          StackFrame组成:局部变量(及方法中的所有的局部变量)、执行环境、操作数栈;

                                                                       执行环境:解析器对于java字节码解析过程中的重要信息,例如上次调用的方法、                                                            局部变量的指针、操作数栈的栈顶以及栈顶指针;

                                                                       操作数栈:存储运算所需要的操作数和结果;

                                          生命周期:在方法调用前被创建,且在某一个线程中,某个时间点只有一个栈在执行(currentFrame);

                         (6)栈的分类:固态和动态。动态栈按照线程的需要分配

                             ps:(1)原理:位于RAM(随机访问存储区),通过堆栈指针的上下移动来决定是分配内存还是释放内存(向上移动为释放,向下移动为分配新的内存),且在java中要将其放在堆栈内存中,则必须明确说明其生命周期,及在堆栈中的信息都是有确切的生命周期的,这也是其缺点,不够灵活;

                                 (2)  函数调用的现场:就是运行当前函数的地方也在堆栈中;

             3) 本地方法栈:为native修饰的方法所服务

                           ps:什么是Native:与abstract类似,只写方法名,不写方法体,区别:native修饰的方法是有实现体的,只不过不是java代码实现的;

            4)java堆(通用的内存池(RAM),存放java所有的对象(引用对象)):

                     (1)作用:用来存放对象的信息,引用类型变量;

                     (2)与栈的区别:除了存储数据的卡类型不同外,栈是运行时单位,解决程序的运行问题,堆是存储单位,解决数据存储;

                     (3)特点:所有的线程所共享的;gc器会监视所有的new的对象,并且辨别那些不需要使用的对象,然后释放内存,不需要手动调用;

                    ps:数组也是引用对象类型

            5)方法区:各个线程的共享区域(与堆类似);

                          作用:存储虚拟机加载的类的信息、常量、静态变量、编译后的代码;

            6)运行时常量池:

                 方法区的一部分,存储常量的地方(编译时的数字常量,方法或者域的引用);

 

 

ps:非RAM内存;

    概念:存在于程序之外,不受任何程序的控制;例子:流对象与持久化对象;

 

 

        

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值