JVM(java虚拟机)其实就是操作系统(如windows)上的一个普通程序(进程名叫java,这个程序可以解释执行class文件)。
当java进程启动时会首先分配一块堆内存(最小内存),以后每当class字节码程序要求JVM(java进程)分配内存时,JVM
就会在预先分配的那块内存上面为class字节码程序分配内存,当预先分配的那块内存用没时,JVM会再向操作系统要内存
(物理内存), 但是JVM不会无限制的向操作系统要内存,当它占用的实际堆内存达到一个预定值(最大可用内存)时,
如果class字节码程序还向JVM要内存,并且JVM无法通过回收当前堆中的内存来为class字节码程序服务时,它就会给程
序抛出java.lang.OutOfMemoryError。其中内存回收时机并不是再用掉内存达到最大可用内存时才进行,他的运行时机是
不确定的,可见JVM的最大可用内存就是你的java程序(class字节码程序)能够使用的最大内存。
例如:你把jvm最大可用内存设为200M,而你的物理内存1G.在这种程序下你的class程序最多能使用200M内存,虽然你可能
还有800M内存可用,但是当你的程序用掉200M后如果再要内存,JVM不会因为你还有800M内存而为你分配内存,他会向你抛
出java.lang.OutOfMemoryError .
所以JVM最大可用内存参数比较重要。
一般建议堆的最大值设置为可用内存的最大值的80%。
(以下为转网络)
Tomcat默认可以使用的内存为64MB,在较大型的应用项目中,这点内存是不够的,需要调大。
Windows下,在文件{tomcat_home}/bin/catalina.bat,Unix下,在文件{tomcat_home}/bin/catalina.sh的前面,
增加如下设置:
set JAVA_OPTS=-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】
需要把这个两个参数值调大。例如: set JAVA_OPTS=-Xms64m -Xmx256m
表示初始化内存为256MB,可以使用的最大内存为512MB。
另外需要考虑的是Java提供的垃圾回收机制。虚拟机的堆大小决定了虚拟机花费在收集垃圾上的时间和频度。收集垃圾可
以接受的速度与应用有关,应该通过分析实际的垃圾收集的时间和频率来调整。如果堆的大小很大,那么完全垃圾收集就
会很慢,但是频度会降低。如果你把堆的大小和内存的需要一致,完全收集就很快,但是会更加频繁。调整堆大小的的目
的是最小化垃圾收集的时间,以在特定的时间内最大化处理客户的请求。在基准测试的时候,为保证最好的性能,要把堆
的大小设大,保证垃圾收集不在整个基准测试的过程中出现。
如果系统花费很多的时间收集垃圾,请减小堆大小。一次完全的垃圾收集应该不超过 3-5 秒。如果垃圾收集成为瓶颈,那
么需要指定代的大小,检查垃圾收集的详细输出,研究 垃圾收集参数对性能的影响。一般说来,你应该使用物理内存
的 80% 作为堆大小。当增加处理器时,记得增加内存,因为分配可以并行进行,而垃圾收集不是并行的。
-Xms : 应用程序初始化内存大写,注意是你的某一个应用程序,多个应用程序将生成多个JVM实例
-Xmx: 应用程序占用内存的最大值,将不能超过这个值,否则可能导致OutOfMemory.
-XX:NewRatio old generation/new generation 的比例
推荐的-Xms -Xmx设置成一样,,为系统内存的80%.这样,不用每次GC清理完再重新分配.
而-XX:NewRatio为2 比如: -Xms384m -Xmx384m -XX:NewRatio=2
分享到:
相关推荐
《MiniJavaVM——一个Java虚拟机的设计和实现》是一篇深度探讨Java虚拟机(JVM)实现原理的技术文章。在本文中,我们将深入理解MiniJavaVM的架构、设计思路以及其实现过程,这对于理解Java程序的运行机制和优化代码...
JDK不仅包括Java编译器(javac)和Java虚拟机(JVM),还包括了大量的工具类库以及Java语言规范。这意味着,任何对Java语言的改进都需要整合到JDK中,并作为新的版本发布。对于Java开发者而言,JDK是必备的基本工具集。 ...
2. Java 语言的内存管理方式:Java 语言使用堆栈式内存管理方式,程序员不需要手动释放内存。 三、Java 语言的开发工具 1. Java 语言的编译器:Java 语言的编译器是 javac,负责将 Java 源文件编译成字节码文件。 ...
3. Java语言的自动垃圾收集是内存管理的一部分,它自动识别并释放不再使用的对象所占用的内存空间,避免了程序员手动管理内存的复杂性和可能导致的问题,如内存泄漏。 4. J2SE(Java 2 Standard Edition)是Java的...
上一篇介绍了Java虚拟机的运行时内存区域,接下来将来学习下几种常见的垃圾收集算法,进入正题。 概述 在早期,人们就在思考GC(Garbage Collection,GC)需要完成的三件事: 哪些内存需要回收? 什么时候回收? ...
读者会了解到Java虚拟机(JVM)如何自动管理内存,以及对象生命周期的概念,这有助于优化程序性能和防止内存泄漏。 并发编程是现代软件开发中的重要一环。Java提供了丰富的并发工具,如线程、同步机制(如...
JVM(Java虚拟机): JVM是运行Java字节码的虚拟计算机。它负责执行字节码,提供跨平台的兼容性,是Java能够"一次编译,到处运行"的关键所在。 内存区域:JVM的内存区域包括程序计数器、虚拟机栈、本地方法栈、堆和...
堆空间是由Java虚拟机(JVM)管理的,通过垃圾回收机制来释放不再使用的对象所占用的空间。堆内存相较于栈内存来说更为庞大,但也因此导致访问速度相对较慢。 **2. 栈与堆的访问速度** 由于栈空间是由操作系统直接...
此外,还需要了解如何编写Java程序并生成相应文档,以及如何使用Java虚拟机和无用内存自动回收机制,这些都是Java开发中的重要知识点。 Java的最新发展包括在电子商务、分布式计算、消费电子、实时系统等多个领域的...
这是因为Java程序在运行之前,会被编译成一种中间代码——字节码,这种字节码可以由任何安装了Java虚拟机(JVM)的设备来执行。这种设计使得Java代码具有很高的移植性,也极大地促进了其在各个平台上的应用。 Java...
Java虚拟机(JVM)是Java程序运行时的环境,它负责解释执行Java字节码,并管理内存分配、垃圾回收等任务。JVM是Java跨平台特性的核心。 **可爱的HelloWorld:** HelloWorld是初学者的第一个Java程序,通常用来介绍...
1. **Java虚拟机 (JVM)** - JVM 是一个软件层面的抽象计算机,它能够在任何处理器上安全且兼容地执行 .class 文件中的字节码。JVM 的“机器码”实际上是字节码,这些字节码可以在任何安装了 JVM 的计算机或设备上...
11. **JVM内存模型**:解释Java虚拟机的工作原理,包括堆内存、栈内存、方法区、本地方法栈等区域,以及垃圾回收机制。 12. **设计模式**:介绍常见的设计模式,如单例、工厂、观察者、装饰者等,并探讨它们在实际...
Java运行在一个称为Java虚拟机(JVM)的环境中,这个环境对代码进行了严格的检查,防止恶意代码执行。此外,Java还提供了丰富的安全框架,如安全管理器,来控制代码的权限。 Java的平台独立性是通过字节码实现的。...
10. **Java虚拟机(JVM)**:作者简要分析了JVM的工作原理,包括类加载机制、内存模型以及垃圾收集。这部分内容有助于理解Java程序的运行过程和性能优化。 11. **编程实践**:最后,书中提供了许多实用的编程技巧和...
其次,深入理解JVM(Java虚拟机)是Java开发者的重要技能。JVM的工作原理,如类加载机制、内存模型(堆、栈、方法区等)、字节码执行、性能优化等方面,都是面试官可能会考察的内容。理解这些不仅能帮助解决实际问题...
JVM 就是 java 虚拟机的英文简写,java 虚拟机就是为任何的平台提供一个编译 java 程序的接口。 本实验报告的主要贡献在于,通过对 Java 开发环境的安装与配置,掌握 Java 程序的编写和执行方法,提高了 Java 编程...
### Java虚拟机与内存管理 深入了解Java虚拟机(JVM)的工作原理,对于优化Java应用程序的性能有着不可替代的作用。本书深入剖析了JVM的内存模型,包括堆内存、栈内存、方法区等组成部分,以及垃圾回收机制如何工作...