1. 当我们通过命令行启动一个Java应用时,JVM是作为一个一般的操作系统进程运行的。因此,Java运行时和其它进程一样都面临着本机处理器提供的寻址能力和操作系统提供的用户空间对内存使用的限制。
32位处理器寻址范围可达2^32即4GB, 64位处理器寻址范围可达2^64位即16exabyte,其中相当一部分寻址范围都会被操作系统内核占用。Windows默认占用的的内存是2GB,导致32位Windows下任何进程最多占用2GB内存。
进一步阅读:
http://sinewalker.wordpress.com/2007/03/04/32-bit-windows-and-jvm-virtual-memory-limit/
2. 有时会发现同样的Java应用在64位机器上运行时比在32位机器上用了更多的内存,性能也有所下降。这是因为JVM中指向对象的指针在32位下占用4个字节,在64位下要占用8个字节。
进一步阅读:
http://blog.juma.me.uk/2008/10/14/32-bit-or-64-bit-jvm-how-about-a-hybrid/
http://blog.juma.me.uk/tag/compressed-oops/
http://www.docstoc.com/docs/36747975/Improving-64-bit-Java-performance-using-Compressed-References
3. HotSpot JVM从1.6.0_14开始提供-XX:+UseCompressedOops选项改善其在64位下的表现。在java堆小于32G情况下打开该选项,JVM会将引用指针压缩至4个字节来减少内存占用。1.6.0_23之后改选项就默认打开了。
进一步阅读:
http://www.oracle.com/technetwork/java/javase/6u14-137039.html
http://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html
4. Java进程用到的内存重要非heap和heap两大块,通过-Xms和-Xmx设置的只是heap的大小。所以经常见到Java进程占用比-Xmx设置更多的内存就没啥奇怪了。
分享到:
相关推荐
标题中的“基于共享内存的HashMap”指的是在多进程或多线程环境中,使用共享内存作为存储机制的哈希映射数据结构。哈希映射(HashMap)是一种常用的数据结构,它通过键值对(key-value pairs)的方式快速存取数据,...
值得注意的是,调用`start()`并不意味着线程立即执行,它只是让线程准备好以便执行。一旦线程获得CPU资源,它就会开始执行`run()`方法。 **2.5 线程的生命周期** 线程的生命周期包括以下几个阶段: - **新建状态**...
Java程序员的简历应突出以下几个关键知识点: 1. **编程语言掌握**:强调对Java语言的精通,包括其语法、面向对象编程概念、异常处理、多线程和集合框架等。同时,提及对其他相关技术如JavaScript、SQL、HTML/CSS的...
现在,大部分人的系统上并没有 4 GB 内存,即使您将 swap 也算上, 每个进程所使用的内存也肯定少于 4 GB。因此,当加载一个进程时,它会得到一个取决于某个称为 系统中断点(system break)的特定地址的初始内存...
### Java面试题基本知识点总结(2) #### 数据库操作命令详解 1. **数据库删除数据的方法** 在数据库管理中,经常会遇到需要删除数据的情况。对于这些需求,SQL提供了几种不同的方法,包括`TRUNCATE`、`DELETE`...
最值得注意的是,Java SE 9加入了对原始类型流(如intStream,longStream和doubleStream)的改进支持。此外,还引入了Optional类的几个新方法,比如Optional::or,Optional::ifPresentOr,以及Stream::ofNullable等...
值得注意的是,Java不支持指针操作,以增加安全性。 4. **构造方法**:构造方法是用于初始化新创建对象的特殊方法。每个类可以有多个构造方法,它们通过不同的参数列表进行区分。构造方法的名称必须与类名相同,且...
值得注意的是,当一个进程创建子进程时,子进程会继承父进程的大部分资源,包括代码、全局变量等,但拥有独立的内存空间和进程ID(PID)。这种资源共享和独立性是进程与线程的主要区别之一。线程虽然也能够实现并发...
根据提供的文件信息,以下是对知识点的详细说明: ### Android系统框架 Android系统是基于Linux内核构建的操作系统,专门用于移动设备。Linux内核提供了操作系统所需的核心服务,包括安全、内存、进程和网络驱动...
在Java面试中,掌握以下几个核心知识点至关重要: 1. **面向对象的特征**: - **抽象**:抽象是将复杂问题简化,关注问题的关键部分,忽略无关细节。抽象包括过程抽象(方法)和数据抽象(类)。 - **继承**:...
后台进程负责数据库的后台维护工作,包括DBWn(数据写入进程),PMON(进程监控器),CKPT(检查点进程),LGWR(日志写入进程),SMON(系统监控器)等,以及可选的其他进程,如归档和恢复进程。 Oracle数据库的...
使用mvnd,开发者可以期待以下几点优势: 1. **更快的构建时间**:由于使用了守护进程,避免了JVM的启动时间,以及内存和CPU资源的预热过程。 2. **并发构建**:通过并行处理模块,减少等待时间,特别是在有大量...
2. **Memory Tab**:显示JVM内存的使用情况,包括堆内存(Heap Memory)和非堆内存(Non-Heap Memory)的详细信息。堆内存细分为新生代(Young Generation)和老年代(Old Generation),每个区域的使用量、最大容量...
虽然HSQldb在这里主要是作为驱动存在,但值得注意的是,它也可以作为一个内存数据库,适用于测试和原型开发,因为它不需要独立的服务器进程。 4. **hsqldb.jar**: 如前所述,HSQldb是一个轻量级的、完全开源的SQL...
使用XWalkView的步骤大致与使用原生WebView相似,但有几点需要注意的差异: 1. **添加依赖**:首先,你需要在你的项目中引入XWalkView的库文件。对于给定的文件"crosswalk-webview-23.52.562.0-arm",这可能是一个...
的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...
值得注意的是,随着技术的不断发展,EMC的招聘要求也会有所更新,但这些基本技能始终是核心。 总的来说,EMC2010年校园招聘笔试题不仅是一份过去的考题集,更是理解IT行业尤其是存储领域知识的一个窗口,有助于求职...
在使用SQLite控件进行开发时,开发者需要注意以下几点: 1. **安装和配置**:将SQLite库或组件引入项目,设置必要的编译选项或依赖项。 2. **API接口**:熟悉SQLite的C API或其他编程语言的绑定,如SQLite.NET、...