是否有可能在Java中强制进行垃圾收集,即使它很棘手?我知道System.gc();,Runtime.gc();但他们只建议做GC.我怎么强迫GC?
我正在运行Ubuntu服务器版,我想采取Tomcat的线程转储.
所以,我首先尝试找出哪个PID tomcat使用:
$ jps -l
5809 sun.tools.jps.Jps
Run Code Online (Sandbox Code Playgroud)
但它不在那里?
所以,我用了之后top发现了PID 5730.
然后我调用jstack来获取线程转储:
$ sudo jstack -l 5730
5730: Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?:-(
我已经尝试按照Jstack中的描述导出CATALINA_TMPDIR,并且Jstat停止使用升级到JDK6u23但是没有改变任何东西:
$ export CATALINA_TMPDIR=/tmp
$ sudo /etc/init.d/tomcat6 restart
* Stopping Tomcat servlet engine tomcat6
...done.
* Starting Tomcat servlet engine tomcat6
...done.
$ sudo jstack -l 5934 // …Run Code Online (Sandbox Code Playgroud) 如何在外部请求Java垃圾收集,从JAR启动程序(使用Windows BAT)?
System.gc()但是......当我从命令行/ bat运行jar时,java控制台似乎没有打开.用简短的谷歌搜索找不到帮助,也许有人在这里?
我有一个24x6计划运行的应用程序.目前,在运行几天后,将自动执行Full GC - 通常在一天的繁忙时段执行,这会对用户响应时间产生负面影响.
我想做的是强制使用全GC - 可能在每晚的午夜,在极低的使用时间内 - 以防止它在白天发生.我已经尝试过System.gc(),但它似乎并不能保证何时会发生Full GC,或者即使它会发生.有没有办法做到这一点?
版本信息:
Java(TM)SE运行时环境(版本1.6.0_11-b03)
Java HotSpot(TM)服务器VM(版本11.0-b16,混合模式)
另外 -
更具体地说,我正在寻找一种技术来确保Full GC将要发生,而不是一个简单的方法/函数来调用它来运行它.
目前,我正在考虑修改CMS使用的百分比阈值,以确定何时需要完整GC.
谢谢你的帮助.