• JVM内存区域类别


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

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

    程序计数器: 

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

    虚拟机栈:

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

    本地方法栈:

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

    堆:

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

    方法区:

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

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

    直接内存:

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

  • 相关阅读:
    使用迭代器模式批量获得数据(C#实现)
    如何从技术上预防抢票软件刷屏
    如何用Tesseract做日文OCR(c#实现)
    我的.net开发百宝箱
    程序员必备基础:Git 命令全方位学习
    Java 异常处理的十个建议
    50道Java集合经典面试题(收藏版)
    记一次接口性能优化实践总结:优化接口性能的八个建议
    100道MySQL数据库经典面试题解析(收藏版)
    800+Java后端经典面试题,希望你找到自己理想的Offer呀~
  • 原文地址:https://www.cnblogs.com/2015zzh/p/4789568.html
Copyright © 2020-2023  润新知