zoukankan      html  css  js  c++  java
  • Java数据类型和内存分配

    Java的数据类型两大类:

    1、基本数据类型:定以后直接分配内存空间,存储在栈中。

    又可细分为:

    数值型:整数byte/short/int/long及浮点float/double;

    字符型char;

    布尔型boolean;

    2、引用数据类型:栈中存储引用指针地址,指向实际存放的堆;

    又可分为:

    类class;

    接口interface;

    数组array;



    =================================================================

    Java内存管理与数据类型关系 学习



    根据上面,需要了解Java内存,以下内容斜体字摘至:

    http://www.cnblogs.com/whgw/archive/2011/09/29/2194997.html


    Java内存分两类:栈内存和堆内存。

    简单说,程序操作基本数据类型是直接操作栈内存中的数据,操作引用数据类型是通过栈中的地址访问其指向的堆内存。而管理堆内存由java 的虚拟机负责。


    堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对象,引用变量相当于为数组或者对象起的一个别名,或者代号。引用变量是普通变量,定义时在栈中分配内存,引用变量在程序运行到作用域外释放。而数组&对象本身在堆中分配,即使程序运行到使用new产生数组和对象的语句所在地代码块之外,数组和对象本身占用的堆内存也不会被释放,数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。这个也是java比较占内存的主要原因


    内存三大分配策略:静态、栈、堆,其实质是对内存分配要求的几种适应。

    静态:程序运行前就知道需要多少的内存空间大小;

    栈:程序运行前并不清楚实际需要多大的存储空间,只有到运行的时候才能够知道,但是规定在运行中进入一个程序模块时,必须知道该程序模块所需的数据区大小才能够为其分配内存,而基本数据类型符合这类要求。栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。

    堆:专门负责在编译时或运行时模块入口处都无法确定存储要求的数据结构的内存分配,比如可变长度串和对象实例,堆由大片的可利用块或空闲块组成,堆中的内存可以按照任意顺序分配和释放。

    ”堆主要用来存放对象的,栈主要是用来执行程序的“

    因此,java中在函数中定义的一些基本类型的变量和对象的引用变量(其地址)都在函数的栈内存中分配。


    =========================================================




  • 相关阅读:
    leetcode教程系列——Binary Tree
    《Ranked List Loss for Deep Metric Learning》CVPR 2019
    《Domain Agnostic Learning with Disentangled Representations》ICML 2019
    Pytorch从0开始实现YOLO V3指南 part5——设计输入和输出的流程
    Pytorch从0开始实现YOLO V3指南 part4——置信度阈值和非极大值抑制
    Pytorch从0开始实现YOLO V3指南 part3——实现网络前向传播
    Pytorch从0开始实现YOLO V3指南 part2——搭建网络结构层
    Pytorch从0开始实现YOLO V3指南 part1——理解YOLO的工作
    让我佩服的人生 文章
    win8.1配置cordova+ionic等一系列东西
  • 原文地址:https://www.cnblogs.com/windanchaos/p/6398822.html
Copyright © 2011-2022 走看看