zoukankan      html  css  js  c++  java
  • Java内存区域与内存溢出异常 -- 运行时数据区域

    程序计数器

    • 是一块较小的内存空间,取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复都是依赖这个计数器完成
    • 每条线程都有一个独立的程序计数器,各线程计数器互不影响,独立存储,这类内存区域称为"线程私有"内存

    JAVA虚拟机栈

    • 线程私有,生命周期与线程相同
    • 基本数据类型,boolean、byte、char、short、int、float、long、double
    • 对象引用,reference类型,returnAddres类型(指向了一条字节码指令的地址)
    • 64位的long和double类型的数据会占用2个局部变量空间(Slot)

    本地方法栈

    • 虚拟机栈是为虚拟机执行java方法服务
    • 本地方法栈为虚拟机使用的Native方法服务

    Java堆

    • 线程共享的一块内存
    • 垃圾收集器管理的主要区域,也称为"GC堆"(Garbage Colected Heap)
    • Java堆物理上可以不连续,逻辑上是连续的即可

    方法区

    • 与java堆一样,各个线程共享的内存区域,又称为Non-Heap(非堆)

    运行时常量池(Runtime Constant Pool)

    • 方法区的一部分
    • Class常量池存放编译期生成的各种字面量和符号引用
    • 运行时常量池相对于Class常量池另一个重要特征是具备动态性

    直接内存

    • 不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域
    • JDK1.4中引入 NIO(New Input/Output类),引入了一种基于通道(Channel)与缓冲区(Buffer)的IO方式
    • NIO可以使用Native函数库直接分配堆外内存,然后通过Java堆中的DirectByteBuffer对象作为这块内存的引用
    • 本机直接内存的分配不会受到Java堆的大小限制
  • 相关阅读:
    如何用VSCode编写Java程序
    使用Xcode + Python进行IOS运动轨迹模拟
    聚类(Clustering)
    异常值(outlier)
    线性回归(regression)
    自适应增强(Adaptive Boosting)
    决策树(Decision Trees)
    支持向量机(SVM)
    朴素贝叶斯(Naive Bayesian)
    ItChat与图灵机器人的结合
  • 原文地址:https://www.cnblogs.com/YC-L/p/13159583.html
Copyright © 2011-2022 走看看