1. 程式人生 > >eclipse啟動建立java 虛擬機器失敗

eclipse啟動建立java 虛擬機器失敗

      剛開始玩安卓開發的時候,開啟開發包就出了這麼個錯誤,網上找了一下,將自己的eclipse.ini改成如下式樣:

-startup

plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar

--launcher.library

plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.200.v20120913-144807

-product

com.android.ide.eclipse.adt.package.adtproduct

-showsplash
org.eclipse.platform

--launcher.XXMaxPermSize128m

--launcher.defaultAction
openFile

-vmargs

-Dosgi.requiredJavaVersion=1.7

-XX:MaxPermSize=128m

-Xms256m

-Xmx512m

      就是修改了MaxPermSize 從256m修改為128m,問題解決了。

引數含義

-XX:PermSize=64M JVM初始分配的非堆記憶體;

-XX:MaxPermSize=128M JVM最大允許分配的非堆記憶體,按需分配;

-Xms256m JVM初始分配的堆記憶體;

-Xmx512m JVM最大允許分配的堆記憶體,按需分配。

概念

        按照官方的說法:Java 虛擬機器具有一個堆,堆是執行時資料區域,所有類例項和陣列的記憶體均從此處分配。堆是在 Java 虛擬機器啟動時建立的。在JVM中堆之外的記憶體稱為非堆記憶體(Non-heap memory)。

        可以看出JVM主要管理兩種型別的記憶體:堆和非堆。

        簡單來說堆就是Java程式碼可及的記憶體,是留給開發人員使用的;

        非堆就是JVM留給自己用的, 所以方法區、JVM內部處理或優化所需的記憶體(如JIT編譯後的程式碼快取)、每個類結構(如執行時常數池、欄位和方法資料)以及方法和構造方法的程式碼都在非堆記憶體中。 

XX:MaxPermSize 設定過小的問題

        會經常導致java.lang.OutOfMemoryError: PermGen space 就是記憶體溢位。尤其是我們在web應用開發大量使用jar包的情況下,基本上都會報這個錯誤。我用springmvc+spring+hibernate做程式,除錯的時候,基本上在tomcat中只保留一個應用。不然直接掛了。 

原因分析

        建立java 虛擬機器失敗,說明你配置的記憶體加起來超過了你計算機的實際可用記憶體(Xmx+MaxPermSize),或者超過了作業系統能夠分配給java虛擬機器的記憶體總和,導致虛擬機器無法建立成功,所以一般改小一些就可以解決問題。

        所以這幾個引數需要根據實際情況配置,每臺計算機的情況都是不一樣,沒有統一的標準。對於問題,我們要知其然,還要知其所以然,這樣能學到更多。

相關推薦

eclipse啟動建立java 虛擬機器失敗

      剛開始玩安卓開發的時候,開啟開發包就出了這麼個錯誤,網上找了一下,將自己的eclipse.ini改成如下式樣: -startup plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar -

eclipse啟動時無法建立java虛擬機器

-startup plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar --launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.100.v20110502

VMware Workstation Server服務不能啟動-vmwaer共享虛擬機器失敗

關於vm虛擬機器的。找了半天,找到的解決方案。自己備份一下。 啟動vm共享的時候無法啟動,檢查服務。發現VMware Workstation Server服務無法啟動。 解決方案如下: XP系統下,找到路徑C:\Documents and Settings\All

深入理解Java虛擬機器-Eclipse Memory Analyzer 安裝使用說明

Eclipse Memory Analyzer(簡稱MAT)是一個功能豐富且操作簡單的JVM Heap Dump分析工具,可以用來輔助發現記憶體洩漏減少記憶體佔用。 使用 Memory Analyzer 來分析生產環境的 Java 堆轉儲檔案,可以從數以百萬計的物件中快速計算出物件的 Retai

