Utente:Amux/Java Inspection: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Amux (discussione | contributi)
Creata la pagina
 
PAWBot (discussione | contributi)
m Fix, replaced: <source → <syntaxhighlight (8), </source → </syntaxhighlight (8)
 
(16 versioni intermedie di un altro utente non mostrate)
Riga 1:
__TOC__
== ElencareList leall classithe contenuteclasses in una jar file ==
<sourcesyntaxhighlight lang="bash">
jar tf <file.jar>
</syntaxhighlight>
</source>
 
Result:
Risultato:
 
<pre>
Riga 26:
</pre>
 
== ElencareList iall membrithe dipublic unamembers classeof a set of classes in una jar file ==
<sourcesyntaxhighlight lang="bash">
javap -classpath log4j-boot.jar org.apache.log4j.spi.LoggingEvent
</syntaxhighlight>
</source>
 
If you want protected and private members, or more informations, you can use additional options.
Se si vogliono anche i membri protetti o privati o ancora più dati, usare opzioni aggiuntive.
 
Result:
Risultato:
 
<sourcesyntaxhighlight lang="java">
Compiled from "LoggingEvent.java"
public class org.apache.log4j.spi.LoggingEvent extends java.lang.Object implements java.io.Serializable{
Riga 52:
public org.apache.log4j.spi.LocationInfo getLocationInformation();
public org.apache.log4j.Level getLevel();
[...]
public java.lang.String getLoggerName();
public java.lang.Object getMessage();
public java.lang.String getNDC();
public java.lang.Object getMDC(java.lang.String);
public void getMDCCopy();
public java.lang.String getRenderedMessage();
public static long getStartTime();
public java.lang.String getThreadName();
public org.apache.log4j.spi.ThrowableInformation getThrowableInformation();
public java.lang.String[] getThrowableStrRep();
static java.lang.Class class$(java.lang.String);
static {};
}
</syntaxhighlight>
</source>
 
== List all the members of all the classes in a jar file ==
To list all the members (even private) of all the classes in a jar you can use this command:
<syntaxhighlight lang="bash">
JARNAME=<jarname.jar> sh -c 'jar tf "${JARNAME}" | egrep "\.class$" | sed "s/\.class//g; s/\//\./g" | xargs javap -private -classpath "${JARNAME}"'
</syntaxhighlight>
 
Result:
<syntaxhighlight lang="java">
// JARNAME=nashorn.jar sh -c 'jar tf "${JARNAME}" | egrep "\.class$" | sed "s/\.class//g; s/\//\./g" | xargs javap -private -classpath "${JARNAME}"'
Compiled from "ScriptObjectMirror.java"
public final class jdk.nashorn.api.scripting.ScriptObjectMirror extends jdk.nashorn.api.scripting.AbstractJSObject implements javax.script.Bindings {
private static final java.security.AccessControlContext GET_CONTEXT_ACC_CTXT;
private final jdk.nashorn.internal.runtime.ScriptObject sobj;
private final jdk.nashorn.internal.objects.Global global;
private final boolean strict;
private final boolean jsonCompatible;
static final boolean $assertionsDisabled;
private static java.security.AccessControlContext getContextAccCtxt();
public boolean public equals(java.lang.Object getMessage();
public voidint getMDCCopyhashCode();
public java.lang.String getLoggerNametoString();
public java.lang.Object getMDCcall(java.lang.StringObject, java.lang.Object...);
[...]
}
</syntaxhighlight>
 
== Look for potential memory leaks monitoring the GC ==
To monitor the garbage collection on <pid> every 5 seconds:
<syntaxhighlight lang="bash">
jstat -gc <pid> 5s
</syntaxhighlight>
 
Proof-of-concept of a script for visualizing it in the command line (requires [[gnuplot]]):
 
<syntaxhighlight lang="bash">
#!/bin/bash
 
set -eu
set -o pipefail
 
FILENAME="jstat.txt"
NUMBER_OF_LINES=10
 
cat <(head -n 1 "${FILENAME}") <(tail -n +2 "${FILENAME}" | tail -n "${NUMBER_OF_LINES}") | \
(
cat > /dev/shm/mytempfile && trap 'rm /dev/shm/mytempfile' EXIT && \
gnuplot -e "set terminal dumb; set key autotitle columnhead; plot for[col=1:17] '/dev/shm/mytempfile' using 0:col with lines"
)
</syntaxhighlight>
 
== Create a memory dump ==
<syntaxhighlight lang="bash">
jmap -dump:format=b,file=<filename.hprof> <pid>
</syntaxhighlight>
 
The memory dump can be analyzed using [https://eclipse.org/mat Eclipse Memory Analyzer]