jvm虚拟机阅读笔记
在jvm用信运营内存中包括了以下几部分:

  1. 程序计数器(线程私有)
    程序计数器是内存装很小的一块,展现方式有两种:一种是这种方法开始的偏移量,也就是betecode index,简称bci,另一种是Java执行的字节码指令在内存中的地址,也就是bytecode point ,简称bcp。
    在jvm的解释器运行的时候,通过程序计数器来取出下一条指令,用来执行java程序的分支、循环、跳转、异常处理、线程恢复等基础功能。
    在多线程环境中,每一个线程都拥有一个单独的程序计数器,用来记录当前线程执行的字节码的位置,我们称其为独立内存。当线程切换的时候,通过当前的程序计数器来恢复线程运行时的位置。在多线程环境下,线程之间共享的数据在独立的内存中存储的都是主内存的数据的备份。在操作数据的时候都是操作的是私有内存中的数据的备份。为了使独立内存的数据与主内存的数据中心同步,可以通过volitile关键字来使数据进行同步。但是带关键字并不能保证多线程之间的数据安全。
    在程序计数器中执行的是Java方法,那么指向的是Java方法字节码的起始位置,如果是指向的本地方法,那么它是一个空(undefind)。因此即使出现了类似死锁的问题也不会抛出oom,因为程序计数器锁占用的内存是固定的。并且也不会超出当前程序计数器的大小。因此程序计数器是jvm中唯一一个不会内存溢出的区域。
  2. 本地方法栈(线程私有)
  3. 虚拟机栈(线程私有)
  4. java堆(共有)
  5. 方法区(元空间)(共有)

相关文章: