总听说32bit 系统中进程最大内存2G 类似的话,今天花了点时间来求证下,目前还有不完整的情况,后续补充。
首先说32位,这个概念最早应该是从CPU来的。通常32位CPU最大支持2^32Bytes内存也就是4GB,不过较新的CPU一般支持PAE模式,启用PAE模式理论上可以支持64GB的内存。
不过仅仅CPU支持是不行的,还需要操作系统支持。操作系统也有32位,64位之分。而且一般情况下32位操作系统最大内存是4G,比如我们的通常使用的XP,vista,win7,有些企业版本,比如带Server ,Enterprice ,Datacenter字样的特殊版本内存通常会大很多。
linux2.3.23之前也是4G,之后的版本支持PAE了,所以理论上都是64GB。如果想你的系统支持内存大于4G需要自己开启PAE。
既然32位系统最大支持内存是4G,为什么我们编程的时候是2G呢,这个跟操作系统有关系了。
对微软的系统来说,操作系统将内存分为两部分,一部分给操作系统使用的,一部分给除操作系统之外的应用程序使用的。
默认情况下两部分都是2GB,(2000-2003,都会有个boot.ini)文件可以设置这个值。win7里没有这个文件了,但是可以通过bcdedit命令来设置。
对于linux系统来说,这个比例是1:3,3GB是给用户进程使用的,因此在linux下应用程序的最大内存是3GB,当然也是可以设置的,好像需要从新编译内核。
接下来我用32位的window7系统来测试JAVA最大内存的情况。
首先了解系统默认的虚拟机参数
-Xms 初始堆大小 物理内存的1/64
-Xmx 最大堆大小 物理内存的1/4
-XX:MaxPermSize 设置持久代最大值 物理内存的1/4
-Xss 每个线程的堆栈大小 JDK5.0后每个大小为1M,之前为256K,减少这个值能够创建更多的线程。
1,修改-Xmx1600m 其它默认可以运行
2,修改-Xmx1650m 其它默认不可以运行 (失败)
3,修改-Xmx1600m -XX:MaxPermSize=80m 可以运行
4,修改-Xmx1600m -XX:MaxPermSize=90m 不可以运行 (失败)
5,修改-Xmx680m -XX:MaxPermSize=1000m 可以运行
6,修改-Xmx690m -XX:MaxPermSize=1000m 不可以运行 (失败)
所以为了安全,通常两个Xmx 和MaxPermSize 之和<1500m
相关推荐
JAVA进程占用高内存缘由分析与优化方法 在 Java 进程中,高内存占用是一个常见的问题,本文将通过 jmap 和 ps 命令来分析 Java 进程的内存占用情况,并讨论可能的优化方法。 1. Java 进程的内存占用分析 使用 ...
### Java共享内存并行编程 #### 1. 引言 随着计算机技术的发展,特别是多核处理器的普及,高效利用多核架构成为提高程序性能的关键因素之一。Java作为一种跨平台的语言,不仅在Web开发、企业级应用等领域有着广泛...
例如,如果Java进程的PID为12345,可以执行`jmap -dump:format=b,file=heapdump.hprof 12345`,这会在当前目录下创建一个名为`heapdump.hprof`的堆转储文件。 2. **使用Memory Analyzer(MAT)分析**:MAT是一款由...
《银行家算法在进程调度与内存分配中的Java实现详解》 银行家算法是解决系统安全性问题的一种经典策略,尤其在多道程序设计环境下,对于内存分配和进程调度具有重要意义。本文将深入探讨银行家算法的基本原理,并...
- **调优策略**:为了提高程序的性能和响应速度,开发人员可以通过调整JVM参数来优化Java堆内存的大小,如`-Xmx`(最大堆内存大小)和`-Xms`(初始堆内存大小)等。 #### 三、本机内存及其作用 除了Java堆内存之外...
总的来说,通过`jstat`和GC日志,我们可以深入理解Java进程的内存行为,定位并解决频繁GC的问题,从而提高应用性能。记住,优化JVM配置是一项细致的工作,需要根据具体应用的特性进行调整,不能一概而论。
1. **生成堆转储文件**:通过`jmap -dump:format=b,file=<filename> <pid>`命令,我们可以从运行中的Java进程生成一个heap dump文件,这个文件包含了Java堆内存的所有信息。 2. **查看堆概要**:`jmap -histo:live ...
在这个实验和课程设计中,我们将深入探讨动态内存分配与回收的机制,通过Java编程语言来实现四种不同的内存分配策略:First Fit(FF)、Next Fit(NF)、Best Fit(BF)以及Worst Fit(WF)。 首先,让我们详细了解...
Java作为一种跨平台的编程语言,提供了丰富的API来支持线程和进程的管理。本项目利用Java实现了线程和进程的模拟及管理,旨在帮助学生深入理解操作系统的工作原理。 线程是程序执行的最小单元,它共享同一进程中的...
- OpenJDK的JVM参数配置:如`-XX:MaxDirectMemorySize`设置最大直接内存大小。 4. **注意事项**: - 直接内存虽快,但也有局限,比如容量有限,过度使用可能导致内存溢出。 - 直接内存不受JVM的垃圾收集器管理,...
在详细介绍Java 8内存模型之前,需要了解的是,JVM(Java虚拟机)在启动时,操作系统会为JVM进程分配一系列内存区域,这些内存区域包括堆(Heap)、元空间(MetaSpace)、线程堆栈(Thread Stack)、共享库(Shared ...
在Android里,程序内存被分为2部分:native和dalvik,dalvik就是我们普通的Java使用内存,分析堆栈的时候使用的内存。我们创建的对象是在这里面分配的,对于内存的限制是 native+dalvik 不能超过最大限制. Android ...
例如,通过`Runtime.getRuntime().freeMemory()`可以获得当前JVM的空闲内存,`totalMemory()`返回总内存,而`maxMemory()`则返回JVM的最大可用内存。要获取物理内存信息,通常需要借助于操作系统的API,这在Java中...
- `limit`: 内存限制,表示进程可使用的最大内存范围。 - `pcbFlag`: 一个标志字段,可能用于表示进程的特定属性或状态。 类中的`getProcessState()`方法将进程状态转换为友好的字符串形式,便于理解和显示。 3...
它选择最大的空闲块来满足进程需求,这样可以尽量保持较小的空闲块,避免小块内存过于分散。然而,这种策略可能会导致大的内存块被频繁分割,长期来看可能增加内存碎片。 在Java中,内存分配主要涉及堆内存和栈内存...
- **prstat**:监控Java进程的CPU和内存使用,用于Java应用程序的性能分析。 - **jconsole**和**jvisualvm**:Java自带的性能监视工具,提供详细的JVM内存和线程信息。 通过理解这些概念和准则,并熟练运用AIX的...
最优分配力求最大化剩余空间的利用率,最坏分配则是为了避免因连续分配大块内存导致大量小碎片,而最先分配则是按请求顺序分配内存,相对简单但可能导致碎片问题。 实验内容主要包括以下几个方面: 1. 在进程管理...
在这个“进程调度算法、内存管理算法、银行家算法(Java实现),可用于课设.zip”压缩包中,我们可以找到三个核心主题的详细实现:进程调度、内存管理和银行家算法,这些都是操作系统中的核心组件。 首先,**进程...
同时,操作系统需要预留足够的物理内存给其他进程。 - **平衡新生代和老年代**:新生代用于存放新创建的对象,老年代则存放长期存在的对象。合理设置新生代和老年代的比例(如 `-XX:NewRatio` 和 `-XX:SurvivorRatio...