java学习笔记(4):内存管理
在内存的方面,Java自身带有垃圾运行机制,表面上好像我们可以忽略不计,但是如果我们对其加以理解的话,说不定有时会达到事半功倍的效果。
所以自己花些时间整理一些此类的资料。
一.基本概念
1.栈
对于栈的理解,可以把它想象成一个只有一个入口的空桶,有一个原则就是“先进后出”原则,现在往里面放东西,比如放进的顺序是P,I,N,S,I,L,Y,等下如果要把字母拿出来的话,顺序就变成了Y,L,I,S,N,I,P,可以想象的话,就简单很多了。

在Java程序中,栈的作用主要是存放由基础类型生成的变量,像int,char等这些基本类型,还有一个作用是存放对象的引用变量,但是这里不存放生成的对象。
2.堆
堆在Java中的作用,就是存放由程序new出来的对象和数组。比如当把栈中存放的一个变量赋值时,这个值就被放在了堆中,简单来说,程序的执行,就是栈和堆的相互关联。
3.数据共享
代码:int a = 3; int b = 3;
处理的时候,先处理a变量。程序在栈中寻找有没有变量a,没有的话就创建一个引用变量a,然后在堆中找有没有3这个值,没有的话就创建分配内存创建3的空间,a指向3;接下来处理b = 3,栈中创建b,然后在堆中找寻有没有3,有了,就直接指向3这个地址了。这样就出现了a,b共用一个地址的情况了,这就是所谓的数据共享了,这样做的话就节省了内存的空间,提高了Java的运行质量。
但需要注意的是,上面所描述到的只是堆中的数据共存,也是只有堆中的数据才能实现共享,因为栈中的数据是线程私有的,不能实现共享。
4.静态内存
静态内存,指的是确定内存空间大小的内存,所以这样的内存一开始的时候内存就可以直接根据他的大小直接分配空间了。
5.动态内存
之所以称之为动态,就是他的大小是随机的,要用到多少就分配多少,视情况而定,所以,程序一开始运行的时候摸不着头脑,只能在他要用到的时候才能达到一个确定的值,随即才分配内存给他。
二.内存机制
1.基本理解:可以想象成C语言中的指针来看,从栈中找到变量,指向变量所对应的地址,也就是他们的值。

在分配上,静态变量直接在类的加载中就分配好内存位置给他们,但是动态变量的分配上,就只是在要用到的时候才分配到的。

java学习笔记(4):内存管理的更多相关文章
- linux kernel学习笔记-5内存管理_转
void * kmalloc(size_t size, gfp_t gfp_mask); kmalloc()第一个参数是要分配的块的大小,第一个参数为分配标志,用于控制kmalloc()的行为. km ...
- XV6学习笔记(2) :内存管理
XV6学习笔记(2) :内存管理 在学习笔记1中,完成了对于pc启动和加载的过程.目前已经可以开始在c语言代码中运行了,而当前已经开启了分页模式,不过是两个4mb的大的内存页,而没有开启小的内存页.接 ...
- Cocos2D-X2.2.3学习笔记3(内存管理)
本章节介绍例如以下: 1.C/C++内存管理机制 2.引用计数机制 3.自己主动释放机制 1.C/C++内存管理机制 相信仅仅要懂oop的都知道NEW这个keyword吧,这个通俗点说事实上就是创建对 ...
- COCOS学习笔记--Cocod2dx内存管理(三)-Coco2d-x内存执行原理
通过上两篇博客.我们对Cocos引用计数和Ref类.PoolManager类以及AutoreleasePool类已有所了解,那么接下来就通过举栗子来进一步看看Coco2d-x内存执行原理是如何的. / ...
- 嵌入式linux学习笔记1—内存管理MMU之虚拟地址到物理地址的转化
一.内存管理基本知识 1.S3C2440最多会用到两级页表:以段的方式进行转换时只用到一级页表,以页的方式进行转换时用到两级页表.页的大小有三种:大页(64KB),小页(4KB),极小页(1KB).条 ...
- Linux内核学习笔记——内核内存管理方式
一 页 内核把物理页作为内存管理的基本单位:内存管理单元(MMU)把虚拟地址转换为物理 地址,通常以页为单位进行处理.MMU以页大小为单位来管理系统中的也表. 32位系统:页大小4KB 64位系统:页 ...
- ios学习笔记之内存管理
一,内存管理类型定义 1,基本类型 任何C的类型,eg: int,short,char,long,long long,struct,enum,union等属于基本类型或结构体 ...
- arm-linux学习笔记3-linux内存管理与文件操作
配置好linux系统之后需要vim配置一下,有助于我们的编程,主要的配置如下 在/etc/vim/vimrc文件中 "显示行号 set number "自动缩进 set autoi ...
- 《C#高级编程》学习笔记----c#内存管理--栈VS堆
本文转载自Netprawn,原文英文版地址 尽管在.net framework中我们不太需要关注内存管理和垃圾回收这方面的问题,但是出于提高我们应用程序性能的目的,在我们的脑子里还是需要有这方面的意识 ...
- Linux System Programming 学习笔记(九) 内存管理
1. 进程地址空间 Linux中,进程并不是直接操作物理内存地址,而是每个进程关联一个虚拟地址空间 内存页是memory management unit (MMU) 可以管理的最小地址单元 机器的体系 ...
随机推荐
- JS判断字符串是否为空、过滤空格、查找字符串位置等函数集
这是一个由网上收集的JS代码段,用于判断指定字符串是否为空,过滤字符串中某字符两边的空格.查找指定字符串开始的位置.使用IsFloat函数判断一 个字符串是否由数字(int or long or fl ...
- angular controller js 压缩后报错解决方案
简单介绍下ng-annotate这个项目,这个项目正好提供了gulp的插件. gulp配置文件: var gulp = require('gulp'); var ngAnnotate = requir ...
- Spark 启动过程(standalone)
Spark启动过程 正常启动Spark集群时往往使用start-all.sh ,此脚本中通过调用start-master.sh和start-slaves.sh启动mater及workers节点. 1. ...
- Linux查看机器是多少位
命令: file /bin/ls或者file /sbin/init 示例: 如上所示,我的机器是32位的.
- 通过Shell和Redis来实现集群业务中日志的实时收集分析
http://www.linuxidc.com/Linux/2013-05/83935.htm
- JAVA构造方法,继承关系和SUPER关键字
SUPER可调用父类的构造方法,但要注意默认调用和参数调用. 同时,在继承类时,可以用SUPER调用其它非构造方法哟. class Test extends Object{ public Test() ...
- rsyslog Properties 属性:
rsyslog Properties 属性: 数据项 在rsyslog 是被称为 "properties". 它们可以有不同的源, 最重要的是 那些来自接收的消息,但是还有其他. ...
- 自动删除n天前日志
自动删除n天前日志 linux 是一个很能自动产生文件的系统,日志.邮件.备份等.虽然现在硬盘廉价,我们可以有很多硬盘空间供这些文件浪费,让系统定时清理一些不需要的文件很有一种 爽快的事情.不用你去每 ...
- HDOJ 1061 Rightmost Digit(循环问题)
Problem Description Given a positive integer N, you should output the most right digit of N^N. Input ...
- 求一个数组中第K小的数
面试南大夏令营的同学说被问到了这个问题,我的第一反应是建小顶堆,但是据他说用的是快排的方法说是O(n)的时间复杂度, 但是后来经过我的考证,这个算法在最坏的情况下是O(n^2)的,但是使用堆在一般情况 ...