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) 可以管理的最小地址单元 机器的体系 ...
随机推荐
- MOOTOOLS简单操作应用知识
在项目中我们经常需要用到全选/反选.等操作按钮. 基于mootools框架与jquery框架不一致.导致缓慢. $('chkall').addEvent('click',function(){ if( ...
- phpwind伪静态规则(IIS,Nginx,Apache)的介绍及代码
phpwind iis下伪静态规则[ISAPI_Rewrite]RewriteRule ^(.*)/(.*)-htm-(.*)-(.*).html$ $1/$2.php?$3=$4RewriteRul ...
- twsited(4)--不同模块用redis共享以及用web发送数据到tcpserver
上一章开头我们说,要连接之前flask系列文章中的用户,结果篇幅不够,没有实现. 今天我们把它实现一下.话说,不同模块之间,该如何联系在一起,通常都是mysql.redis.rabbitmq还有RPC ...
- RTC 之 ARM7 2136 ARM9之2410
RTC 的原理都是一样的,但计数过程中的计数换算却不相同: ARM9 直接出来的是BCD 码,也就是0x30 就是30秒,没有换算了,而ARM7则不同,他是直接计数的,十进制的30秒则是0x1E, ...
- ES6-2
向ES6看齐,用更好的JavaScript(二) 上一篇 中介绍了关于变量部分的新特性,本篇将从现有对象的拓展来展开介绍 1 增加了模板字符串 先看一下,ES6之前我们是如何实现输出模板的: do ...
- UITableView 小节-备
UITableView 让列表自动滑动(定位)到某一行 NSIndexPath*scrollIndexPath = [NSIndexPathindexPathForRow:10inSection:0] ...
- sqoop组件运行出错问题解决--com.mysql.jdbc.Driver
sqoop list-tables --connect jdbc:mysql://192.168.11.94:3306/huochetoudalian --username xxx -password ...
- 2014-07-28 使用Axure RP进行手机端BBS的原型设计
今天是在吾索实习的第14天.因本公司的微信公众号需要有一个对外的技术交流平台,所以我们小组打算设计一个手机端的BBS以满足其要求.首先,我们需要做的是进行数据库设计与原型设计,然后提交给经理验收,看看 ...
- Java---设计模块(单例的变形)(多例)
设计模式1--单例变形(多例) ★ 缓存在单例中的使用 缓存在编程中使用很频繁,有着非常重要的作用,它能够帮助程序实现以空间换取时间,通常被设计成整个应用程序所共享的一个空间,现要求实现一个用缓存存放 ...
- samba服务器的搭建及使用
一.Samba服务器的安装及配置 1.samba服务器的安装 rpm –ivh /mnt/Packages/samba-3. 5. 10-125. el6.i686.rpm 需要挂载红帽6的光盘 2. ...