• JVM内存区域类别


    以一个图整体概括java虚拟机运行时数据区(引自JVM高级特效与最佳实践)

    从图中我们可以看出,分为方法区,虚拟机栈,本地方法栈,堆,程序计数器。

    程序计数器: 

      程序计数器主要作用是用于记录程序的执行位置,即该线程执行到那个指令。对于多线程,经常会有上下文切换,那么每个线程必须有它独有的程序计数器,也就是说程序计数器是线程私有的模块。有一种情况,当执行本地方法时。程序计数器为空(因为计数器记录的是编译后的java指令,本地方法不在内).

    虚拟机栈:

      我们经常把java内存分为堆和栈,栈指的就是虚拟机栈。虚拟机栈是线程私有的,与线程的生命周期相同。描述的是java方法执行的内存模型:描述从一个方法的入口,局部变量,操作,动态链接,以及出口的一个过程。虚拟机栈存放了了boolean,int,double等基本类型的数据以及对象的引用。

    本地方法栈:

      本地方法栈和虚拟机栈相似,虚拟机栈执行的是虚拟机代码,本地方法栈执行的是native方法。

    堆:

      堆是虚拟机中内存最大的一块区域,主要储存java对象。是被所有线程共享的区域。同时也是垃圾回收器的主要区域,堆中分为几个部分,比如初生代,年老代等,主要是方便GC回收。

    方法区:

      方法区放到主要内容是类的加载信息,常量,静态变量。一般不受GC管理,中间储存常量的叫常量池。

    除此之外,还有一个内存叫直接内存。

    直接内存:

      直接内存并不是java虚拟机内存的一部分,不受java堆大小的限制。直接与内存交互,比如java.nio的内存映射,就是用的直接内存,速度比java.io要快。当然太大也会引起内存泄漏,毕竟和机器的内存有关。

  • 相关阅读:
    win下的PG12安装plpython3u
    IDEA中的代码块批量修改
    Python的32和64位共存在win
    数据库表转化为model
    国标查询
    C#DataGridview 绑定与数据转化
    fastadmin 点击checkbox 或反选checkbox 统计某个字段的值
    [Mysql] 两段提交
    Windows docker环境安装
    vue2使用echarts内置地图实现点击事件
  • 原文地址:https://www.cnblogs.com/2015zzh/p/4789568.html
Copyright © 2020-2023  润新知