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) 可以管理的最小地址单元 机器的体系 ...
随机推荐
- 文成小盆友python-num15 - JavaScript基础
一.JavaScript简介 JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的 ...
- win7禁止自动使用浏览器打开FTP而是用资源管理器
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\ftp] @="URL:File Transfer Protocol" ...
- smart pointer (auto_ptr)
很多人听说过标准auto_ptr智能指针机制,但并不是每个人都天天使用它.这真是个遗憾,因为auto_ptr优雅地解决了C++设计和编码中常见的问题,正确地使用它可以生成健壮的代码.本文阐述了如何正确 ...
- mysql undo
mysql> show variables like '%undo%'; +-------------------------+-------+ | Variable_name | Value ...
- centos6.5+Django+mysql+nginx+uwsgi
centos6.5+Django+mysql+nginx+uwsgi 1.nginx的安装.这里采用nginx-1.6.0, 建立一个shell脚本然后执行. #!/bin/bash nginx_ve ...
- iOS 9之WatchKit for WatchOS 2
金田(github示例源码) 自AppleWatch发行的同时就可以为AppWatch开发相应的应用程序,不过最初的版本,能开发的功能极为有限,所以也只是有少数的App厂商为Apple定制了App,所 ...
- 【转】C语言文件操作解析(三)
原文网址:http://www.cnblogs.com/dolphin0520/archive/2011/10/07/2200454.html C语言文件操作解析(三) 在前面已经讨论了文件打开操作, ...
- gcc编译时头文件库文件搜索顺序(转)
原文: http://blog.csdn.net/silentfly1987/article/details/6119195
- HDU-1428(记忆化搜索)
Problem Description LL 最近沉迷于AC不能自拔,每天寝室.机房两点一线.由于长时间坐在电脑边,缺乏运动.他决定充分利用每次从寝室到机房的时间,在校园里散散步.整个HDU 校园呈方 ...
- sicily 1024 Magic Island
题意:求无向图路径中的最大带权值. 解法:深搜 // Problem#: 9859 // Submission#: 2661875 // The source code is licensed und ...