如何设置Java虚拟机内存以适应大程序的装载

Java虚拟机对于运行时的程序所占内存是有限制的,当我们的项目或者程序很大时,往往会照成内存溢出。

举个例子:

public class SmallTest1 {

    public static void main(String[] args) {

        byte[] array = new byte[1024*1024*500];

    }

}

当定义这样一个500MB的数组时,就会造成JVM内存溢出:

而Java虚拟机默认的程序运行能得到的内存大小是随系统的,由Java的api体系结构中,点击Java:

后找到 “-Xmxn”这一项:

所以默认大小是根据系统设置的,那么我们该怎么设置最大运行内存呢?

如果是使用eclipse,那么在要进行的项目或者程序右键,选择【Run As】--->【Run Configurations...】,选择【(x)= Arguments】,在【VM arguments】中增加设置内存大小:

得到如下并设置参数:

这里我设置了800MB的内存,足够刚才的程序运行,接下来我们再来试试程序是否真的能运行而不再内存溢出:

public class SmallTest1 {

    public static void main(String[] args) {

        byte[] array = new byte[1024*1024*500];
        System.out.println("运行成功!");

    }

}

============================================================

可以看到程序不再使Java虚拟机内存溢出,我们通过线程睡眠方式来再次验证下:

public class SmallTest1 {

    public static void main(String[] args) throws InterruptedException {

        byte[] array = new byte[1024*1024*500];
        System.out.println("运行成功!");
        Thread.sleep(5000);  //设置程序运行5秒,查看内存变化
    }

}

未运行程序之前的系统内存:

运行程序之后的系统内存:

===========================================

如果是通过dos命令,则在cmd窗口中键入 java  -Xmx(某个数值)(内存单位)  程序名称

例如:

时间: 2024-12-04 17:54:37

如何设置Java虚拟机内存以适应大程序的装载的相关文章

eclipse设置java虚拟机内存大小

设置java虚拟机大小可以让eclipse启动运行更快...... 在eclipse中点击window--preferences--java--Installed JREs. 然后看右边的框,鼠标点击打钩的那一条,点击Edit, 会弹出Edit JRE , 找到default VM arguments: 向输入框中填写   -Xms128m -Xmx512m  (这样设置Java拟虚机内存使用最小是128M,最大是512M) 点击finish--ok.设置成功.

Java虚拟机内存分配详解

简介 了解Java虚拟机内存分布的好处 1.了解Java内存管理的细节,有助于程序员编写出性能更好的程序.比如,在新的线程创建时,JVM会为每个线程创建一个专属的栈 (stack),其栈是先进后出的数据结构,这种方式的特点,让程序员编程时,必须特别注意递归方法要尽量少使用,另外栈的大小也有一定的限制,如果过多 的递归,容易导致stack overflow. 2.了解Java内存管理的细节,一旦内存管理出现问题,有助于找到问题的根本原因所在. 3.了解Java内存管理的内幕,有助于优化JVM,从而

Java虚拟机内存模型及垃圾回收监控调优

Java虚拟机内存模型及垃圾回收监控调优 如果你想理解Java垃圾回收如果工作,那么理解JVM的内存模型就显的非常重要.今天我们就来看看JVM内存的各不同部分及如果监控和实现垃圾回收调优. JVM内存模型         正如你上图所看到的,JVM内存可以划分为不同的部分,广义上,JVM堆内存可以划分为两部分:年轻代和老年代(Young Generation and Old Generation) 年轻代(Young Generation) 年轻代用于存放由new所生成的对象.当年轻代空间满时,

关于java虚拟机内存管理的一些讲解

java数据类型: 1)原始类型:Primitive Types(原始值) 数值类型(Numeric Types) 整型类型(Integral Types),浮点类型(Floating-Point Types) 布尔类型(Boolean Types) returnAddress类型:表示一条字节码指令的操作码(Opcode).在所有的虚拟机支持的原始类型之中,只有 returnAddress 类型是不能直接 Java 语言的数据类型对应起来的. 2)引用类型:Reference Types(引用

java虚拟机---内存

java虚拟机---内存 Java虚拟机,即JVM,负责运行java程序,每个java程序都运行在一个具体jvm实例上.Java虚拟机的体系架构分为:类装载子系统.运行时数据区.执行引擎.类装载子系统即负责加载.验证.解析.初始化java类的系统:Java虚拟机在运行一个程序时需要储存很多数据,如类装载信息.创建的实例对象.方法调用的参数.局部变量.中间值等,虚拟机把这些信息都储存在"运行时数据区"里,即这里讲的JVM内存:执行引擎则是以字节码形式的class文件为输入,运行程序输出计

Java虚拟机内存管理机制

自动内存管理机制 Java虚拟机(JVM)在执行Java程序过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则是依赖用户线程的启动和结束而建立和销毁.根据<Java虚拟机规范 第2版>规定,运行时数据区包括: 1.程序计数器 一块较小的内存空间,不在Ram上,而是直接划分在CPU上的,程序员无法直接操作它.当前线程所执行的字节码的行号指示器,通过改变这个计数器的值来选取下一条需要执行的字节码指令.每条

打包apk java 虚拟机内存不足

解决方案:在android->sdk->build-tools-android-version 中有个 dx.bat dx.bat --dex 命令的dx.bat脚本有这样一句代码 REM By default, give dx a max heap size of 1 gig and a stack size of 1meg. rem This can be overridden by using "-JXmx..." and "-JXss..." o

java虚拟机内存不足,“Could not create the Java Virtual Machine”问题解决方案

在运行java程序时,遇到问题"Could not create the Java Virtual Machine."如下截图: 大概原因,就是java堆内存不足以运行JVM,需要增加内存. 网上搜索此问题,大部分都是针对某个程序进行修改JVM内存的解决方法,比如eclipse,等.试问,若是其他程序出现问题了呢? 现在给出一个全局的java虚拟机修改内存的方法.在WIN XP,WIN 7,WIN8都可以. 解决方案:增加一个系统环境变量 变量名:_JAVA_OPTIONS 变量值:-

java 虚拟机内存介绍

已经入行快有两年了,然而没有认真看过java虚拟机内存的介绍,下面把自己看的关于java虚拟机内存的介绍写下来,分享给大家. java 虚拟机在运行时将内存分为几个区域,分别为程序记数区,java虚拟机栈,本地方法栈,java堆,方法区,运行常量池.此外还有一个叫做直接内存的区域,虽然不是java虚拟机的一部分,但是也非常重要. 程序计数器 顾名思义就是记录当前线程执行的字节码的行号,由于java虚拟机中的多线程是通过多线程轮流切换来实现多线程的,为了线程在切换后能回复到正确的执行位置,每个线程