java JVM运行时数据区 ------来自深入理解java虚拟机一书......
程序计数器:他在里面应该是最小的内存块了,他是当前线程所执行的字节码的执行指示器,字节码解释器就是通过这个计数器来选取下一条执行命令的 是每个线程私有的 比如多线程 一个线程冻结 醒来之后会接着没完成的工作继续 就是他来控制的
VM stack 栈 :存储基本类型和对象引用,存储速度仅次于存储器,属于每个线程私有,基本类型都占一个局部变量空间;long double因为64位 占两个
Native Method Stack :和VM Stack的作用相似,只是服务的对象不同,VM Stack服务Java方法,它服务JVM使用到的本地方法
Heap 堆:最大的一块内存块,所有线程共享,对象实例 数组都存在这里;是GC(垃圾管理机制)的主要管理区;
如果从内存回收角度看 Heap 细分为新生代 老生代 新生代就是刚实例的对象实例存储 当内存满了旧的对象就会进入老生代;一般是老生代被回收;
Method Area 方法区: jvm加载的类的信息 常量 静态变量 都在这里;也是线程共享的;
-----Java 虚拟机规定将它描述为一堆的一个逻辑部分,但他有个别名 Non-Heap 非堆 为的就是与堆区分开;
运行常量池:是方法区的一部分, class文件的版本 字段 方法 接口 等描述信息存在方法去区,而在编译期生成的各种字面量和符号引用就存在这里;它具备动态性 , 不一定要编译起才可以产生 ,在运行的时候 也可以人为加入 通过 String类的intern()方等;
内存分析也不是很深 也许有些地方理解错了 有看见的可以讲解下 其实每一段时间 回过头看那些概念 理论什么的都是不同的理解