Android 开发 Eclipse 内存调整

在使用Eclipse的过程中,有时会遇到使用Java虚拟机内存不够的情况,这时Eclipse就会提示你重启,我们可以通过设定Eclipse启动参数来调节使用Java虚拟机内存。

右键点击Eclipse的快捷方式,选择属性,在目标的Text里加上 -vmargs -Xmx192M,设定初始化使用Java虚拟机最大内存为192M,也可以设定为其他值。

-Xmx 这个参数是设定使用的最大内存

-Xms 这个参数是设定使用的最小内存

两个参数可以同时使用,也可单独使用。

用编译时报内存不够,翻了一下资料,问题及解决如下:

有时候在编译时报堆不够,可以通过下列方式改变:

在进行大型开发时是不够的。

对于大型开发,应修改 VM 自变量以使有更多的堆可用。

例如,下列设置将允许 Java堆增大为 256MB:

-vmargs -Xmx256M

对应在Eclipse中的设置为:窗口->首选项->JAVA->已安装的JRE,在缺省的VM自变量中增加:-Xmx256M

原因:Java虚拟机默认分配64M内存,如果你的应用比较大,超出64M内存,Java虚拟机就会抛出OutOfMemoryError,并停止运行。不管是什么应用(Web应用、Application等),只需要修改你的机器上的运行Java命令,在javaxxx命令中添加-Xms(最小使用内存)、-Xmx(最大使用内存)即可解决。当然,这儿的内存容量都是指物理内存,不能超出你的机器的物理内存的总容量。

参数中-vmargs的意思是设置JVM参数,所以后面的其实都是JVM的参数了,我们首先了解一下JVM内存管理的机制,然后再解释每个参数代表的含义。

堆(Heap)和非堆(Non-heap)内存

  按 照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给
自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法 的代码都在非堆内存中。

  堆内存分配

  JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指 定,默认是物理内存的1/4。默认空余堆内存小于 40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms
-Xmx
相等以避免在每次GC 后调整堆的大小。

  非堆内存分配

  JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4

  JVM内存限制(最大值)

  首先JVM内存限制于实际的最大物理内存(废话!呵呵),假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然 可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统 下为2G-3G),64bit以上的处理器就不会有限制了。

  PS:当没有起作用时,是因为我们没有遵守eclipse.ini文件的设置规则:

  参数形如“项 值”这种形式,中间有空格的需要换行书写,如果值中有空格的需要用双引号包括起来。比如我们使用-vm C:Javajre1.6.0injavaw.exe参数设置虚拟机,在eclipse.ini文件中要写成这样:

  -vm

  实际运行的结果可以通过Eclipse“Help”-“About Eclipse SDK”窗口里面的“Configuration Details”按钮进行查看。

时间: 2024-10-08 17:42:41

Android 开发 Eclipse 内存调整的相关文章

android开发——Eclipse环境下代码编辑最常用快捷键集锦(来了就不能空手而归)

Ctrl+D:删除光标所在行 Ctrl+/ :注释选中行 :Ctrl+\:注销选中行 Ctrl+Shift+/:注释选中的java或xml代码块: Ctrl+Shift+\:注销选中的Java或xml代码块.(形式:/*      */ 或 <!--      -->) shift + alt + j或/**+Enter(回车键):添加javadoc头注释,形如/** * * * * * */(个人更习惯用/**+Enter(回车键)) Ctrl+K:向前查找与当前选定内容相同的代码(如查找与

android开发 eclipse alt+”/”自动提示失效

最近在学习android开发布局这块.第一次学习,很多代码不熟悉.所以自动提示对我来说很重要.但悲催的就是这个自动提示失效.今天在网上搜索了一下解决办法,主要有一下几种方法:转自 1用于没有一点提示的情况:依次打开eclipse上面的windows ——preferences ——java ——editor —— content assist ,在右上方有一行“select the proposal kinds contained in the ‘default’ content assist

Android开发之内存管理

概念 应用的开发离不开存储,存储分为网络.内存.SDCard文件存储以及外部SDCard2文件存储,开发中一定要注意好内存管理以免oom.卡顿等不好的用户体验,同时还要注意变量的回收,避免内存泄漏.下面呢先来了解一些基本的相关专业术语. RAM(random access memory)随机存取存储器即内存 寄存器(Registers):速度最快的存储场所,因为寄存器位于处理器内部,我们在程序中无法控制 栈(Stack):存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 堆

Android开发eclipse运行程序时报timeout的解决方法

eclipse开发Android程序时,忽然莫名其妙报这个错,之前还好好的.忽然就不行了. Failed to install xxx.apk on device~~~: timeout 尝试过手机里删除应用程序.手机重启.重启adb.重启eclipse.重启电脑后,还是不行. 尝试了半天,找到了方案: eclipse-->window-->Preferences-->Android-->DDMS-->ADB connection time out(ms) 里面的值默认为50

Android开发Eclipse连接真机

(1) 下載 ASM_2_30.zip 并解压缩, 取得 asm.jar(百度搜索下载asm.jar即可!) (2) 将 asm.jar 复制到D:\android-sdk\platform-tools目录下 2. 执行 Android Screen Monitor(这是一个手机屏幕监视的软件,只用于监视手机屏幕的动态,不可以进行操作) win+X 运行cmd控制台(win8平台) 进入D:\android-sdk\platform-tools 执行下面命令: > java -jar  asm.

Android开发 处理内存申请失败的报错(Failed to allocate a 38189038 byte allocation with 16777216 free bytes and 20MB until OOM)

问题原因 当你在操作图片或者其他大量文件数据时会出现:Failed to allocate a 38189038 byte allocation with 16777216 free bytes and 20MB until OOM 报错. 为什么会出现这个报错?原因很简单.因为一个app的内存只有64MB,而你在操作需要更多内存的文件.这个时候app无法申请到内存就会报这个错误. 解决办法 1.在清单文件中添加 android:largeHeap="true" 属性,将APP的内存从

Android 开发避免内存泄露,无法回收

避免对Activity 或者context 的引用导致内存泄露. 1. 不要让生命周期比引用的Acitivity或者Context对象长: 2. 生命周期长的可以使用Application context: 3. 内部类,尽量使用静态类,避免内部类对外部对象引用导致的生命周期变化

android开发 eclipse 里面编写xml无提示

刚开始在网上看别人说的adt版本太高了我的adt是23,我就按他的方法下载了一个22的adt结果集成不了,这种方式果断放弃!! 然后我就注意到了新建项目的时候控制台有这个日志输出 AppWidget declare-styleable AppWidgetProviderInfo not found in file /Users/liping/Desktop/adt-bundle-mac-x86_64-20140624/sdk/platforms/android-19/data/res/value

Android开发实践:检测App的内存占用和泄漏

来源:http://www.linuxidc.com/Linux/2014-03/97563.htm 前段时间开发的Android应用,每次都是在运行了半个小时左右后突然挂掉了,很是莫名其妙,也不知道哪里出了问题,后来一步步排查,发现问题出在JNI层,一个被频繁调用的函数分配的内存忘记释放,导致内存泄漏. 这次问题使我明白,别以为Android程序是基于Java语言,有强大的垃圾回收机制,就完全不用担心内存问题,其实Android程序也要特别小心你的内存,因为毕竟手机不比PC机,内存是极其有限的