Java内存管理个人理解

来源:互联网 发布:淘宝怎么找类似店铺 编辑:程序博客网 时间:2024/05/17 08:58

1、Java的JVM从线程的角度来讲分为线程共享区和非线程共享区(即:线程私有区)。

     线程共享区包含两个部分:Java方法区和Java堆。

     线程私有区包含三个部分:程序计数器,Java栈,本地方法。

    线程使用区的内容随着线程的结束而消失,线程共享区执行Java的垃圾回收,主要针对的是Java堆。

         方法区域内存回收的目的主要针对常量池的回收和类的卸载。

2、Java方法区存储的内容是:

         加载类的类定义数据,常量静态变量。运行时常量池。

     Java堆存储的内容是:JVM的内存数据区,JVM启动时候创建,专门用来保存对象的实例

        Java堆中分配一定的内存来保存对象实例,实际上也只是保存对象实例的属性值,属性的类型和对象本身的类型标记。

       对象实例在 Java堆中分配好以后,需要在Stack中保存一个4字节的Heap 内存地址,用来定位该对象实例在Heap 中的位置,便于找到该对象实例,是垃圾回收的主要场所。java堆处于物理不连续的内存空间中,只要逻辑上连续即可。

   Java栈存储的内容是:

     Java栈也叫栈内存,是在线程创建时创建,它的生命期是跟随线程的生命期,线程结束栈内存也就释放,对于栈来说不存在垃圾回收问题,只要线程一结束就结束。

      内容是:方法参数和局部变量操作栈,动态链接、方法出口。

3、Java的堆垃圾回收机制

        Java堆的内存分为4大块,1、创建区:即对象刚刚创建的区域,2、年轻区(2块区域):即经历过第一轮垃圾回收后还留存下来的对象会被转移到该区域,3、老年区:即在年轻区内经历过多次垃圾回收后还留存下来的对象会被转移到该区域。


原创粉丝点击