java内存和基本数据类型

java内存和基本数据类型

ID:30361346

大小:98.12 KB

页数:19页

时间:2018-12-29

java内存和基本数据类型_第1页
java内存和基本数据类型_第2页
java内存和基本数据类型_第3页
java内存和基本数据类型_第4页
java内存和基本数据类型_第5页
资源描述:

《java内存和基本数据类型》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、java内存和基本数据类型java内存和基本数据类型32位Intelx86最初拥有的32位物理地址仅允许处理器寻址4GB存储空间。后来,添加了一种称为物理地址扩展(PhysicalAddressExtension,PAE)的特性,将物理地址大小扩大到了36位,允许安装或寻址至多64GBRAM。32位的操作系统有4GB虚拟地址空间,可以映射到一个较大的物理地址范围.如果您将大于4GB的内存放入32位Intel服务器中,您将无法将所有内存直接映射到一个单一进程中。地址窗口扩展允许Windows进程将其32位地址空间的一部分作为滑动窗口映射到较大的内存区域中。这意味着尽管您无法直接引用大

2、于4GB的内存,但您仍然可以使用较大的内存区域。默认情况下,32位Windows拥有2GB用户空间和2GB内核空间,可调整。当执行系统调用时,内核需要访问其自己的内存和调用进程的内存。更小的用户空间意味着应用程序编程人员只能使用更少的内存空间。缩减内核区域可能导致一些问题,比如能够同时登录的用户数量限制或能够运行的进程数量限制。程序共享库DLL在2G内核空间中。尽管总体用户空间为3GB,但是不可能分配3GB大的内存块,因为共享库无法加载这么大的内存。本机内存泄漏或过度使用本机内存将导致不同的问题,具体取决于您是耗尽了地址空间还是用完了物理内存。耗尽地址空间通常只会发生在32位进程上

3、,因为最大4GB的内存很容易分配完。64位进程具有数百或数千GB的用户空间,即使您特意消耗空间也很难耗尽这么大的空间。如果您确实耗尽了Java进程的地址空间,那么Java运行时可能会出现一些陌生现象,当在进程地址空间比物理内存大的系统上运行时,内存泄漏或过度使用本机内存会迫使操作系统交换后备存储器来用作本机进程的虚拟地址空间。访问经过交换的内存地址比读取驻留(在物理内存中)的地址慢得多,因为操作系统必须从硬盘驱动器拉取数据。可能会分配大量内存来用完所有物理内存和所有交换内存(页面空间),在Linux上,这将触发内核内存不足(OOM)结束程序,强制结束最消耗内存的进程。在Window

4、s上,与地址空间被占满时一样,内存分配将会失败。同时,如果尝试使用比物理内存大的虚拟内存,显然在进程由于消耗内存太大而被结束之前就会遇到问题。系统将变得异常缓慢,因为它会将大部分时间用于在内存与交换空间之间来回复制数据。当发生这种情况时,计算机和独立应用程序的性能将变得非常糟糕,从而使用户意识到出现了问题。当JVM的Java堆被交换出来时,垃圾收集器的性能会变得非常差,应用程序可能被挂起。如果一台机器上同时使用了多个Java运行时,那么物理内存必须足够分配给所有Java堆。Java运行时是一个操作系统进程,它会受到我在上一节中列出的硬件和操作系统局限性的限制。运行时环境提供的功能受

5、一些未知的用户代码驱动,这使得无法预测在每种情形中运行时环境将需要何种资源。Java堆是分配了对象的内存区域。大多数JavaSE实现都拥有一个逻辑堆,一个物理堆可被划分为多个逻辑扇区,具体取决于用于管理堆内存的垃圾收集(GC)算法。这些扇区通常实现为连续的本机内存块,这些内存块受Java内存管理器(包含垃圾收集器)控制。大部分GC算法依赖于被分配为连续的内存块的堆,因此不能在堆需要扩大时分配更多本机内存。所有堆内存必须预先保留。即时(JIT)编译器JIT编译器在运行时编译Java字节码来优化本机可执行代码。这极大地提高了Java运行时的速度,并且支持Java应用程序以与本机代码相当

6、的速度运行。字节码编译使用本机内存(使用方式与gcc等静态编译器使用内存来运行一样),但JIT编译器的输入(字节码)和输出(可执行代码)必须也存储在本机内存中。包含多个经过JIT编译的方法的Java应用程序会使用比小型应用程序更多的本机内存。类和类加载器Java应用程序由一些类组成,这些类定义对象结构和方法逻辑。Java应用程序也使用Java运行时类库(比如java.lang.String)中的类,也可以使用第三方库。这些类需要存储在内存中以备使用。存储类的方式取决于具体实现。SunJDK使用永久生成(permanentgeneration,PermGen)堆区域。Java5的IB

7、M实现会为每个类加载器分配本机内存块,并将类数据存储在其中。现代Java运行时拥有类共享等技术,这些技术可能需要将共享内存区域映射到地址空间。要理解这些分配机制如何影响您Java运行时的本机内存占用,您需要查阅该实现的技术文档。然而,一些普遍的事实会影响所有实现。从最基本的层面来看,使用更多的类将需要使用更多内存。(这可能意味着您的本机内存使用量会增加,或者您必须明确地重新设置PermGen或共享类缓存等区域的大小,以装入所有类)。记住,不仅您的应用程序需要加载到内存

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。