Java教程

JVM虚拟机内存模型简单认识

本文主要是介绍JVM虚拟机内存模型简单认识,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

JVM内存模型

  Young(年轻代)
  Tenured(老年代)
  Perm(永久代)
Young(年轻代)可以分为Eden和两个Survivor(from,to)。新的实例先放到Eden区,Survivor作为Young和Tenured的缓冲,可以向Tenured转移活动的对象实例.

Tenured老年代存储的是生命周期比较久的实例对象,对象照样会被回收
堆是Young和Tenured共同组成的(默认新生代和老年代内存倒下是1:2)
Perm属于非堆内存,属于方法区用于存放加载的class信息,不会触发回收机制

JVM结构

JVM内部分为堆、方法区、虚拟机栈、本地方法栈、程序计数器PC。

1.方法区(静态区):
方法区(Method Area)包类信息(方法、字段、接口、修饰符、类名)和静态变量,方法区是线程共享。当你创建或者访问class时使用的是同一个class类信息。方法区里面还存储了运行时常量池,保存了程序编译器生成的各种字面量和符号引用。

2.堆:
堆(Heap)包含了实例对象和数组对象,堆由垃圾回收器自动回收,堆是线程共享的,堆的内存空间既可以固定大小也可以动态地调整。
堆分为两大块新生代和老年代,对象chu产生之初在新生代,随后经过计数器到达阈值,进入老年代,并且老年代还存储新生代比较打的内存

3.虚拟机栈
虚拟机栈(VM Stack)生命周期和线程一样,线程可以共享,线程A访问线程B代入参数可以达到共享,存放方法内的变量和实例当线程执行完之后清空,不使用垃圾回收机制进行回收。

4.本地方法栈
本地方法栈(Native Method Stack)和虚拟机栈(VM Stack)是一样的,不同之处在于,调用本地方法栈不归虚拟机管理,在运行当中可能会用到本地方法栈的操作,比如需要C函数,那么会使用本地方法栈去调用,之后也会通过C函数回调java方法。

5.程序计数器
程序计数器(Program Counter Register)是一块较小的内存空间,可以把他看作当前线程执行的字节码行号指示器,就是说程序计数器里面记录的是正在执行那一条字节码指令的地址。
在多线程的情况下,程序计数器用于记录当前线程执行的位置,当线程切换回来时知道上次运行到哪里了

这篇关于JVM虚拟机内存模型简单认识的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!