3 liens privés
Utilisation CPU d'une JVM
-XX:+PreserveFramePointer
Bientôt dans toutes les bonnes JVM
Les encoding des types Java (symbolic lookup) :
Element Type Encoding
boolean Z
byte B
char C
double D
float F
int I
long J
short S
class or interface Lclassname;
Exemple : createConsumer(Ljavax/jms/Destination;Ljava/lang/String;Z)Ljavax/jms/MessageConsumer;
see also :
http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html#getName%28%29
http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/method.html
Se protéger des attaques OWASP
import SSL certificate to Java
echo -n | openssl s_client -connect www.example.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/examplecert.crt
show all certificates in PEM format
openssl s_client -showcerts -verify 5 -connect google.fr:443 < /dev/null |
awk '/BEGIN CERTIFICATE/,/END CERTIFICATE/{ if(/BEGIN CERTIFICATE/){a++}; out="cert"a".pem"; print >out}'
for cert in *.pem; do
newname=$(openssl x509 -noout -subject -in $cert | sed -nE 's/.*CN ?= ?(.*)/\1/; s/[ ,.*]/_/g; s/__/_/g; s/_-_/-/; s/^_//g;p' | tr '[:upper:]' '[:lower:]').pem
echo "${newname}"; mv "${cert}" "${newname}"
done
(http://hoab.fr/shaarli/?Ve3UZg)
keytool -import -trustcacerts -keystore /usr/local/jre/lib/security/cacerts -storepass changeit -noprompt -alias mycert -file /tmp/examplecert.crt
keytool -import -trustcacerts -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts -storepass changeit -noprompt -alias mycert -file /tmp/examplecert.crt
keytool -import -trustcacerts -keystore /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/cacerts -storepass changeit -noprompt -alias mycert -file /tmp/examplecert.crt
see also :
https://www.sslshopper.com/article-most-common-java-keytool-keystore-commands.html?jnffe22999=2
$JAVA_HOME/bin/keytool -list -v -keystore ${JAVA_HOME}/lib/security/cacerts
Export public certificate :
keytool -export -alias certalias -keystore newkeystore.jks -file <public key name>.pem
Debug SSL :
-Djavax.net.debug=ssl,handshake
JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
find jar class
@Test
public void classFinder() {
ClassLoader loader = Test.class.getClassLoader();
System.out.println(loader.getResource("org/hamcrest/Matcher.class"));
}
public static void disableResponseCaching(HttpServletResponse response) {
response.setHeader("Expires", "Sat, 1 January 2000 12:00:00 GMT");
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
response.addHeader("Cache-Control", "post-check=0, pre-check=0");
response.setHeader("Pragma", "no-cache");
}
- repérer votre fichier de plugin : pluginreg.dat
- Editez-le
- Repérez dedans la ligne "Java (TM) Plug-In"
- Dessous, il y a un numéro : c'est le nombre d'applications qui peuvent utiliser ce plugin. Incrémentez-le de 1. (par exemple de 30 à 31)
- Cherchez la ligne qui commence par "30:".
- Juste après, créez la ligne suivante :
31:application/x-jinit-applet;version=1.1.8.16:Java::$ - Quittez puis relancez firefox
- Allez à la page about:plugins
- Vous voyez que le plugin java sera utilisé pour les applications cherchant un JInitiator 1.1.8.16
Et abaissez la sécurité éventuellement
-Dcom.sun.management.jmxremote
pour autoriser la gestion via JMX, attention ça ouvre un port
Le truc bête à ne pas oublier pour JD-Eclipse :
In eclipse open Window -> Preferences -> General ->Editors -> File Associations Select *.class file type Associate it with JD-Eclipse Set it to default
Site : http://jd.benow.ca/
A suivre, via http://sebsauvage.net/links/?FcpAmQ
Pense-bête :
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
m.group(0); // le tout
m.group(1); // le 1er pattern qui match
Java heap dump
Java :
jmap -dump:format=b,file=<logdump>/dump1.hprof <pid>
Jrockit :
jrcmd <pid> hprofdump filename=<logdump>/dump1.hprof
Theadump stack :
PID=12345
for ((a=1; a <= 60; a++)); do jstack $PID > thread-dump.$PID.$a; sleep 5; echo $PID.$a; done
Attention au == avec l'autoboxing
Désactiver les appels explicites au GC : -XX:-DisableExplicitGC
Etre notifié des gc
Calculer la taille mémoire par QueryPlan
SELECT toString(qp.sourceQuery), @retainedHeapSize FROM "org.hibernate.engine.query.spi.HQLQueryPlan" qp WHERE (@retainedHeapSize > 100000)
Path dir = Paths.get(String dirname);
// try with resources
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, "*.xml")) {
if (stream != null) {
for (Path file : stream) {
BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class);
}
}
}
et voilà comment éviter du code inutile pour les stream.
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
}
Could not initialize class sun.awt.X11GraphicsEnvironment : en général parce que la variable DISPLAY est settée