草庐IT

回收站

全部标签

java - 此 java 对象是否符合 List 中的垃圾回收条件

我问的可能是一个愚蠢的问题,所以请原谅我。所以它是这样的:ListbossList=newArrayList();Bossb=null;for(Employeee:ListmyList){b=newBoss();b.setEmployee(e);bossList.add(b);b=null;}所以在上面的场景中,我创建了很多Boss对象,然后取消引用它们(我知道我不需要写“b=null”,但我这样做是为了清楚我的问题)。在正常情况下,我会通过这样做将它们标记为垃圾收集,但因为在这种情况下,我将那些Boss对象添加到列表收集中,它们是否标记为GC?如果不是那么为什么?List集合如何在内

Java 8 元空间垃圾回收

我正在运行的一个Java进程在它运行的头一个小时左右一直表现良好。但是,性能会迅速下降。在分析时,我发现元空间垃圾收集发生得相当频繁,直到小时标记,然后就失去了控制:我很确定我可以使用-XX:MaxMetaspaceSize选项来解决这个问题。但是,我想更多地了解为什么会发生这种行为。我无法想象为什么垃圾收集算法会这样。有没有人对更好的解决方案有解释或建议?谢谢 最佳答案 您可以尝试设置-XX:MaxMetaspaceExpansion=0。这应该在尝试增加元空间之前强制执行完整的GC-释放动态创建的方法/类数据。此外,您可以尝试将

九款常见的 JVM 垃圾回收器

JVM不仅是大厂面试的一个高频问题,也是Java程序员跨入高职级必须掌握的知识点,垃圾回收器作为JVM中核心的一环,了解它的原理,可以帮助我们更好地调优和故障排除,因此,今天我们就来聊聊JVM中9款常见的垃圾回收器。背景 因为Java虚拟机的类型比较多,如果没有特殊说明,本文特指HotSpot虚拟机,在分享回收器之前,我们首先对HotSpot虚拟机背景做个简单的介绍。HotSpotVM,最初是由“LongviewTechnologies”这家小公司设计,并且一开始也不是为Java语言研发。1997年,Sun公司收购了这家公司,从而也就得到了HotSpot虚拟机,在Sun公司的一番优化下,Hot

java - 为什么 Java 中的一些资源没有被垃圾回收,必须关闭或自动关闭?

如果幸运的话,其中一些类会实现AutoClosable但有时你只需要小心并检查现有的方法,就会注意到有一个close、destroy或shutdown方法(或任何其他方法)作者决定给它命名)。这是Java中资源泄漏的主要来源。我和一位同事讨论过这个问题,我也想知道:为什么这不能以某种方式自动化?理论上你可以对这种情况使用finalize,但它是notrecommended.那么为什么没有办法只使用其中一些可关闭的资源并让GC在实例不再可用时自动关闭它们而不必记住明确编写一些close处理代码(如try...)?这是因为在GC启动之前系统可能资源匮乏(文件描述符,...)?注意:我尽可能

java - List subList() 方法是否会阻止列表其余部分的垃圾回收?

我很想知道最新的JVM如何处理通过以下方法保留的垃圾回收内存。publicListgetHallOfFame(){ArrayListlistToSort=newArrayList(map.values());Collections.sort(listToSort,comparator);returnlistToSort.subList(0,5);}在最坏的情况下,我可以想象JVM将listToSort的全部内容保存在内存中,只要保留对子列表的引用即可。有谁知道事实是否如此?我对可以针对特定JVM以一种或另一种方式证明这一点的链接特别感兴趣。 最佳答案

Java 垃圾回收线程优先级

我在面试中被问到以下问题:“垃圾收集线程的默认优先级是多少?”我知道我们不能强制GC或更改其优先级,但我从未听说过它的默认优先级。有人知道吗? 最佳答案 可能面试官正在寻找的答案是GC处于低优先级的后台进程。这样做的原因是运行GC是昂贵的,但它不是(通常)关键进程,所以它应该只在系统有时间做而不是中断关键任务时进行。(实时系统中也存在类似的想法——将不重要的进程放在后台任务中,将所有关键进程放在前台——所有这些都将比后台任务具有更高的优先级。)话虽如此,如果您阅读Sun有关垃圾收集的文献,就会发现仅将GC作为低优先级线程运行是完全不

java - 是否可以从 gc 的角度将 java 对象标记为不可回收以节省 gc-sweep 时间?

是否可以从gc角度将java对象标记为不可回收以节省gc-sweep时间?类似于http://wwwasd.web.cern.ch/wwwasd/lhc++/Objectivity/V5.2/Java/guide/jgdStorage.fm.html的内容特别是non-garbage-collectible容器那里(non-garbage-collectable?)。问题是我有很多普通的临时对象,但我有更大(几千兆)的对象存储用于缓存目的。JavaGC无缘无故应该遍历所有这些缓存千兆字节以试图找到任何要收集的东西,因为它们包含有自己的超时的缓存数据。这样我就可以以自定义方式将我的数据划

Java11改进的垃圾回收器

   传统的C/C++等编程语言,需要程序员负责回收已经分配的内存。显示进行垃圾回收是一件比较困难的事情,因为程序员并不总是知道内存应该何时被释放。如果一些分配出去的内存得不及时回收,就会引起系统运行速度下降,甚至导致程序瘫痪,这种现象被称为内存泄漏。总体而言,显示进行垃圾回收主要有如下两个缺点:   1.程序忘记及时回收无用内存,从而导致内存泄漏,降低系统性能。  2.程序错误地回收程序核心类库地内存,从而导致系统崩溃。    与C/C++程序不同,Java语言不需要程序员直接控制内存回收,Java程序的内存分配和回收都是由JRE(JAVA运行时环境)在后台自动进行的。JRE会负责回收那些不

java - 堆栈上无法访问的对象不能被垃圾回收

出乎我的意料,下面的程序importjava.lang.ref.WeakReference;importjava.util.Arrays;importjava.util.List;publicclassStackTest{publicstaticvoidmain(String[]args){Objectobject1=newObject();Objectobject2=newObject();Listobjects=Arrays.asList(object1,object2);WeakReferenceref1=newWeakReference(object1);WeakReferen

Java 在释放对象和垃圾回收后仍然使用系统内存

我正在运行JVM1.5.0(MacOSX默认值),并且正在Activity监视器中监视我的Java程序。我有以下内容:importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.util.ArrayList;importjava.util.Date;publicclassMemoryTest{publicstaticvoidmemoryUsage(){System.out.println(Runtime.getRuntime().totalMemory