三、Java虛擬機器自動記憶體管理機制、物件建立及記憶體分配

  1、物件是如何建立: 步驟:    (1)、虛擬機器遇到new <類名>的指令---->根據new的引數是否在常量池中定位一個類的符號引用    (2)、檢測該符號引用代表的類是否已經被載入、解析、和初始化。(如果沒有則

讀書筆記《深入理解Java虛擬機器》 (二)物件建立、記憶體佈局、訪問定位

物件的建立 類載入檢查 檢查這個指令的引數是否能在常量池中定位到一個類的引用 檢查這個符號引用代表的類是否已被載入、解析和初始化過, 如果沒有,那必須先執行相應的類載入過程 確定物件所需記憶體的大小 為新生物件分配記憶體 初始化物件的欄位, 大

Java虛擬機器--物件的建立

下面簡單說一下Java虛擬機器中物件常見的原理: 我們編寫程式碼肯定已經是很熟悉了,通過new關鍵字,給物件例項化並分配記憶體,但是實際上物件的建立是一步步很複雜的過程,我們先看一下物件建立的流程圖。 在物件建立之前先要實現Java類的載入。虛擬機器類載入機制我們之後

深入理解Java虛擬機器-Eclipse Memory Analyzer 安裝說明

Eclipse Memory Analyzer(簡稱MAT)是一個功能豐富且操作簡單的JVM Heap Dump分析工具,可以用來輔助發現記憶體洩漏減少記憶體佔用。 使用 Memory Analyzer

Java虛擬機器(二)物件的建立與OOP-Klass模型

相關文章  Java虛擬機器系列 前言 在前一篇文章中我們學習了Java虛擬機器的結構原理與執行時資料區域,那麼我們大概知道了Java虛擬機器的記憶體的概況,那麼記憶體中的資料是如何建立和訪問的呢?這篇文章會給你答案。 1.物件的建立 物件的建立通常是通過new一個物件而

通過Java虛擬機器理解String s=new String("abc");建立幾個物件

以前看java虛擬機器的知識的時候都是零零散散看的,這段時間剛好自己可以有很多的時間做自己的事情了。所以抽空把《深入理解Java虛擬機器》看完了。這本書講了Java虛擬機器是如何改善程式碼的,以及我們寫的程式碼在虛擬機器上執行的時候會發生什麼,總結的一句話就是可以讓我們通過現

【深入理解Java虛擬機器Java記憶體區域模型、物件建立過程、常見OOM

本文內容來源於《深入理解Java虛擬機器》一書,非常推薦大家去看一下這本書。最近開始看這本書,打算再開一個相關係列,來總結一下這本書中的重要知識點。呃呃呃,說好的那個圖片請求框架呢~  不要急哈,因為這個請求框架設計的內容還是比較廣的,目前業餘時間正在編寫當中,弄好了之後就會

JAVA虛擬機器——物件由生(建立物件)到死(垃圾回收)的底層原理過程

建立物件 在Java程式語言中,建立物件通常是一個new關鍵字而已,但在虛擬機器中,物件(此處物件僅代表普通的Java物件,不包括陣列和Class物件等)的建立是如何呢? ①虛擬機器遇到一條new指令時,首先將去檢查這個指令的引數是否能在常量池中定位到一個類的符號引用,並且檢查這個符號引用代

解決Ubuntu中Eclipse找不到Java虛擬機器的方法

最近在Ubuntu中安裝eclipse時,遇到了eclipse找不到Java虛擬機器的問題,提示如下: A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be availab

Java虛擬機器記憶體分配機制與啟動引數說明

-Xms :表示java虛擬機器堆區記憶體初始記憶體分配的大小,通常為作業系統可用記憶體的1/64大小即可,但仍需按照實際情況進行分配。-Xmx: 表示java虛擬機器堆區記憶體可被分配的最大上限,通常為作業系統可用記憶體的1/4大小。但是開發過程中,通常會將 -Xms 與 -Xmx兩個引數的配置相同的值,其

Java虛擬機器之物件的建立及記憶體佈局

一、物件的建立 在語言層面上,物件的建立通常僅僅是一個new關鍵字而已,而當虛擬機器接收到一個new指令時,它會做如下的操作。 虛擬機器接收到一條new指令時,首先會去檢查這個指定的引數是否能在常量池中定位到一個類的符號引用,並且檢查這個符號引用代表的類是

KVM 使用 virt-install 建立虛擬機器失敗經歷

rawqcow2 Qemu-imgcreate –f raw /home/main.raw 30G virt-install --name=libaohui --ram=4096--vcpus=4-f /home/main.raw--location /home/ns

java虛擬機器啟動引數分類詳解

以下轉自:http://www.2cto.com/kf/201408/322761.html java啟動引數共分為三類; 其一是標準引數(-),所有的JVM實現都必須實現這些引數的功能,而且向後相容; 其二是非標準引數(-X),預設jvm實現這些引數的功能,但是並不保

JAVA虛擬機器:物件的建立過程

簡要說明的話,Java物件的建立過程分為下面幾步: 1、執行相關檢查; 2、為物件分配記憶體,將分配到的記憶體空間都初始化為零值; 3、進行構造程式碼塊和建構函式的初始化  下面詳細介紹這幾個步驟: 1、執行相關檢查 虛擬機器遇到一條new指令時,將會去檢查這個指令的引數是

Java虛擬機器(四)——物件的建立、儲存和定位

物件的建立   Java是一門面向物件的程式語言,Java 程式執行過程中無時無刻都有物件被創建出來,在語言層面上,建立物件(例如克隆,反序列化)通常僅僅是一個new關鍵字而已,例如下面的語句。 Object obj = new Object(); 其實

Java虛擬機器-物件的建立,物件頭

建立 new 檢查new指令的引數,是否能在常量池中定位到一個類的引用符號 檢查該類是否被載入、解析和初始化。 沒有則執行相應的過程 分配記憶體 存在2中情況。取決於java記憶體堆是否規則