我在做: for (Object key : map.keySet()) if (something) map.remove(key); 抛出一个ConcurrentModificationException,所以我改变它: for (Object key : new ArrayList<Object>(map.keySet())) if (something) map.remove(key); 这个和修改地图的任何其他过程都在同步块中。 有更好的解决scheme吗? 如果没有人提出更好的解决scheme,首先要说没有得到滴答声;)
有没有一个Maven“阶段”或“目标”来简单地执行一个Java类的主要方法? 我有一个项目,我想通过只是做一些像“mvn运行”手动testing。
创buildwar文件(使用eclipse)在tomcat上运行的最佳实践是什么? 教程,链接,例子,高度赞赏。
除了一些非常模糊的高级定义,例如“摆脱你的PermGen问题”( 它不是 ,顺便说一句),我不能为我的生活find什么Java VM标志CMSClassUnloadingEnabled实际上做的定义。 我已经看过Sun的/ Oracle的网站,甚至选项列表也没有说明它的作用。 根据国旗的名称,我猜CMS的垃圾收集器不会默认卸载类,这个标志打开它 – 但我不能确定。
我知道常量池的概念和JVM用来处理stringstring的string常量池。 但是我不知道JVM使用哪种types的内存来存储string常量字面值。 堆栈还是堆? 由于它是一个不与任何实例关联的文字,我会假设它将被存储在堆栈中。 但是,如果它没有被任何实例引用,则必须通过GC运行来收集文本(如果我错了,请纠正我),那么如果将它存储在堆栈中又如何处理呢?
我能够序列化一个对象到一个文件,然后再次恢复它,如下面的代码片段所示。 我想序列化成一个string的对象,而不是存储到数据库中。 任何人都可以帮我吗? LinkedList<Diff_match_patch.Patch> patches = // whatever… FileOutputStream fileStream = new FileOutputStream("foo.ser"); ObjectOutputStream os = new ObjectOutputStream(fileStream); os.writeObject(patches1); os.close(); FileInputStream fileInputStream = new FileInputStream("foo.ser"); ObjectInputStream oInputStream = new ObjectInputStream(fileInputStream); Object one = oInputStream.readObject(); LinkedList<Diff_match_patch.Patch> patches3 = (LinkedList<Diff_match_patch.Patch>) one; os.close();
我是Java新手,并且在Java中创build了一个对象数组。 我有一个例如A类 – A[] arr = new A[4]; 但是这只是创build指针(引用)到A而不是4个对象。 它是否正确? 我看到,当我尝试访问创build的对象中的函数/variables时,我得到一个空指针exception。 为了能够操作/访问对象,我必须这样做 – A[] arr = new A[4]; for( int i=0; i<4; i++ ) arr[i] = new A(); 这是正确的还是我做错了什么? 如果这是正确的,那真的很奇怪。 编辑:我觉得这很奇怪,因为在C ++中,你只是说新的A [4],它创build了四个对象。
据说是使用后closures所有JDBC资源的好习惯。 但是,如果我有以下代码,是否有必要closures结果集和语句? Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { conn = // Retrieve connection stmt = conn.prepareStatement(// Some SQL); rs = stmt.executeQuery(); } catch(Exception e) { // Error Handling } finally { try { if (rs != null) rs.close(); } catch (Exception e) {}; try { if (stmt […]
我已经configuration了Java将垃圾收集信息转储到日志( verbose GC )。 我不确定日志中垃圾收集条目的含义。 这些条目的样本张贴在下面。 我在Google上search过 ,没有find明确的解释。 我有一些合理的猜测,但我正在寻找答案,提供严格的条目数字是什么意思,由可靠的来源支持的定义。 所有答案的自动+1引用sun文档。 我的问题是: PSYoungGen是指什么? 我认为这与前一代(年轻一代)有关,但究竟是什么? 数字的第二个三位数与第一个三位数的区别是什么? 为什么名字(PSYoungGen)为第一个三位数字指定,而不是第二个? 每个数字(内存大小)在三元组是什么意思。 例如在109884K-> 14201K(139904K)中,是GC 109884k之前的内存,然后减less到14201K。 第三个数字如何相关? 为什么我们需要第二组数字? 8109.128:[GC [PSYoungGen:109884K-> 14201K(139904K)] 691015K-> 595332K(1119040K),0.0454530secs] 8112.111:[GC [PSYoungGen:126649K-> 15528K(142336K)] 707780K-> 605892K(1121472K),0.0934560secs] 8112.802:[GC [PSYoungGen:130344K-> 3732K(118592K)] 720708K-> 607895K(1097728K),0.0682690sec]
我们正在计算一些运行时受matrix运算约束的东西。 (如果感兴趣,下面有些细节。)这个经验提示下面的问题: 民间有经验的matrixmath(例如,乘法,逆等)Java库的性能? 例如: JAMA 小马 阿帕奇公用math 我search,什么也没找 我们的速度比较的细节: 我们正在使用英特尔FORTRAN(ifort(IFORT)10.1 20070913)。 我们已经用Java(1.6)重新实现了它,使用了Apache commons math 1.2matrix操作,并且它同意所有的数字的准确性。 (我们有理由希望在Java中。)(Java双打,Fortran真正* 8)。 Fortran:6分钟,Java 33分钟,同一台机器。 jvisualm分析显示在RealMatrixImpl中花了很多时间{getEntry,isValidCoordinate}(似乎已经在未发行的Apache commons math 2.0中消失了,但是2.0不会更快)。 Fortran正在使用Atlas BLAS例程(dpotrf等)。 显然这可能取决于我们在每种语言中的代码,但是我们相信大部分时间是在等效的matrix运算中。 在其他一些不涉及库的计算中,Java的速度并不是很慢,有时候要快得多。