Tag: 垃圾收集

“OutOfMemoryError:超出GC开销限制”:使用java解析大型json文件

我尝试用Java解析大型json文件(更多600Mo)。 我的json文件看起来像这样: { “0” : {“link_id”: “2381317”, “overview”: “mjklmklmklmklmk”, “founded”: “2015”, “followers”: “42”, “type”: “Gamer”, “website”: “http://www.google.com”, “name”: “troll”, “country”: “United Kingdom”, “sp”: “Management Consulting” }, “1” : {“link_id”: “2381316”, “overview”: “mjklmklmklmklmk”, “founded”: “2015”, “followers”: “41”, “type”: “Gamer”, “website”: “http://www.google2.com”, “name”: “troll2”, “country”: “United Kingdom”, “sp”: “Management Consulting” } [….] “345240” : {“link_id”: “2381314”, “overview”: […]

java GC如何清理相互关联的对象

任何人都可以告诉我对象的相互之处是什么? java的GC如何解决这个问题? 提前致谢!

将Java对象设置为null是否会再执行任何操作?

我正在浏览一些旧书,并找到了Peter Hagger的“Practical Java”。 在性能部分中,建议在不再需要时将对象引用设置为null 。 在Java中,将对象引用设置为null提高性能或垃圾回收效率? 如果是这样,在什么情况下这是一个问题? 容器类? 对象组成? 匿名内部课程? 我经常在代码中看到这个。 这是现在过时的编程建议还是仍然有用?

另一个字符串的子字符串是否会阻止父字符串被垃圾回收?

String samplel = “ToBeGarbageCollected”; String sample2 = samplel.substring(0, 1); samplel = null; 我知道内部的子串将保留原始String的引用。 但是通过将samplel明确定义为null ,sample1和sample2是否可用于垃圾收集? 我记得在某个地方,如果父对象被显式设置为null所有子值都可用于垃圾回收。 这对上述情况有利吗? 我只是好奇这是否是父母子女关系的情景? 如果没有,这会导致sample1或sample2可用于垃圾收集吗? String samplel = “ToBeGarbageCollected”; String sample2 = new String(samplel .substring(0, 1)); samplel = null;

如何将GC日志写入命名管道

我想配置gc日志,以便它可以写入命名管道? 有谁知道这是否可能?

在循环中定义java对象,我是否需要使用null来释放内存?

如果我有一个循环并在其中创建一个新对象 for ( int i ; i < 10 ; i++) { MyObject obj = new MuObject(); obj.use(); } 我是否需要在开头或结尾的循环内说obj = null以释放该对象使用的内存,或者使用“new”该对象将发送到GC? 我可以在内存使用方面看到这个吗? 更新:所以如果我有大对象和长循环,我应该将对象分配为null或否?

有没有人玩过NIO管道来过滤/拦截System.out?

正如这里建议的那样,我想在选择器循环中做到这一点。 我真正想要的是在我的选择器循环中读取写入系统的内容。 编辑1:我编写了一个完整的解决方案,只是为了找出你不能使用System.setOut重定向GC日志。 它只是直接到FD或其他东西。 显示塞子! 除非我重定向到文件并将此文件传输到我的选择器。 很多工作! 看到这里 。

JFrame对象的垃圾收集器

import javax.swing.*; public class Main { public Main() { JFrame jf = new JFrame(“Demo”); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setSize(100, 100); jf.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new Main(); } }); Runtime.getRuntime().gc(); } } 我调用Runtime.getRuntime().gc(); 用于显式垃圾收集器调用。 但是窗口不会从屏幕上消失,为什么垃圾收集器不会回收JFrame的对象?

JAI是否过早关闭文件句柄?

我正在使用JAI来读取java中的Tiff文件。 使用此代码: RenderedOp renderer = JAI.create(“fileload”, tifFilename); return renderer.getAsBufferedImage(); 使用java 7在一个盒子上工作得很好,但在其他用java 8的盒子上工作得很好: Caused by: com.sun.media.jai.codecimpl.util.ImagingException at com.sun.media.jai.codecimpl.ImagingListenerProxy.errorOccurred(ImagingListenerProxy.java:63) at com.sun.media.jai.codecimpl.TIFFImage.getTile(TIFFImage.java:1087) at javax.media.jai.RenderedImageAdapter.getTile(RenderedImageAdapter.java:148) at javax.media.jai.NullOpImage.computeTile(NullOpImage.java:162) at com.sun.media.jai.util.SunTileScheduler.scheduleTile(SunTileScheduler.java:904) at javax.media.jai.OpImage.getTile(OpImage.java:1129) at javax.media.jai.PlanarImage.copyData(PlanarImage.java:2343) at javax.media.jai.RenderedImageAdapter.copyData(RenderedImageAdapter.java:163) at javax.media.jai.RenderedOp.copyData(RenderedOp.java:2299) at javax.media.jai.PlanarImage.getAsBufferedImage(PlanarImage.java:2525) at javax.media.jai.PlanarImage.getAsBufferedImage(PlanarImage.java:2546) at … Caused by: com.sun.media.jai.codecimpl.util.ImagingException: IOException occured while reading TIFF image data. … 17 more Caused by: java.io.IOException: […]

与堆使用相比,Java应用程序的巨大系统内存使用量

我有像java框架这样的微服务。 许多java进程在一个盒子上运行(ubuntu 14.04.4 LTS)。 java进程使用很多系统内存,因此交换空间被大量使用。 jstat gc报告不解释系统内存使用情况。 所有java进程都使用参数运行 -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 强制JVM将内存返回给系统。 没有参数,问题仍然存在。 一些java组件使用nashorn引擎来编写一些function。 有人可以解释这里的行为吗? 是否有任何jvm patameters限制巨大的系统内存使用? 如何命令操作系统对jvm的内存分配更具限制性? 一些数据: 组件A(与nashorn) 最佳: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2400 xxxxxx 20 0 13.933g 807496 7332 S 0.0 2.5 4180:15 java jstat -gc 2400: S0C S1C S0U S1U EC EU […]