java内存机制解析(一)

阅读更多
最近在看一些java底层知识,搬了这么久时间的砖头,也是时候了解底层原理了。顺便做个笔记。
  java虚拟机运行时数据分区大概分为以下几个部分:
  堆区,方法区,虚拟机栈,程序计数器。(本地方法栈和本地库接口不讨论)
  程序计数器:java虚拟机是通过线程轮流切换并分配处理器执行时间来实现多线程的。因此在任何一个确定的时刻,一个处理器都只会执行一条线程的指令。 所以需要一个独立的程序计数器来记录当前执行的虚拟机字节码指令的地址。 线程私有。
  虚拟机栈: 描述java方法执行的内存模型,每个方法执行的同时都会创建一个栈帧用来储存局部变量,操作数栈,动态链接等等。 方法调用实际上是一个栈帧在 虚拟机栈从入栈到出栈的过程。 线程私有
  堆区: java虚拟机里面内存最大的一部分,也是程序员经常打交道的。 线程共有。
存放对象实例,垃圾回收主要管理区域。细分为:新生代,老生代。
  方法区:储存已加载的类信息,常量,静态成员,别名叫永久代。 线程共有
  直接内存: 非java虚拟机运行时的数据区,但是可以通过NIO来操作,不受java虚拟机内存分配影响,但是受到操作系统内内存和处理器寻址空间限制。
 

 

你可能感兴趣的:(java,虚拟机,JVM)