草庐IT

垃圾箱

全部标签

java - Java 6 中的垃圾优先 (G1) 收集器是 "production ready"吗?

G1垃圾收集器在最新版本的Java(6)中是否仍被认为是实验性的?它是否安全并可用于生产?编辑:我指的是OracleJVM。 最佳答案 不建议这个Oracle文章,它仍然实验。它将取代CMS,但它的性能似乎还不够好:RelativePerformanceofJava'sGarbageFirst(G1)GarbageCollector?编辑:所以现在G1在JDK7u4中得到“完全支持”,它不再被认为是实验性的,所以我猜它是productionready!. 关于java-Java6中的垃圾

Java 垃圾收集引起的延迟影响性能

我注意到我的应用程序中有一个奇怪的现象。在将对象提交到服务器后,我将对象存储在Hashmap中,并在响应到达时将其删除。我最近注意到运行后性能非常慢。查看后发现内存占用一直在4GB,然后下降到不到1GB。我怀疑它正在清理大量对象,这就是性能变得如此糟糕的原因。所以问题是为什么Java这么晚才进行垃圾收集?也就是说,为什么要等到Heap满了再进行Garbagecollection呢?它不应该定期收集垃圾吗。存储在HashMap中的对象是在那个时候创建​​的,也就是说它们不会长期存在。这是在Linux(RHEL)、OracleJVMHotSpot7上运行的。64位。4个核心。这是应用程序的

java - 如何减少网络垃圾的产生?

我有一个使用netty框架编写的处理大约40kmsg/sec的网络应用程序,我想减少垃圾收集器调用的次数。在分析时我发现有大量的byte[]实例,我怀疑它来自这部分代码:publicclassMessageHandlerextendsSimpleChannelHandler{publicvoidmessageReceived(ChannelHandlerContextctx,finalMessageEvente){ChannelBuffermessage=(ChannelBuffer)e.getMessage();}}是否有可能强制netty以某种方式重用/池ChannelBuffer

java - GC 是否从 Metaspace 收集垃圾?

我一直认为垃圾收集器只清除堆,现在我这么认为。在java8中,permGen被删除并被Metaspace取代。据我所知,Metaspace是垃圾收集器(https://stackoverflow.com/a/24075360/2674303)谁从Metaspace收集垃圾? 最佳答案 我认为您的困惑源于口语化的术语“垃圾收集”,该术语被广泛使用但并未真正描述托管环境中发生的情况。内存管理是一个复杂的过程,它被简化为:识别哪些对象是垃圾,其实就是判断哪些对象可达(读作:不是垃圾),没有遇到的都认为是垃圾如有必要,将对象引用排队到引用队

java - JVM 垃圾收集 - 跟踪年轻一代中的 Activity 对象

在收集年轻代内存时,JVM收集器仅扫描属于年轻代的那些根对象(堆中可直接从根集中访问的对象),并使用写屏障支持的卡表/memset来确定区域老一代的对象可能包含对年轻一代对象的引用。我的问题是,如果年轻收集器确定年轻代中的特定对象只有来自老年代对象的单个外部引用,它如何知道老年代对象本身不是垃圾,因此使年轻代对象“存活”并且不符合收集条件吗?例如,可能有一条从根集直接到老年代对象的路径,而老年代对象又引用了所说的年轻一代对象。年轻收集器通常认为这个年轻代对象是活的,还是在决定忽略/收集它之前如何确定指向它的老年代对象是否是活的/垃圾? 最佳答案

java - Java 垃圾收集器可以随机删除堆上层中的对象吗?

Ehcache的文档指出堆层受Java垃圾收集的约束(与堆外层和磁盘存储相反)。那么,这是否意味着Heap层中的对象可以被GC自发删除?显然,当它们过期或空间不足时,它们会被Ehcache删除——这是一种明确定义的行为。但最重要的是,GC能否就这样随机杀死一些对象,甚至不将它们移到较低层? 最佳答案 GC不会收集Activity对象,即isreachablefromalivethread的对象.堆上Ehcache存储中的对象是可访问的,因此不会被收集。Ehcache曾经尝试使用WeakReference但accordingtothi

Java 垃圾收集器 : top object classes promoted (by size)?

请告诉我在每次年轻GC事件之后确定提升到老年代的年轻代内存组成的最佳方法是什么?理想情况下,我想知道负责的类名,比如每个“年轻一代->老一代”提升block中80%的堆;例子:我有600M的younggen,每个tenure提升6M;我想知道这个6M是由哪些对象组成的。谢谢。 最佳答案 没有简单的方法可以做到这一点,但是,我最近一直在分析大型java应用程序的内存性能,并且可以分享一些经验。以下是我如何找到哪些对象被提升到老一代:首先,您需要确定“旧/永久”空间中有哪些对象。这基本上就是标准的Java堆分析。为此,我推荐jmap。它

java - 在 Java 中如何查看哪些对象已被垃圾回收?

请问,有什么方法可以获取在Java中被垃圾回收的对象的历史记录(它们的变量或至少是类名)?只需添加这些参数(到OracleJVM)-verbose:gc-XX:+PrintGCDetails-XX:+PrintGCTimeStamps不提供任何其他字节的内存。对我的帮助非常有限。感谢所有回复。注意:不幸的是,使用addfinilize()方法的解决方法对我来说不是一个选项(我无权访问它)。 最佳答案 您可以使用Object的finalize方法。当对象即将被GC时调用此方法。从这里,您可以记录所需的信息。

java - 为什么 Major 垃圾回收比 Minor 慢?

通过这个link但仍然对次要和主要GC收集中实际发生的事情感到困惑。假设我在年轻一代中有100个对象,其中85个对象是无法访问的对象。现在当MinorGC运行时,它将回收85个对象的内存并将15个对象移动到较旧的(永久的)代。现在老年代有15个Activity对象,其中3个是不可访问的。假设MajorGC发生了。它会保持15个对象,并为3个无法访问的对象回收内存。据说主要GC比次要GC慢。我的问题是为什么?是不是因为majorGC发生的对象数量通常比minor多,因为minorgc比major发生得更频繁?根据理解majorGC应该更快,因为它需要做的工作更少即从无法访问的对象中回收内

java - 删除未使用的字段是否会导致垃圾回收?

对于涉及异步操作的库,我必须保持对对象的引用,直到满足特定条件。(我知道,这听起来很不寻常。所以这里有一些上下文,尽管它可能并不严格相关:该对象可能被认为是一个directByteBuffer,它用于JNI操作。JNI操作将获取缓冲区的地址。此时,该地址只是一个“指针”,不被视为对字节缓冲区的引用。该地址可能会被使用异步地,稍后时间。因此,必须防止缓冲区被垃圾收集,直到JNI操作完成。)为了实现这一点,我实现了一个基本上等同于此的方法:privatestaticvoidkeepReference(finalObjectobject){Runnablerunnable=newRunnab