草庐IT

手工分配

全部标签

java - 原语是否分配了内存地址?

我试图理解一个原始类型在后台的声明和赋值过程。inti;i=3;对于1),在内存栈上分配了一block空间,用来存放一个名为i的int类型值对于2),它把值3赋给上面保留的空间那里有内存地址吗?在我的印象中,内存地址总是与堆上的对象相关联?更新:关于回复:因此,对于堆栈上的每个变量,它们都被分配了一个内存地址,就像堆上的对象一样。我说得对吗?但是对于Java,不是这样的吗? 最佳答案 并不总是涉及地址。如果编译器发现它们的地址从未被程序员使用,则编译器可以将变量放入寄存器。所以你不需要访问主内存。例如,在您上面的代码中,编译器可以生

java:为自定义序列化分配对象引用 ID

出于各种原因,我有一个自定义序列化,我将一些相当简单的对象转储到数据文件中。可能有5-10个类,生成的对象图是非循环的并且非常简单(每个序列化对象都有1或2个对另一个序列化对象的引用)。例如:classFoo{finalprivatelongid;publicFoo(longid,/*otherstuff*/){...}}classBar{finalprivatelongid;finalprivateFoofoo;publicBar(longid,Foofoo,/*otherstuff*/){...}}classBaz{finalprivatelongid;finalprivateLi

java - 字符串创建和字符数组内存分配

我已经阅读了很多关于创建String时内存分配的相互矛盾的文章。有些文章说new运算符在堆中创建一个字符串,而字符串字面量在字符串池[堆]中创建,而有些文章则说new运算符在堆中创建一个对象,在字符串池中创建另一个对象。为了对此进行分析,我编写了以下程序,打印了Stringchar数组和String对象的哈希码:importjava.lang.reflect.Field;publicclassStringAnalysis{privateintshowInternalCharArrayHashCode(Strings)throwsSecurityException,NoSuchField

java - 快速排序算法未正确分配枢轴

我观看了快速排序算法的精彩可视化:http://www.youtube.com/watch?v=Z5nSXTnD1I4我觉得我真正理解了快速排序背后的原理,并且在一些在线指南的帮助下,着手创建我自己的快速排序。这是我想出的:publicvoidquickSort(int[]a,intleft,intright){intindex=partition(a,left,right);if(leftpivot)j--;if(i左右的取值如下:left=0right=arraysize-1很遗憾,输出不正确。问题似乎出在我对枢轴的处理上。在我观看的可视化中,讲师物理地移除了枢轴并让指针指向任何地

java - 为什么不能分配 I <?将类型> 扩展到 <类型>?

以下语句:URLClassLoaderucl=(URLClassLoader)ClassLoader.getSystemClassLoader();Classuclc=ucl.getClass();失败错误:Typemismatch:cannotconvertfromClasstoClass这里为什么需要类型转换?我发现有几篇文章解释了为什么你不能做相反的事情(将T分配给a),但这(有点)显而易见并且易于理解。注意:我是在eclipseLuna下编写代码的,所以我不知道这是Luna的怪癖,还是我真的不了解泛型。 最佳答案 Covar

java - 分配大文件

我需要分配大小接近50GB的文件,但是这段代码:RandomAccessFileout=newRandomAccessFile("C:\\hello.txt","rw");out.setLength(50*1024*1024*1024);//50giga-bytes抛出异常:Exceptioninthread"main"java.io.IOException:Попыткапоместитьуказательнафайлпередначаломфайлаatjava.io.RandomAccessFile.setLength(NativeMethod)atExperiment.main

java - float 到双重分配

考虑以下代码片段floatnum=281.583f;intamount=(int)Math.round(num*100f);floatrounded=amount/100.0f;doubledblPrecision=rounded;doubledblPrecision2=num;System.out.println("num:"+num+"amount:"+amount+"rounded:"+rounded+"dbl:"+dblPrecision+"dbl2:"+dblPrecision2);我得到的输出是num:281.583amount:28158rounded:281.58dbl

Java 分配内存泄漏

我必须假设以下方法不会泄漏内存:publicfinalvoidsetData(finalIntegerp_iData){data=p_iData;}其中data是某个类的属性。每次调用该方法时,新整数都会替换当前存在的数据引用。那么当前/旧数据发生了什么?Java必须在底层做一些事情;否则,每次分配一个对象时,我们都必须清空所有对象。 最佳答案 简单的解释:垃圾收集器会定期查看系统中的所有对象,并查看哪些对象无法再从Activity引用中访问。它释放任何不再可达的对象。请注意,您的方法根本不会创建一个新的Integer对象。例如,可

java - 以负载均衡方式在 4 个线程上分配 10 个无限作业 (Java)

我有10个计算作业,需要(接近)无限时间。例如:计算PI的下一位,solve一个NP-hard约束满足问题等。我有4个线程(所以在一台有8个内核的机器上有一个有4个线程的线程池,所以我还有一些内核可以避免活锁机器和过程)。使用Java8,如何在这4个线程中分配这10个作业?这是个坏主意:ExecutorServicees=Executors.newFixedThreadPool(4);for(Jobj:jobs){es.submit(j);}因为4个工作将开始,但没有一个完成,所以工作5-10永远不会开始。例如,如果我查看10分钟,我预计每个作业运行了大约4分钟。20分钟后,每个作业运

java - 如果实例没有分配泛型类型,则每个循环问题中的泛型

这个问题在这里已经有了答案:Whatisarawtypeandwhyshouldn'tweuseit?(16个答案)关闭6年前。有人可以向我解释为什么明确需要为ForEachLoop实例分配泛型类型吗?为什么编译器会提示:类型不匹配:无法从元素类型Object转换为String?JDK1.5.0_09importjava.util.ArrayList;importjava.util.Collection;publicclassForEachLoop{publicstaticvoidmain(String[]args){//NonfunctionalversionForEachLoopf