![](/img/trans.png)
[英]How to know if the float value is greater than Integer.MAX_VALUE?
[英]How to create more than Integer.MAX_VALUE objects in a jvm?
從這個討論中,我需要編寫一個程序來知道問題的答案:“如果對象多於int的maxvalue,那么jvm將什么分配給對象地址?”,
使用eclipse.ini中的以下設置
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20131025-1931
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xms6144m
-Xmx6144m
及以下程序,
class SubClass {
int x = 4;
int getX(){
return x;
}
}
public class Dummy2 {
public static void main(String[] args){
SubClass obj[] = null;
obj = new SubClass[Integer.MAX_VALUE];
for(int i = 0; i < Integer.MAX_VALUE; i++){
obj[i] = new SubClass();
}
SubClass objRef1 = new SubClass();
System.out.println(objRef1);
System.out.println(objRef1.hashCode());
SubClass objRef2 = new SubClass();
System.out.println(objRef2);
System.out.println(objRef2.hashCode());
}
}
出現錯誤:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
我的目標是查看對象地址的值以及為最后兩個對象生成的哈希碼。
我正在使用在64位Windows 7操作系統上運行的64位jvm,該操作系統為每個本機用戶級別的進程提供8TB的虛擬空間。 硬件具有8GB RAM芯片。
請幫我!!
這里有很多誤解。
我的目標是查看對象內部地址的值以及為最后兩個對象生成的哈希碼。
它們是隨機的,因此它們與第一個元素之間沒有區別。
我想你是在問這個問題 。
您不必創建多個Integer.MAX_VALUE
對象。 您只需要創建一些,直到發生碰撞為止。 您可以相對輕松地做到這一點。
public static void main(String[] args) throws Exception {
final int LENGTH = Integer.MAX_VALUE / 256;
Object[] values = new Object[LENGTH];
int count = 0;
for (int i = 0; i < Integer.MAX_VALUE; i++) {
Object o = new Object();
int hashCode = o.hashCode();
if (hashCode > LENGTH)
continue;
if (values[hashCode] != null) {
System.out.println("found after " + count + ": " + values[hashCode] + " same hashcode as " + o);
System.out.println(values[hashCode] == o);
System.exit(0);
} else {
System.out.println(hashCode);
values[hashCode] = o;
count++;
}
}
}
例如,在我的計算機上,此操作在4712個新實例且其hashCode
小於Integer.MAX_VALUE / 256
之后停止。 這意味着兩個不符合GC條件的Object
實例具有相同的hashCode
。
以上印刷品
...
5522036
4166797
5613746
found after 4712: java.lang.Object@6aca04 same hashcode as java.lang.Object@6aca04
false
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.