zoukankan      html  css  js  c++  java
  • JVM内存管理基础概念

    1.内存的不同形态

    物理内存

    虚拟内存

    2.内存的使用形式

    内核空间

    用户空间

    3.java虚拟机运行时数据划分

    PC寄存器:保存当前程序运行时的内存地址.

    Java栈:总是和线程关联,每个线程拥有一个java栈,每个栈会有多个栈帧,栈帧与方法关联起来,每运行一个方法就会创建一个栈帧.

    java堆:存储java对象的地方

    JVM方法区:存储类结构信息,存储信息相对比较稳定,很少会被GC回收器回收.

    运行时常量池:Runtime Constant Pool代表运行每个class文件中的常量表(编译期的数字常量,方法或者域引用)

    本地方法栈:为Jvm运行Native方法准备的空间,因为很多本地方法都是由C语言实现的,所以又叫做C栈.

    4.内存分配策略

    4.1操作系统内存分配策略

    静态内存分配:程序编译前就确定了每个数据在运行时的存储空间需求.

    栈内存分配:也称动态内存分配

    堆内存分配:最自由的一种内存分配.

    4.2Java内存分配策略(堆用来存储对象,栈用来执行程序)

    栈内存分配

    创建一个线程,就会创建一个java栈,一个线程的方法的调用和返回对应java栈的压栈和出栈.栈中主要存放一些基本类型的数据和对象句柄(引用).

    优点:存取速度比较快,仅次于寄存器,栈数据是共享的.

    缺点:栈中的数据大小和生命周期都是确定的,也导致缺乏其灵活性

    堆内存分配

    java堆是一个运行时数据区,每个实例对应一个堆.堆是由垃圾回收机制来负责的.

    优点:堆的优势就是可以动态的分配内存大小

    缺点:由于要在运行时分配内存,所以存取速度较慢.

  • 相关阅读:
    函数
    流程控制
    条件判断
    运算符
    shell中的变量
    ubuntu终端命令启动matlab方法
    tensorflow/core/kernels/conv_ops.cc:659] check failed: stream->parent()->getc
    ImportError: libcudnn.so.5: cannot open shared object file: No such file or directory
    ubuntu 中文变成小方框 口
    ubuntu安装matplotlib一些坑
  • 原文地址:https://www.cnblogs.com/fxust/p/7273311.html
Copyright © 2011-2022 走看看