Java JVisualVM/JConsole中的System.gc()与gc按钮
我目前正在测试我的处理XML模式的概念验证原型,并围绕一个非常消耗内存的树自动机外部库(我已经获得了该库的源代码)构建,我想绘制不同运行的“真实峰值”(堆)内存消耗随模式大小的增加而增加(使用的指标符合我的意图,不会影响问题),或者至少是合理的近似值 为了给出一个数量级,对于一个实际峰值为100MB的运行(我测试了它几次运行完全相同的输入/参数配置,强制使用-Xmx和-Xms的jvm内存减小值),我在线程“main”中得到异常java.lang.OutOfMemoryError:GC开销限制超过了<100MB,结果稳定且可重复)它占用了大约1.1GB,这就是为什么获取实数对我来说非常重要,因为它们相差很大 我花了10天时间在网上和stackoverflow上阅读问题,我真正知道的是:Java JVisualVM/JConsole中的System.gc()与gc按钮,java,memory,garbage-collection,heap-memory,jconsole,Java,Memory,Garbage Collection,Heap Memory,Jconsole,我目前正在测试我的处理XML模式的概念验证原型,并围绕一个非常消耗内存的树自动机外部库(我已经获得了该库的源代码)构建,我想绘制不同运行的“真实峰值”(堆)内存消耗随模式大小的增加而增加(使用的指标符合我的意图,不会影响问题),或者至少是合理的近似值 为了给出一个数量级,对于一个实际峰值为100MB的运行(我测试了它几次运行完全相同的输入/参数配置,强制使用-Xmx和-Xms的jvm内存减小值),我在线程“main”中得到异常java.lang.OutOfMemoryError:GC开销限制超过
理想情况下,运行JVM的内存应该是它高效运行所需的最小内存的2-3倍。试图节省成本低于1美元的几个100MB并不总是有用的 你可以这样强迫GC
private static void force_gc()
{
Object obj = new Object();
WeakReference<Object> ref = new WeakReference<Object>(obj);
obj = null;
while (ref.get() != null)
{
Log.d(LOGTAG, "Forcing gc() ...");
System.gc();
}
}
private static void force_gc()
{
Object obj=新对象();
WeakReference ref=新的WeakReference(obj);
obj=null;
while(ref.get()!=null)
{
d(LOGTAG,“Forcing gc()…”);
gc();
}
}
除此之外。。。我很想知道这个问题的答案。据我所知,Jconsole或任何其他工具只使用System.gc()。没有其他选择。众所周知,java告诉每个人不要依赖System.gc(),但这并不意味着它根本不起作用 所以说到您的查询,您似乎担心为什么按下该按钮直接调用GC&仍然java说System.GC只是“建议”调用GC。我说,该按钮还调用System.gc()&它只是“建议”java尝试使用gc,java决定执行
package ravi.tutorial.java.gc;
/**
* Just to test GC. RUn with below VM arguments.
*
* -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails
*
*
* @author ravi.k
*
*/
public class TestGC {
public static A a;
/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException {
for (int i = 0; i < 100; i++) {
populateObjects();
System.out.println("population done for batch: " + i);
}
}
public static void populateObjects() {
for (int i = 0; i < 100000; i++) {
a = new A("A");
}
//System.gc();
}
}
class A {
String s;
public A(String s) {
this.s = s;
}
}
population done for batch: 0
population done for batch: 1
population done for batch: 2
population done for batch: 3
population done for batch: 4
population done for batch: 5
population done for batch: 6
population done for batch: 7
population done for batch: 8
population done for batch: 9
0.332: [GC 0.332: [ParNew: 17024K->410K(19136K), 0.0024479 secs] 17024K->410K(83008K), 0.0025219 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
population done for batch: 10
population done for batch: 11
population done for batch: 12
population done for batch: 13
population done for batch: 14
population done for batch: 15
population done for batch: 16
population done for batch: 17
population done for batch: 18
population done for batch: 19
0.344: [GC 0.344: [ParNew: 17434K->592K(19136K), 0.0011238 secs] 17434K->592K(83008K), 0.0011645 secs] [Times: user=0.00 sys=0.01, real=0.00 secs]
population done for batch: 20
population done for batch: 21
population done for batch: 22
population done for batch: 23
population done for batch: 24
population done for batch: 25
population done for batch: 26
population done for batch: 27
population done for batch: 28
population done for batch: 29
population done for batch: 30
0.353: [GC 0.353: [ParNew: 17616K->543K(19136K), 0.0011398 secs] 17616K->543K(83008K), 0.0011770 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
population done for batch: 31
population done for batch: 32
population done for batch: 33
0.337: [Full GC (System) 0.337: [CMS: 0K->400K(63872K), 0.0219250 secs] 3296K->400K(83008K), [CMS Perm : 4423K->4422K(21248K)], 0.0220152 secs] [Times: user=0.04 sys=0.00, real=0.02 secs]
population done for batch: 0
0.364: [Full GC (System) 0.364: [CMS: 400K->394K(63872K), 0.0161792 secs] 2492K->394K(83008K), [CMS Perm : 4425K->4425K(21248K)], 0.0162336 secs] [Times: user=0.01 sys=0.00, real=0.02 secs]
population done for batch: 1
0.382: [Full GC (System) 0.382: [CMS: 394K->394K(63872K), 0.0160193 secs] 2096K->394K(83008K), [CMS Perm : 4425K->4425K(21248K)], 0.0160834 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
population done for batch: 2
0.399: [Full GC (System) 0.399: [CMS: 394K->394K(63872K), 0.0160866 secs] 2096K->394K(83008K), [CMS Perm : 4425K->4425K(21248K)], 0.0161489 secs] [Times: user=0.02 sys=0.00, real=0.02 secs]
population done for batch: 3
0.417: [Full GC (System) 0.417: [CMS: 394K->394K(63872K), 0.0156326 secs] 2096K->394K(83008K), [CMS Perm : 4425K->4425K(21248K)], 0.0156924 secs] [Times: user=0.02 sys=0.00, real=0.02 secs]
population done for batch: 4
0.434: [Full GC (System) 0.434: [CMS: 394K->394K(63872K), 0.0157274 secs] 2096K->394K(83008K), [CMS Perm : 4425K->4425K(21248K)], 0.0157897 secs] [Times: user=0.02 sys=0.00, real=0.01 secs]
population done for batch: 5
System.gc();
Thread.sleep(500);
System.gc();