@Override public void collect(final StackTraceElement[] stackTrace) { if (samples == null) { samples = SampleNode.createSampleNode(stackTrace); } else { SampleNode.addToSampleNode(samples, stackTrace); } }
@Override public void add(final StackTraceElement[] sample) { synchronized (sync) { if (sampleNode == null) { sampleNode = SampleNode.createSampleNode(sample); } else { SampleNode.addToSampleNode(sampleNode, sample); } } }
@Nullable public static SampleNode createFakeGCSamples(final long prevGCTimeMillis, final long gcTimeMillis, final long stMs) { if (gcTimeMillis > prevGCTimeMillis) { int fakeSamples = (int) ((gcTimeMillis - prevGCTimeMillis) / stMs); if (fakeSamples > 0) { SampleNode node = SampleNode.createSampleNode(GC_FAKE_STACK); for (int i = 0; i < fakeSamples; i++) { // can be optimized SampleNode.addToSampleNode(node, GC_FAKE_STACK); } return node; } else { return null; } } else { return null; } }
private SampleNode testSample() { StackTraceElement[] st1 = new StackTraceElement[3]; st1[0] = new StackTraceElement("C1", "m1", "C1.java", 10); st1[1] = new StackTraceElement("C1", "m2", "C1.java", 11); st1[2] = new StackTraceElement("C1", "m3", "C1.java", 12); SampleNode node = SampleNode.createSampleNode(st1); StackTraceElement[] st2 = new StackTraceElement[1]; st2[0] = new StackTraceElement("C1", "m1", "C1.java", 10); SampleNode.addToSampleNode(node, st2); StackTraceElement[] st3 = new StackTraceElement[3]; st3[0] = new StackTraceElement("C2", "m1", "C2.java", 10); st3[1] = new StackTraceElement("C2", "m2", "C2.java", 11); st3[2] = new StackTraceElement("C2", "m3", "C2.java", 12); SampleNode.addToSampleNode(node, st3); StackTraceElement[] st4 = new StackTraceElement[3]; st4[0] = new StackTraceElement("C1", "m1", "C1.java", 10); st4[1] = new StackTraceElement("C1", "m2", "C1.java", 11); st4[2] = new StackTraceElement("C1", "m4", "C1.java", 14); SampleNode.addToSampleNode(node, st4); return node; }
SampleNode.addToSampleNode(node1, st2); node2.addSample(st2, st2.length - 1); LOG.debug("Node 1", node1); st3[1] = new StackTraceElement("C2", "m2", "C2.java", 11); st3[2] = new StackTraceElement("C2", "m3", "C2.java", 12); SampleNode.addToSampleNode(node1, st3); node2.addSample(st3, st3.length - 1); LOG.debug("Node 1", node1); st4[1] = new StackTraceElement("C1", "m2", "C1.java", 11); st4[2] = new StackTraceElement("C1", "m4", "C1.java", 14); SampleNode.addToSampleNode(node1, st4); node2.addSample(st4, st4.length - 1); SampleNode.addToSampleNode(node1, st1); node2.addSample(st1, st1.length - 1);