草庐IT

gc_enable

全部标签

java - Full GC 实时时间远远超过 user+sys 时间

我们有一个基于WebJava的应用程序在JBoss上运行,允许的最大堆大小约为1.2GB(机器物理内存总量为2GB)。在某些时候,应用程序会停止响应(对客户端)几分钟。经过一些分析,我们发现罪魁祸首是FullGC。以下是详细GC日志的摘录:74477.402:[完整GC[Psyounggen:3648K->0K(332160K)][PSOLDGEN:778476K-->589497K(819200K)]782124K-->589497K(1151360B)秒][Times:user=3.84sys=3.72,real=646.17secs]我不明白的是,FullGC花费的实时怎么可能是

java - 有没有办法在 Java 中强制对弱和/或软引用对象进行 GC?

这是我的用例。我们正试图缩小应用程序中潜在的内存泄漏的范围,并且我们正在使用内存分析工具对堆进行快照,以便我们可以查找对象实例和引用。(如果有帮助,我们正在使用YourKit。)此应用程序广泛使用动态和CGLIB代理,最终在WeakHashMap中存储了大量对类和类加载器的引用。在我们的测试用例运行之后,我们期望所有对对象X及其类加载器的硬引用都消失了,但是由于最终测试用例中涉及许多代理,我们还剩下许多弱/软引用。(我只能找到WeakHashMap引用,但是YourKit将弱引用和软引用都包装到摘要中的一个行项目中,所以我不能确定我没有在某处遗漏软引用。)即使在从JVM请求完整GC之后

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 - JVM 和 GC 调整 - 无 Full GC 的理论

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

JAVA SWT/AWT Eclipse Mac OSX Java Cocoa CompatibilityMode Enabled

我正在开发一个相当复杂的Java应用程序,混合了Swing和SWT。每当我启动应用程序时,这是控制台输出(应用程序未显示):2012-12-1912:45:45.359java[3442:f07][JavaCocoaComponentcompatibilitymode]:Enabled2012-12-1912:45:45.360java[3442:f07][JavaCocoaComponentcompatibilitymode]:SettingtimeoutforSWTto0.100000我遵循了许多指南和教程设置:System.setProperty("com.apple.awt.C

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的,并且它本身就是一个研究课题。但是通常会进行“完整”垃圾收集和

java - Spring 安全 : what is the difference between account locked and not enabled

UserDetails接口(interface)有两个看似相同的属性,locked和enabled。这两个不是正好相反吗? 最佳答案 在oldAcegiblog上找到这个-希望对您有所帮助Disabled表示帐户出于某种原因已被管理或自动禁用。通常需要一些操作才能释放它。锁定表示帐户因无效登录尝试而被自动暂停。通常需要时间的流逝或(较少)请求手动解锁才能释放它。除了向用户提供更多信息错误外,Acegi安全代码不使用这种区别。还有一个应该返回不同异常的顺序,这样一个禁用或锁定的帐户就不会返回一个错误的凭证异常。有关详细信息,请参阅Ja