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) 可以管理的最小地址单元 机器的体系 ...
随机推荐
- 1109HTML学习
<div><!--face里面用逗号隔开表示 字体优先选择.size是字体1到7 --><font color="red" face="微软 ...
- php过滤参数特殊字符防注入
分享一例php实现过滤提交的参数数据以防止注入的代码,有需要的朋友参考下. 本节内容: php过滤特符字符,php防注入. in: 后端程序 例子: 代码示例: <?php /** * 安全防范 ...
- lucene分词多种方法
目前最新版本的lucene自身提供的StandardAnalyzer已经具备中文分词的功能,但是不一定能够满足大多数应用的需要.另外网友谈的比较多的中文分词器还有:CJKAnalyzerChinese ...
- 转:MFC创建多线程实例
作者:http://blog.csdn.net/wangningyu/article/details/4404134 平时在MFC里使用多线程时其实是很方面的,因为微软提供了一个API让我们很方面的去 ...
- nodejs 记入
1. vs2015 使用最新的 nodejs refer : http://josharepoint.com/2016/05/04/how-to-configure-visual-studio-201 ...
- ngRoute 路由
做单页面应用多是通过不同的url来识别出不同的页面展现的. angularjs 为我们提供一个封装好的ngRoute工具 简单介绍用法 : <div ng-view></div> ...
- PL/SQL 包头和包体
包用于逻辑组合相关的过程和函数,它由包规范和包体两部分组成,包规范用于定义公用的常量 变量,过程和函数,在SQL*PLUS中建立包规范可以使用CREATE PACKAGE命令. 实例如下: CREAT ...
- SPOJ 0962 Intergalactic Map
题目大意:在一个无向图中,一个人要从A点赶往B点,之后再赶往C点,且要求中途不能多次经过同一个点.问是否存在这样的路线.(3 <= N <= 30011, 1 <= M <= ...
- 通过JS触发TextBox的ontextchanged事件,并获取TextBox所在GridView的那一行
protected void txtInsNum_TextChanged(object sender, EventArgs e) { TextBox t = (TextBox)sender; Grid ...
- linux系统下mySQL数据库 备份方法和脚本
数据库备份1.创建个备份存储目录mkdir /root/backup/2.以下内容写到dbbackup.sh #!/bin/bash cd /data/db_backup/mysqldump -uad ...