草庐IT

java - JVM/GC 是否在程序/线程退出时调用 `finalize()`?

PS:我确实知道如何正确清理,而不依赖于finalize()。Java是否不保证在程序退出时会进行适当的垃圾回收?例如可以说我在缓存中保留了一些数据而不是经常序列化它,我还实现了finalize()希望如果由于任何原因(崩溃除外)我的程序正常退出,然后缓存将由我在finalize()方法中的代码写入DB/file/some-storage。但是根据下面的小实验,JVM似乎并没有“优雅地”清理内存,它只是退出了。Javaspec(参见程序退出)没有说明退出时如何处理内存/gc。还是我应该查看规范的不同部分?以Windows7上使用1.6.0.2764位的以下示例(末尾的输出)为例publ

java - 线程 "main"java.lang.OutOfMemoryError : GC overhead limit exceeded in GWT application 中的异常

我正在使用GWT和GAE开发应用程序。当我尝试重建它或创建工件时,出现了很多错误,如下图所示。我搜索了google和StackOverflow,得到了一些答案,但没有针对我的特定问题。据我所知,我收到错误是因为我的垃圾收集器消耗了大量内存。这里是主要错误Exceptioninthread"main"java.lang.OutOfMemoryError:GCoverheadlimitexceeded。 最佳答案 好的,我解决了这个问题。只需增加虚拟机编译项目所需的内存即可。以前它是128,现在我将它更改为512。随着我的项目的增长,它

java - 是什么导致 Java 7 中的 G1 垃圾收集器中止其并发标记阶段?

我注意到在我的应用程序中使用G1垃圾收集器偶尔会出现完整的GC,并且我正试图找出它们发生的原因。从一个区域扫描开始到下一个区域扫描开始的循环摘录如下。在61807.406,记录了完整的GC,然后是并发标记中止的条目。我想知道的是为什么GC觉得有必要进行完整的、停止世界的垃圾收集以及我如何避免它。请注意thisquestion之前似乎已在OpenJDK邮件列表中询问过,但没有回复。为了简洁起见,我已经删减了年轻GC的细节,但如果需要,我可以将完整的block发布到某个地方。61805.878:[GCconcurrent-root-region-scan-start]61805.882:[

java - JVM 和 GC 调整 - 无 Full GC 的理论

我有两种类型的对象的大型应用程序:长生命周期(缓存)和短生命周期(请求-处理-响应)。理论上,对于这种类型的应用程序,我认为可以配置YoungvsOld空间,因此Old空间消耗是恒定的,从而不会发生FullGC。我已经更改了newSize-maxNewSize参数,但是,旧堆继续上升,直到FullGC。每次FullGC后,消耗下降到20%(缓存占用20%)。出于某种原因,我的对象进入旧空间。我有两个怀疑为什么被转移到旧空间:根据这篇文章:http://chaoticjava.com/posts/gc-tips-and-memory-leaks/它被告知如果您分配了大对象,这些对象将直接

java - 为什么并发标记和清除 (CMS) 没有清理与 Full GC 相同数量的内存?

我的一台生产机器出现了一个奇怪的问题。它承载了一个执行CMS(并发标记和清除)的Java应用程序,但它只清除了老年代的一小部分。我怀疑内存泄漏并尝试堆转储。但是堆转储之前的FullGC几乎清理了所有的老年代。发生了什么?我从未见过Java垃圾回收的这种行为。通常CMS和FullGC应该收集大约相同数量的垃圾,现在CMS多保留了大约10GB。Java1.7.0_75LinuxCentOS7GC日志:**2016-01-04T07:37:40.196+0000:431200.698:[GC[1CMS-initial-mark:21633423K(27336704K)]22826703K(3

java - 分析 Sun 热点的 GC 日志,JVM 6

我正在尝试分析我们应用程序的GC行为(在Tomcat中运行,在Sun'sHotspots、JVM1.6下)。到目前为止,我已经指示JVM使用...将GC日志发送到单独的文件-Xloggc:gc.log-XX:+PrintGCApplicationStoppedTime-XX:+PrintGCApplicationConcurrentTime-XX:+PrintGC-XX:+PrintGCTimeStamps-XX:+PrintGCDetails...并使用jstat使用...输出日志jstat-gc-t290455s>jstat.gc我看到了有趣的信息,但还没有找到可以帮助我分析/可视

java - Java 中的 System.gc() 和 finalize() 方法有什么区别?

我对java的system.gc()和finalize()方法感到困惑。我们不能强制将垃圾对象收集到JVM。我们允许在我们的java代码中编写这两种方法,那么如果两者都用于垃圾收集,那么为java提供两种垃圾收集方法有什么意义呢?请告诉我这两种方法的确切工作原理及其内部工作原理? 最佳答案 System.gc()请求系统执行垃圾回收。Javadoc说:Runsthegarbagecollector.您无法控制垃圾收集器的工作“强度”。垃圾收集器如何在内部工作是特定于VM的,并且它本身就是一个研究课题。但是通常会进行“完整”垃圾收集和

5GC用户偶现语音呼叫失败的问题处理

图片某运营商开通了5GC业务和地址细分功能。在开通IP地址细分后,地市用户反馈拨打电话有失败现象产生。图片1.梳理信令流程,如图1所示。a.SMF删除语音专载是因为EBI冲突。b.EBI冲突是由于MME发出删除数据会话请求后,又将数据会话的EBI分配给语音专载,此时SMF删除数据会话未结束。c.SMF删除数据会话未结束,是由于第7步UDM的注册响应的location是FQDN格式,使SMF删除会话流程处理变长。d.SMF删除会话流程处理变长,是由于给UDM发送去注册消息时,需要先解析FQDN。 图1信令流程图2.MME发送DELETESESSIONREQUEST与CRTBEARERRESPON

Java G1 : Monitoring for memory leaks in production

多年来,我们一直使用+UseParallelOldGC以适度的堆大小运行Java服务。现在,我们开始使用更大的堆和G1收集器推出一项新服务。进展顺利。对于我们使用+UseParallelOldGC的服务,我们通过在收集后查看老年代大小并根据阈值发出警报来监控内存泄漏。这非常有效,实际上两周前就拯救了我们的培根。具体来说,对于+UseParallelOldGC,我们执行以下操作:ManagementFactory.getMemoryPoolMXBeans()搜索名称以"OldGen"结尾的MemoryPoolMXBean结果比较getCollectionUsage().getUsed()

java - GC 多久执行一次?

Java:JVM中的GC执行频率是多少?每一秒?每一分钟?还是随机取决于内存大小?我只是想有个主意。谢谢。 最佳答案 这取决于内存使用情况和存储对象的堆。看看这个http://javarevisited.blogspot.com/2011/04/garbage-collection-in-java.html它不依赖于时间。它仅取决于新的内存要求和可用内存。 关于java-GC多久执行一次?,我们在StackOverflow上找到一个类似的问题: https:/