细读JVM(01) ---------- Java内存区域

  Java虚拟机在运行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途以及创建和销毁的时间,有的区域随着Java虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而创建和销毁。
                        --摘自《深入理解Java虚拟机》

内存区域图示

程序计数器(program counter)

  学过线程的同学应该了解,Java的多线程是通过CPU不断在线程之间切换来实现的,那么我们不禁要问:当线程的指令并没有执行完毕,却因为时间片耗尽而失去了CPU使用权,又该如何从挂起的地方继续执行呢?关于这个问题,不得不提到一个概念,就是程序计数器(program counter)。
  JVM中通过程序计数器来记录当前字节码的执行位置,使已经挂起的线程重新获得CPU使用权后,依旧能够继续往下执行。讲解完了用途之后,我们总结一下程序计数器的几个特点:

  • 线程隔离性:每个线程都有一个自己的程序计数器,彼此隔离,互不影响。

  • 执行Native方法时,程序计数器值为空,原因是native方法是通过jni调用的C/C++库,与字节码无关。

  • 生命周期随着线程,线程启动而产生,线程结束而消亡。

  • 由于存储的是字节码地址,在创建时JVM就会为其分配一个足够大的内存,所以没有规定任何OutOfMemoryError。


    源码与字节码
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容