下载此文档

java内存和基本数据类型.doc


文档分类:IT计算机 | 页数:约16页 举报非法文档有奖
1/16
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/16 下载此文档
文档列表 文档介绍
java内存和基本数据类型
 
java内存和基本数据类型
32位Intel x86最初拥有的32位物理地址仅允许处理器寻址4GB存储空间。后来,添加了一种称为物理地址扩展(Physical Address Extension,PAE)的特性,将物理地址大小扩大到了36位,允许安装或寻址至多64GB RAM。
32位的操作系统有4GB虚拟地址空间,,您将无法将所有内存直接映射到一个单一进程中。地址窗口扩展允许Windows进程将其32位地址空间的一部分作为滑动窗口映射到较大的内存区域中。这意味着尽管您无法直接引用大于4GB的内存,但您仍然可以使用较大的内存区域。
默认情况下,32位Windows拥有2GB用户空间和2GB内核空间,可调整。当执行系统调用时,内核需要访问其自己的内存和调用进程的内存。更小的用户空间意味着应用程序编程人员只能使用更少的内存空间。缩减内核区域可能导致一些问题,比如能够同时登录的用户数量限制或能够运行的进程数量限制。程序共享库DLL在2G内核空间中。尽管总体用户空间为3GB,但是不可能分配
3GB大的内存块,因为共享库无法加载这么大的内存。
本机内存泄漏或过度使用本机内存将导致不同的问题,具体取决于您是耗尽了地址空间还是用完了物理内存。耗尽地址空间通常只会发生在32位进程上,因为最大4GB的内存很容易分配完。64位进程具有数百或数千GB的用户空间,即使您特意消耗空间也很难耗尽这么大的空间。如果您确实耗尽了Java进程的地址空间,那么Java运行时可能会出现一些陌生现象,
当在进程地址空间比物理内存大的系统上运行时,内存泄漏或过度使用本机内存会迫使操作系统交换后备存储器来用作本机进程的虚拟地址空间。访问经过交换的内存地址比读取驻留(在物理内存中)的地址慢得多,因为操作系统必须从硬盘驱动器拉取数据。可能会分配大量内存来用完所有物理内存和所有交换内存
(页面空间),在Linux上,这将触发内核内存不足(OOM)结束程序,强制结束最消耗内存的进程。在Windows上,与地址空间被占满时一样,内存分配将会失败。
同时,如果尝试使用比物理内存大的虚拟内存,显然在进程由于消耗内存太大而被结束之前就会遇到问题。系统将变得异常缓慢,因为它会将大部分时间用于在内存与交换空间之间来回复制数据。当发生这种情况时,计算机和独立应用程序的性能将变得非常糟糕,从而使用户意识到出现了问题。当JVM的Java堆被交换出来时,垃圾收集器的性能会变得非常差,应用程序可能被挂起。如果一台机器上同时使用了多个Java运行时,那么物理内存必须足够分配给所有Java堆。
Java运行时是一个操作系统进程,它会受到我在上一节中列出的硬件和操作系统局限性的限制。运行时环境提供的功能受一些未知的用户代码驱动,这使得无法预测在每种情形中运行时环境将需要何种资源。
Java堆是分配了对象的内存区域。大多数Java SE实现都拥有一个逻辑堆,一个物理堆可被划分为多个逻辑扇区,具体取决于用于管理堆内存的垃圾收集(GC)算法。这些扇区通常实现为连续的本机内存块,这些内存块受Java内存管理器(包含垃圾收集器)控制。
大部分GC算法依赖于被分配为连续的内存块的堆,因此不能在堆需要扩大时分配更多本机内存。所有堆内存必须预先保留。
即时(JIT)编译器
JIT编译器在运行时编译Java字节码来优化本机可执行代码。这极大地提高了Java运行时的速度,并且支持Java应用程序以与本机代码相当的速度运行。
字节码编译使用本机内存(等静态编译器使用内存来运行一样),但JIT编译器的输入(字节码)和输出(可执行代码)必须也存储在本机内存中。包含多个经过JIT编译的方法的Java应用程序会使用比小型应用程序更多的本机内存。
类和类加载器
Java应用程序由一些类组成,这些类定义对象结构和方法逻辑。Java应用程序也使用Java运行时类库()中的类,也可以使用第三方库。这些类需要存储在内存中以备使用。
存储类的方式取决于具体实现。Sun JDK使用永久生成(permanent generation,PermGen)堆区域。Java 5的IBM实现会为每个类加载器分配本机内存块,并将类数据存储在其中。现代Java运行时拥有类共享等技术,这些技术可能需要将共享内存区域映射到地址空间。要理解这些分配机制如何影响您Java运行时的本机内存占用,您需要查阅该实现的技术文档。然而,一些普遍的事实会影响所有实现。
从最基本的层面来看,使用更多的类将需要使用更多内存。(这可能意味着您的本机内存使用量会增加,或者您必须明确地重新设置PermG

java内存和基本数据类型 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数16
  • 收藏数0 收藏
  • 顶次数0
  • 上传人shujukd
  • 文件大小287 KB
  • 时间2018-11-11