java虚拟机-运行时内存

jvm内存分布图

  • 线程独有内存:程序计数器,虚拟机栈,本地方法
  • 非线程独有:方法区,堆
  1. 程序计数器:用于记录当前线程的字节码行数,是线程独有,该内存区域是Java虚拟机唯一没有规定任何OutOfMemoryError的区域。
  2. 虚拟机栈:用于存储局部变量,是线程独有,局部变量是在编译的时候已经确认后,方法运行时候的栈是已经确认好的。虚拟机栈规定了2种异常情况,一种是线程请求栈的深度大于虚拟机栈所允许的深度,这时候将会抛出StackOverflowError异常,如果当Java虚拟机允许动态扩展虚拟机栈的时候,当扩展的时候没办法分配到内存的时候就会报OutOfMemoryError异常。
  3. 本地方法栈:与虚拟机栈类似,只是本地方法执行native方法。
  4. 堆:存储所有线程的共享对象实例,可以动态扩展,当没有内存进行扩展的时候,堆抛出OutOfMemoryError异常。
  5. 方法区:这个也是线程共享的内存区域,存储被虚拟机加载的类信息、常量、静态变量即时编译的代码数据等。方法区一般很少回收,经常被称为永久区,但也是可以被回收,主要针对常量与类型的卸载。在方法区也规定当方法区无法满足内存分布的时候,将会抛出OutOfMemoryError异常

  6. 虚拟机堆栈参数设置     

  7.   -Xss 每个栈的大小

      -Xms 初始化堆大小,-Xmx 最大堆大小

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章