Enviar pesquisa
Carregar
Open Source Debugging for Java 1.4.0
•
9 gostaram
•
1,441 visualizações
Matthew McCullough
Seguir
Open Source Debugging for Java given at the Dallas MUG
Leia menos
Leia mais
Educação
Tecnologia
Vista de apresentação de diapositivos
Denunciar
Compartilhar
Vista de apresentação de diapositivos
Denunciar
Compartilhar
1 de 152
Baixar agora
Baixar para ler offline
Recomendados
Webinar Test-Driven JavaScript
Webinar Test-Driven JavaScript
Sebastian Springer
ITFT - Java Coding
ITFT - Java Coding
Blossom Sood
Secure Coding for Java - An introduction
Secure Coding for Java - An introduction
Sebastien Gioria
Thinking in C/C++, coding in Java
Thinking in C/C++, coding in Java
anomalizer
20. Object-Oriented Programming Fundamental Principles
20. Object-Oriented Programming Fundamental Principles
Intro C# Book
Deep C
Deep C
Olve Maudal
Using Git and GitHub Effectively at Emerge Interactive
Using Git and GitHub Effectively at Emerge Interactive
Matthew McCullough
All About GitHub Pull Requests
All About GitHub Pull Requests
Matthew McCullough
Recomendados
Webinar Test-Driven JavaScript
Webinar Test-Driven JavaScript
Sebastian Springer
ITFT - Java Coding
ITFT - Java Coding
Blossom Sood
Secure Coding for Java - An introduction
Secure Coding for Java - An introduction
Sebastien Gioria
Thinking in C/C++, coding in Java
Thinking in C/C++, coding in Java
anomalizer
20. Object-Oriented Programming Fundamental Principles
20. Object-Oriented Programming Fundamental Principles
Intro C# Book
Deep C
Deep C
Olve Maudal
Using Git and GitHub Effectively at Emerge Interactive
Using Git and GitHub Effectively at Emerge Interactive
Matthew McCullough
All About GitHub Pull Requests
All About GitHub Pull Requests
Matthew McCullough
Adam Smith Builds an App
Adam Smith Builds an App
Matthew McCullough
Git's Filter Branch Command
Git's Filter Branch Command
Matthew McCullough
Git Graphs, Hashes, and Compression, Oh My
Git Graphs, Hashes, and Compression, Oh My
Matthew McCullough
Git and GitHub at the San Francisco JUG
Git and GitHub at the San Francisco JUG
Matthew McCullough
Finding Things in Git
Finding Things in Git
Matthew McCullough
Git and GitHub for RallyOn
Git and GitHub for RallyOn
Matthew McCullough
Migrating from Subversion to Git and GitHub
Migrating from Subversion to Git and GitHub
Matthew McCullough
Git Notes and GitHub
Git Notes and GitHub
Matthew McCullough
Intro to Git and GitHub
Intro to Git and GitHub
Matthew McCullough
Build Lifecycle Craftsmanship for the Transylvania JUG
Build Lifecycle Craftsmanship for the Transylvania JUG
Matthew McCullough
Git Going for the Transylvania JUG
Git Going for the Transylvania JUG
Matthew McCullough
Transylvania JUG Pre-Meeting Announcements
Transylvania JUG Pre-Meeting Announcements
Matthew McCullough
Game Theory for Software Developers at the Boulder JUG
Game Theory for Software Developers at the Boulder JUG
Matthew McCullough
Cascading Through Hadoop for the Boulder JUG
Cascading Through Hadoop for the Boulder JUG
Matthew McCullough
JQuery Mobile
JQuery Mobile
Matthew McCullough
R Data Analysis Software
R Data Analysis Software
Matthew McCullough
Please, Stop Using Git
Please, Stop Using Git
Matthew McCullough
Dr. Strangedev
Dr. Strangedev
Matthew McCullough
Jenkins for One
Jenkins for One
Matthew McCullough
Lean Fluffy Startups
Lean Fluffy Startups
Matthew McCullough
Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The Basics
TechSoup
A Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy Reform
Chameera Dedduwage
Mais conteúdo relacionado
Mais de Matthew McCullough
Adam Smith Builds an App
Adam Smith Builds an App
Matthew McCullough
Git's Filter Branch Command
Git's Filter Branch Command
Matthew McCullough
Git Graphs, Hashes, and Compression, Oh My
Git Graphs, Hashes, and Compression, Oh My
Matthew McCullough
Git and GitHub at the San Francisco JUG
Git and GitHub at the San Francisco JUG
Matthew McCullough
Finding Things in Git
Finding Things in Git
Matthew McCullough
Git and GitHub for RallyOn
Git and GitHub for RallyOn
Matthew McCullough
Migrating from Subversion to Git and GitHub
Migrating from Subversion to Git and GitHub
Matthew McCullough
Git Notes and GitHub
Git Notes and GitHub
Matthew McCullough
Intro to Git and GitHub
Intro to Git and GitHub
Matthew McCullough
Build Lifecycle Craftsmanship for the Transylvania JUG
Build Lifecycle Craftsmanship for the Transylvania JUG
Matthew McCullough
Git Going for the Transylvania JUG
Git Going for the Transylvania JUG
Matthew McCullough
Transylvania JUG Pre-Meeting Announcements
Transylvania JUG Pre-Meeting Announcements
Matthew McCullough
Game Theory for Software Developers at the Boulder JUG
Game Theory for Software Developers at the Boulder JUG
Matthew McCullough
Cascading Through Hadoop for the Boulder JUG
Cascading Through Hadoop for the Boulder JUG
Matthew McCullough
JQuery Mobile
JQuery Mobile
Matthew McCullough
R Data Analysis Software
R Data Analysis Software
Matthew McCullough
Please, Stop Using Git
Please, Stop Using Git
Matthew McCullough
Dr. Strangedev
Dr. Strangedev
Matthew McCullough
Jenkins for One
Jenkins for One
Matthew McCullough
Lean Fluffy Startups
Lean Fluffy Startups
Matthew McCullough
Mais de Matthew McCullough
(20)
Adam Smith Builds an App
Adam Smith Builds an App
Git's Filter Branch Command
Git's Filter Branch Command
Git Graphs, Hashes, and Compression, Oh My
Git Graphs, Hashes, and Compression, Oh My
Git and GitHub at the San Francisco JUG
Git and GitHub at the San Francisco JUG
Finding Things in Git
Finding Things in Git
Git and GitHub for RallyOn
Git and GitHub for RallyOn
Migrating from Subversion to Git and GitHub
Migrating from Subversion to Git and GitHub
Git Notes and GitHub
Git Notes and GitHub
Intro to Git and GitHub
Intro to Git and GitHub
Build Lifecycle Craftsmanship for the Transylvania JUG
Build Lifecycle Craftsmanship for the Transylvania JUG
Git Going for the Transylvania JUG
Git Going for the Transylvania JUG
Transylvania JUG Pre-Meeting Announcements
Transylvania JUG Pre-Meeting Announcements
Game Theory for Software Developers at the Boulder JUG
Game Theory for Software Developers at the Boulder JUG
Cascading Through Hadoop for the Boulder JUG
Cascading Through Hadoop for the Boulder JUG
JQuery Mobile
JQuery Mobile
R Data Analysis Software
R Data Analysis Software
Please, Stop Using Git
Please, Stop Using Git
Dr. Strangedev
Dr. Strangedev
Jenkins for One
Jenkins for One
Lean Fluffy Startups
Lean Fluffy Startups
Último
Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The Basics
TechSoup
A Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy Reform
Chameera Dedduwage
9548086042 for call girls in Indira Nagar with room service
9548086042 for call girls in Indira Nagar with room service
discovermytutordmt
Measures of Dispersion and Variability: Range, QD, AD and SD
Measures of Dispersion and Variability: Range, QD, AD and SD
Thiyagu K
Grant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy Consulting
TechSoup
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
ciinovamais
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdf
SoniaTolstoy
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdf
Jayanti Pande
Measures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and Mode
Thiyagu K
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
kauryashika82
Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)
eniolaolutunde
Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1
Maestría en Comunicación Digital Interactiva - UNR
Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104
misteraugie
Q4-W6-Restating Informational Text Grade 3
Q4-W6-Restating Informational Text Grade 3
JemimahLaneBuaron
The basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptx
heathfieldcps1
Sports & Fitness Value Added Course FY..
Sports & Fitness Value Added Course FY..
Disha Kariya
Arihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdf
chloefrazer622
Interactive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communication
nomboosow
Unit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptx
VishalSingh1417
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impact
dawncurless
Último
(20)
Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The Basics
A Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy Reform
9548086042 for call girls in Indira Nagar with room service
9548086042 for call girls in Indira Nagar with room service
Measures of Dispersion and Variability: Range, QD, AD and SD
Measures of Dispersion and Variability: Range, QD, AD and SD
Grant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy Consulting
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdf
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdf
Measures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and Mode
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)
Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1
Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104
Q4-W6-Restating Informational Text Grade 3
Q4-W6-Restating Informational Text Grade 3
The basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptx
Sports & Fitness Value Added Course FY..
Sports & Fitness Value Added Course FY..
Arihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdf
Interactive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communication
Unit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptx
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impact
Open Source Debugging for Java 1.4.0
1.
Open Source Java Debugging Tools
by Matthew McCullough of Ambient Ideas, LLC
2.
Code Examples http://github.com/matthewmccullough Twitter
@matthewmccull Email matthewm@ambientideas.com Blog http://www.ambientideas.com/blog sidebar has my social networking profile links
3.
http://delicious.com/matthew.mccullough/opensource+debugging
4.
Not
5.
Ins tead
6.
7.
jhat
jstat jmap jps jstack VisualVM Eclipse TPTP MAT TOD jstatd
8.
Hotspot JVMs
9.
jps process list
10.
What JVM options did
we use when we started up the app server?
11.
jps
12.
jps -l
Sh ow fu ll pa ck ag e na m e
13.
Sh
ow jps -l -v Sh fu ow ll pa JV ck M ag e ar gu nam m e en ts
14.
Sh
ow Sh fu ow ll pa JV ck M ag jps -l -v -m e Sh ar ow gu nam m e m en ts ain () ar gu m en ts
15.
VIDEO JPS
16.
only local?
17.
jps 10.15.25.32
18.
How?
19.
Run jstatd daemon
20.
Allow-all policy
21.
y
lic Po ur Yo jstatd -J-Djava.security.policy=allowall.pol
22.
grant codebase "file:${java.home}/../lib/tools.jar"
{ permission java.security.AllPermission; };
23.
grant codebase "file:${java.home}/../lib/tools.jar"
{ permission java.net.SocketPermission "<YourDesktopHostnameOrIP>:1099", "accept, connect, listen, resolve"; };
24.
let’s start up
the jstatd daemon
25.
VIDEO JSTATD
26.
jps 10.15.25.32
27.
Windows let’s run JPS
from across the network to a Mac
28.
VIDEO JPS REMOTE
29.
jstat process info
30.
Sh
ow ga rb ag e jstat -gcutil <pid> co lle ct io n
31.
32.
es
pl m sa n ee ns tw io tit be pe s re m jstat -gcutil <pid> 500 999
33.
es
lin X y er ev r e ad he ow Sh jstat -gcutil -h5 <pid> 500 999
34.
VIDEO JSTAT REMOTE
35.
jstack stack dumps
36.
jstack <pid>
37.
38.
jstack -F <pid>
39.
of
in ck lo e os rb Ve jstack -l <pid>
40.
41.
Direct this output
to a file with a tdump extension Use TDA on VisualVM to analyze it
42.
javap class file
disassembler
43.
We added a
new method to a class. Is it on the server-deployed copy of the app?
44.
javap classfile
45.
46.
e
os rb Ve javap -v classfile
47.
48.
major version: 48
= Java 1.4 major version: 49 = Java 5 major version: 50 = Java 6
49.
In
te rn al ty pe javap -s classfile si gn at ur es
50.
51.
ds
ho et m te iva Pr ow Sh javap -private classfile
52.
53.
Survey
54.
StackOverflow.com
55.
Your favorite Open Source
Debugging Tool?
56.
❸
VisualVM
57.
❷
Eclipse
58.
❶
System.out.println(brokenobj) System.out.println(broke System.out.println(brokenobj); nobj) System.out.println(brokenobj); System.out.p rintln(brokenobj); System.out.pr intln(brokenobj); System.out.println(brokenobj); System.out.println(brokenobj); System.out.println(brokenobj); System.out.println(brokenobj); ystem.out.println(broken obj); System.out.println(brokenob System.out.println(brokenobj); System.out.p rintln(brokenobj) System.out.println(brokenobj);
59.
I’ve got the
only tool I need
60.
61.
62.
jmap memory maps
63.
jmap histogram
64.
jmap -histo <pid>
65.
66.
jmap -histo:live <pid>
67.
jmap heap dump
68.
jmap -dump:file=myfile.hprof <pid>
69.
70.
java -XX:+HeapDumpOnOutOfMemoryError MyApp
71.
jinfo -flag +HeapDumpOnOutMemoryError
<pid>
72.
OutOfMemoryError Drive in to
office!
73.
jhat heap analysis
74.
jhat -J-Xmx512m <yourdump.hprof>
75.
jhat -J-Xmx512m <yourdump.hprof>
76.
jhat -J-Xmx512m <yourdump.hprof>
77.
78.
http://localhost:7000
79.
80.
OQL
81.
82.
select z from
java.lang.String z
83.
select z from
java.lang.String z where z.count >= 50
84.
85.
http://blogs.sun.com/sundararajan/date/200509
86.
87.
eclipse memory analyzer
M.A.T.
88.
EclipseMemoryAnalyzer Purpose Investigate memory usage. Useful
for Visualizing memory footprint. Finding memory leaks. Querying through (OQL) allocated memory. Discovering heavy memory allocation sources.
89.
EclipseMemoryAnalyzer Gotcha Doesn’t create heap
dumps, just analyzes. Available as a plugin or standalone RCP app.
90.
java.util.HashMap java.lang.String
java.lang.String java.lang.String char[] char[] char[] char[] char[] char[] char[] char[] char[] char[] char[] char[] char[] char[] char[]
91.
Shallow Heap
java.util.HashMap java.lang.String java.lang.String java.lang.String char[] char[] char[] char[] char[] char[] char[] char[] char[] char[] char[] char[] char[] char[] char[]
92.
Retained Heap
java.util.HashMap java.lang.String java.lang.String java.lang.String char[] char[] char[] char[] char[] char[] char[] char[] char[] char[] char[] char[] char[] char[] char[]
93.
Load a heap
dump in MAT
94.
VIDEO ECLIPSE MAT
95.
Run some OQL
on it
96.
VIDEO ECLIPSE MAT
OQL
97.
btrace
98.
99.
Can you put
a few debugging “sysouts” into that running production app?
100.
BTrace
Tracing
101.
BTrace
Tracing
102.
BTrace
Tracing Production-time Operates on deployed code Uses debugging hooks to re-deploy class files Runtime injection of tracing statements
103.
BTrace
Tracing Code Tracing scripts written in Java. Limited to a catalog of static methods. Compiled at design time or tracing time. Unsafe mode
104.
BTrace
Tracing Code Tracing scripts written in Java. Limited to a catalog of static methods. Compiled at design time or tracing time. Unsafe mode
105.
import
com.sun.btrace.annotations.*; import static com.sun.btrace.BTraceUtils.*; import com.sun.btrace.AnyType; import java.lang.management.MemoryUsage; import java.util.concurrent.atomic.AtomicInteger; import java.util.Map; @BTrace public class TraceAllMethodCalls { /** * METHOD CALL TRACEPOINT. */ @OnMethod( clazz="com.ambientideas.HelloWorldJava", method="print", location=@Location(value=Kind.CALL, clazz="/.*/", method="/.*/") ) public static void m(AnyType[] args) { //System.out.println("Hello"); println(strcat("****** WE'VE ENTERED A METHOD ON CLASS: ", name(probeClass ()))); println(strcat("****** WE'VE ENTERED METHOD: ", probeMethod())); } @OnMethod( clazz="/.*/",
106.
import java.lang.management.MemoryUsage; import java.util.concurrent.atomic.AtomicInteger; import
java.util.Map; @BTrace public class TraceAllMethodCalls { /** * METHOD CALL TRACEPOINT. */ @OnMethod( clazz="com.ambientideas.HelloWorldJava", method="print", location=@Location(value=Kind.CALL, clazz="/.*/", method="/.*/") ) public static void m(AnyType[] args) { //System.out.println("Hello"); println(strcat("****** WE'VE ENTERED A METHOD ON CLASS: ", name(probeClass ()))); println(strcat("****** WE'VE ENTERED METHOD: ", probeMethod())); } @OnMethod( clazz="/.*/", method="println" ) public static void m2(AnyType[] args) { println(strcat("****** WE'VE ENTERED A METHOD ON CLASS: ", name(probeClass ()))); println(strcat("****** WE'VE ENTERED METHOD: ", probeMethod())); } /** * ONEXIT TRACEPOINT. CALLED WHEN A BTRACE METHOD CALLS EXIT(INT).
107.
)
public static void m(AnyType[] args) { //System.out.println("Hello"); println(strcat("****** WE'VE ENTERED A METHOD ON CLASS: ", name(probeClass ()))); println(strcat("****** WE'VE ENTERED METHOD: ", probeMethod())); } @OnMethod( clazz="/.*/", method="println" ) public static void m2(AnyType[] args) { println(strcat("****** WE'VE ENTERED A METHOD ON CLASS: ", name(probeClass ()))); println(strcat("****** WE'VE ENTERED METHOD: ", probeMethod())); } /** * ONEXIT TRACEPOINT. CALLED WHEN A BTRACE METHOD CALLS EXIT(INT). */ @OnExit public static void onexit(int code) { println("****** THE BTRACE PROGRAM IS EXITING."); } /** * LOW MEMORY TRACE POINT. */ @OnLowMemory( pool = "Tenured Gen", threshold=58720250
108.
public static void
m2(AnyType[] args) { println(strcat("****** WE'VE ENTERED A METHOD ON CLASS: ", name(probeClass ()))); println(strcat("****** WE'VE ENTERED METHOD: ", probeMethod())); } /** * ONEXIT TRACEPOINT. CALLED WHEN A BTRACE METHOD CALLS EXIT(INT). */ @OnExit public static void onexit(int code) { println("****** THE BTRACE PROGRAM IS EXITING."); } /** * LOW MEMORY TRACE POINT. */ @OnLowMemory( pool = "Tenured Gen", threshold=58720250 ) public static void onLowMem(MemoryUsage mu) { println("******"); println(mu); } /** * MEMORY HISTOGRAM TRACE POINT. */ private static Map<String, AtomicInteger> histo = newHashMap();
109.
/**
* ONEXIT TRACEPOINT. CALLED WHEN A BTRACE METHOD CALLS EXIT(INT). */ @OnExit public static void onexit(int code) { println("****** THE BTRACE PROGRAM IS EXITING."); } /** * LOW MEMORY TRACE POINT. */ @OnLowMemory( pool = "Tenured Gen", threshold=58720250 ) public static void onLowMem(MemoryUsage mu) { println("******"); println(mu); } /** * MEMORY HISTOGRAM TRACE POINT. */ private static Map<String, AtomicInteger> histo = newHashMap(); @OnTimer(4000) public static void print() { if (size(histo) != 0) { printNumberMap(strcat("******", "Component Histogram"), histo); } } }
110.
* LOW MEMORY
TRACE POINT. */ @OnLowMemory( pool = "Tenured Gen", threshold=58720250 ) public static void onLowMem(MemoryUsage mu) { println("******"); println(mu); } /** * MEMORY HISTOGRAM TRACE POINT. */ private static Map<String, AtomicInteger> histo = newHashMap(); @OnTimer(4000) public static void print() { if (size(histo) != 0) { printNumberMap(strcat("******", "Component Histogram"), histo); } } }
111.
112.
visualvm
113.
114.
Useful for ‣ Discovering
the GC cycles of your app. ‣ Finding the largest memory usage culprits. ‣ Diffing memory snapshots. ‣ Injecting btrace code. ‣ Snapping heapdumps.
115.
Gotcha Download version 1.2
even if your JDK includes 1.0. Standalone version always ahead of JVM version.
116.
VisualVM in action
117.
BTrace in action
118.
omniscient debuggers
119.
120.
Luke, you can
destroy the bug! He has foreseen this. It is your destiny.
121.
TOD (by Guillaume Pothier)
122.
123.
TOD ✴ Eclipse-integrated omniscient
debugger ✴ observe all memory changes ✴ execute once, review infinitely ✴ rewind and step through call stacks, loops ✴ Windows-only (DLL)
124.
VIDEO TOD
125.
comprehension tools
126.
Goal: Comprehend the application runtime
call sequence better.
127.
amida
128.
amida http://sel.ist.osaka-u.ac.jp/~ishio/amida/
129.
jtracert
130.
jtracert http://code.google.com/p/jtracert/
131.
Eclipse TPTP
132.
Eclipse TPTP ✴ profile
an application’s performance ✴ render call sequence diagrams ✴ almost ready for Mac OS
133.
VIDEO TPTP
134.
decompiling tools
135.
cavaj
136.
JODE
137.
JD-Eclipse
138.
139.
140.
141.
System.out.println()
142.
ancient weapons are
no match...
143.
bring a better
weapon to the fight
144.
if a bug strikes you down...
145.
You work the
weekend solving it.
146.
Matthew McCullough matthewm@ambientideas.com
147.
May the debugging
force be with you. Matthew McCullough matthewm@ambientideas.com
148.
Than ks in
advance for your complete d evals!
149.
Code Examples http://github.com/matthewmccullough Twitter
@matthewmccull Email matthewm@ambientideas.com Blog http://www.ambientideas.com/blog sidebar has my social networking profile links
150.
Resources Eclipse Memory Analyzer http://www.eclipse.org/mat/ VisualVM https://visualvm.dev.java.net/ GCHisto https://gchisto.dev.java.net/ BTrace https://btrace.dev.java.net/ DTrace,
XRay, Instruments http://en.wikipedia.org/wiki/DTrace
151.
Resources TOD http://pleiad.cl/tod/ JTracert http://code.google.com/p/jtracert/ Amida http://sel.ist.osaka-u.ac.jp/~ishio/amida/ TPTP http://www.eclipse.org/tptp/ JD-Eclipse http://java.decompiler.free.fr/
152.
Image Credits ‣
http://www.ambientideasphotography.com ‣ http://upload.wikimedia.org/wikipedia/commons/a/a4/ BernardMadoff.jpg ‣ http://flickr.com/photos/triller/2226679393/ ‣ http://flickr.com/photos/ektogamat/2687444500/ ‣ http://flickr.com/photos/bfionline/2380398799/ ‣ http://flickr.com/photos/symphoney/76513801/ ‣ http://flickr.com/photos/foxypar4/2124673642/ ‣ http://flickr.com/photos/morberg/3146874095/ ‣ http://flickr.com/photos/triller/2226679393/
Baixar agora