草庐IT

gc_collect_cycles

全部标签

java - 内存泄漏在 MAT 中显示为 GC root : Native Stack

我有一些我运行的第三个库代码,一段时间后我遇到了OutOfMemoryError。所以我启动了EclipseMAT并分析了内存。现在似乎无法释放内存,因为有一个对象显示为GCroot:NativeStack。阅读documentation:Inoroutparametersinnativecode,suchasuserdefinedJNIcodeorJVMinternalcode.ThisisoftenthecaseasmanymethodshavenativepartsandtheobjectshandledasmethodparametersbecomeGCroots.Forexa

java - 是否可以保证 java.util.Collections.shuffle() 背后的算法在未来的 Java 版本中保持不变?

在未来的java版本中,以下程序是否保证生成具有相同内容和顺序的列表?importjava.util.ArrayList;importjava.util.Arrays;importjava.util.Collections;importjava.util.List;importjava.util.Random;publicclassTest{publicstaticvoidmain(String[]args){Listlist=newArrayList(Arrays.asList("A","B","C","D"));Collections.shuffle(list,newRandom(

java - 我应该重写 Collections 的 hashCode() 吗?

假设我有一些包含各种字段的类:classMyClass{privateStrings;privateMySecondClassc;privateCollectioncoll;//...@OverridepublicinthashCode(){//????}}其中,我确实有各种我想存储在HashMap中的对象。为此,我需要拥有MyClass的hashCode()。我必须递归进入所有字段和各自的父类,以确保它们都正确实现了hashCode(),否则MyClass的hashCode()可能不会考虑某些值。这样对吗?我如何处理该集合?我可以一直依赖它的hashCode()方法吗?它会考虑我的s

Java,为什么 collections.sort() 仍然适用于非比较器类型的参数?

我知道在javaCollections类中,有一个静态方法sort:sort(Listlist,Comparatorc**)sort中的第二个参数应该是一个实现Comparator接口(interface)的对象及其比较方法。但是当我学习lambda的方法引用时,我看到了这个例子:publicclassTest{publicstaticvoidmain(String[]args){newTest().sortWord();}publicvoidsortWord(){Listlst=newArrayList();lst.add("hello");lst.add("world");lst.

java - 即使没有 GC 根,类加载器也不会被垃圾回收

我们有一个在GlassfishV2.1.1下运行的复杂应用程序。为了能够动态加载我们的代码,我们实现了一个能够重新定义类的CustomClassloader。行为非常简单:当动态加载的类发生变化时,CustomClassloader的当前实例将被“丢弃”,并创建一个新实例来重新定义所需的类。除了同一个类被重新加载几次后(因此每次创建一个新的CustomClassloader),这工作得很好,我们得到一个PermGen空间错误,因为CustomClassloader的其他实例没有被垃圾收集。(该类应该只有一个实例)我尝试了不同的方法来追踪泄漏的位置:visualvm=>我进行堆转储并提取

java - 长时间 GC 在应用程序中暂停

我目前运行的应用程序需要最大堆大小为16GB。目前我使用以下标志来处理垃圾回收。-XX\:+UseParNewGC,-XX\:+UseConcMarkSweepGC,-XX:CMSInitiatingOccupancyFraction=50,-XX\:+DisableExplicitGC,-XX\:+PrintGCDateStamps,-XX\:+PrintGCDetails,-Xloggc\:/home/user/logs/gc.log但是,我注意到在某些垃圾回收过程中,应用程序会锁定几秒钟然后继续运行-这是完全不能接受的,因为它是游戏服务器。可以从我的垃圾收集日志中找到一份文件he

java - Collections.synchronizedList() 使用什么模式

我正在阅读方法Collections.synchronizedList()的实现并且很困惑它是装饰器模式还是代理模式的例子? 最佳答案 绝对是装饰器。它用相同接口(interface)的不同实现包装提供的列表,该接口(interface)的方法改变相同底层集合的行为(通过同步访问),同时将方法直接委托(delegate)给包装的实例。如果它是代理模式,则您不一定需要在构造期间传递要包装的集合,并且这些方法在幕后不一定会在每次调用时都引用完全相同的集合实例。另见:ExamplesofGoFDesignPatternsinJava'sc

java - 哪些 VM 或 GC 支持 JNI 固定?

GetArrayElements函数族被记录为复制数组或将它们固定到位(并且这样做可以防止压缩垃圾收集器移动它们)。它被记录为比GetPrimitiveArrayCritical更安全、限制更少的替代方案.但是,我想知道哪些VM和/或垃圾收集器(如果有的话)实际固定数组而不是复制它们。 最佳答案 较旧的IBMJVM已固定(1.4及更早版本-即:不是当前的IBMJ9JVM),但从那时起,它们就没有了。一般来说,JVM不喜欢固定,因为它确实会扰乱复制垃圾收集器,而这正是当今大多数生产JVM所做的事情。我不是100%最新的(即:最新的Ja

java - 为什么 WeakHashMap 在 GC 后对值有强引用?

WeakHashMap中的关键对象变得弱可达。并且map应该在GC之后删除条目。但是对值对象的强引用仍然存在。为什么?使用Guava弱键映射观察到相同的行为。预期输出:...refKey.get=nullrefValue.get=null但是我得到了输出:map.keys=[]map.values=[]map.size=0refKey.get=nullrefValue.get=(123)代码:importjava.lang.ref.WeakReference;importjava.util.Map;importjava.util.WeakHashMap;importcom.google

JavaFX : Rotated animation delay between cycles

我使用以下代码为基于RotatedTranstion的ImageView创建了一个动画:ImageViewicon=ImageCache.getImage("refresh.png");RotateTransitionrotateTransition=newRotateTransition(Duration.millis(2000),icon);rotateTransition.setByAngle(360.0);rotateTransition.setCycleCount(Timeline.INDEFINITE);rotateTransition.play();这会产生以下动画:Ro