美文网首页
JAVA内存区域

JAVA内存区域

作者: IAmWhoAmI | 来源:发表于2016-07-07 14:38 被阅读21次
    Paste_Image.png

    运行时数据区

    要讨论的就是:运行时数据区。一般,我们叫它java内存。

    关于这个,普遍的图示是这样的:

    Paste_Image.png

    但是我觉得,应该画成:

    Paste_Image.png
    • 程序计数器:就是一个记录当前程序运行到哪一行
      占用空间小 (每次别人画那么大,很容易误会)

    • 方法区和堆

    #方法区
      存储了
    * 每个类的信息(包括类的名称、方法信息、字段信息)
    * 静态变量
    * 常量
    * 编译器编译后的代码等
    
    #堆
    Java中的堆是用来存储对象本身的以及数组(当然,数组引用是存放在Java栈中的)。
    
    堆是被所有线程共享的,在JVM中只有一个堆。
    
    垃圾回收机制,就是搞这个的。
    
    #个人观点
    
    堆和方法区,其实都是真正存放了信息的内存区域。
    真正存放信息的意思是,存放了有内容的数据,而不是指针或是引用等等。
    
    #差别是:
    方法区是给执行引擎用的。
    
    (额,也可能不是执行引擎,可能是虚拟机自己用,
    总之,是整个java的本身运行机制需要用到的信息,存在方法区。)
    
    而堆中的数据是给线程用的。
    (也就是我们业务逻辑关注的那部分数据。)
    
    
    • 本地方法栈和java虚拟机栈
    #java虚拟机栈
    
    就是我们常说的栈。用于存储,函数调用,而导致需要存储的内容。
    
    简单举个例子:
    函数A(){
        函数B();
    } 
    
    从函数A 跳到函数B,
    等函数B运行完成,需要回到函数B,
    那么怎么回去,就是从栈头pop信息出来。
    这个信息包括:各种数据信息:esp,dsp,pc 等等一系列的信息。
    都是由于函数调用导致的信息。具体要看看操作系统。
    
    
    #本地方法栈
    
    本地方法栈与Java栈的作用和原理非常相似。
    区别只不过是Java栈是为执行Java方法服务的,而本地方法栈则是为执行本地方法(Native Method)服务的。
    在JVM规范中,并没有对本地方法栈的具体实现方法以及数据结构作强制规定,虚拟机可以自由实现它。
    在HotSopt虚拟机中直接就把本地方法栈和Java栈合二为一。
    
    

    相关文章

      网友评论

          本文标题:JAVA内存区域

          本文链接:https://www.haomeiwen.com/subject/ekhljttx.html