课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
内存管理是目前大多数软件开发程序员在开发软件的时候都会用到的一个编程技术,下面我们就通过案例分析来了解一下,java编程内存类型与应用方法。
一、内存简介
内存和存储器这两个术语均指计算机的内部存储空间。存储器包括:内部存储器(内存)、外部存储器(外存)、寄存器。
内存是应用程序在处理过程中放置其使用的数据的地方。内存包括:只读存储器(ROM,ReadOnlymemory)(只读,断电后数据保留)、随机存取存储器(RAM,RandomAccessMemory)(主存)(内存条)(可读可写,断电后数据丢失)、高速缓冲存储器(CACHE)。
物理内存即随机存取存储器空间。
虚拟内存即硬盘一部分空间映射虚拟的内存。物理内存已满时从物理内存碎片甚至硬盘按需取用空间。虚拟内存对应的存储文件pagefile.sys在系统盘根目录下,默认隐藏。虚拟内存使得多个进程在同时运行时可以共享物理内存,这里的共享只是空间上共享,在逻辑上彼此仍然是隔离的。
二、分段和分页管理机制
在早期的计算机中,要运行一个程序,会把这些程序全都装入内存,程序都是直接运行在内存上的,也就是说程序中访问的内存地址都是实际的物理内存地址。
但是如果遇到同时需要运行多个应用程序的时候,操作系统的内存可能就会不太够了。而且还可能会遇到如下问题:
进程地址空间不隔离
内存使用效率低
程序运行的地址不确定
为此,计算机科学家们设计增加一个中间层,利用一种间接的地址访问方法访问物理内存。按照这种方法,程序中访问的内存地址不再是实际的物理内存地址,而是一个虚拟地址,然后由操作系统将这个虚拟地址映射到适当的物理内存地址上。
分段的映射方法虽然解决了上述中的问题一和问题三,但并没能解决问题二,即内存的使用效率问题。在分段的映射方法中,每次换入换出内存的都是整个程序,这样会造成大量的磁盘访问操作,导致效率低下。所以这种映射方法还是稍显粗糙,粒度比较大。实际上,程序的运行有局部性特点,在某个时间段内,程序只是访问程序的一小部分数据,也就是说,程序的大部分数据在一个时间段内都不会被用到。基于这种情况,人们想到了粒度更小的内存分割和映射方法,这种方法就是分页(Paging)。
分页的基本方法是,将地址空间分成许多的页。每页的大小由CPU决定,然后由操作系统选择页的大小。
32位和64位电脑也是指的内存:
32位处理器:即内存地址长度为32,拥有2
32
的可寻址范围,使用32位地址线的大寻址空间为2的32次方bytes,计算后即4294967296Bytes,也就是我们常说的4096MB,32位地址线的寻址空间封顶即为4GB。
64位处理器:即内存地址长度为64,拥有2
64
的可寻址范围,64位系统使用64位地址线的大寻址空间为2的64次方bytes,计算后其可寻址空间达到了18446744073709551616Bytes,即16384PB(PebiByte)或16777216TB(TebiByte)。
三、地址空间的划分
一个计算通常有固定大小的内存空间,但是程序并不能使用全部的空间。因为这些空间被划分为内核空间和用户空间,而程序只能使用用户空间的内存。
内核空间:主要的操作系统程序和c运行时空间。链接计算机硬件,提供了联网和虚拟内容逻辑的进程
用户空间:Java实际运行时空间
Java代码启动后,有如下组建需要占用内存:
堆内存:Java堆、类和类加载器
栈内存:线程
本地内存:NIO、JNI
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。