Como se puede ver en las imagenes, podemos hacer un profile de las aplicaciones que tenemos ejecutandose con Java, incluso si tenemos instalado un IDE como eclipse, podemos ejecutar nuestros programas haciendo uso de la JVM Visual, para poder ver el consumo que realizan nuestros programas, es realmente util..
Mostrando entradas con la etiqueta programar. Mostrar todas las entradas
Mostrando entradas con la etiqueta programar. Mostrar todas las entradas
jueves, 6 de junio de 2013
Java, monitorización de memoria, herramientas utiles VisualVM
Una herramienta que me ha servido en muchos casos para poder ver el consumo de memoria que esta jhaciendo uso un programa Java es VisualVM
Como se puede ver en las imagenes, podemos hacer un profile de las aplicaciones que tenemos ejecutandose con Java, incluso si tenemos instalado un IDE como eclipse, podemos ejecutar nuestros programas haciendo uso de la JVM Visual, para poder ver el consumo que realizan nuestros programas, es realmente util..
Como se puede ver en las imagenes, podemos hacer un profile de las aplicaciones que tenemos ejecutandose con Java, incluso si tenemos instalado un IDE como eclipse, podemos ejecutar nuestros programas haciendo uso de la JVM Visual, para poder ver el consumo que realizan nuestros programas, es realmente util..
lunes, 27 de mayo de 2013
Java, obtener la extensión de un fichero
Obtener extensión de fichero, en muchos casos en interesante
obtener la extensión de un fichero con el que estamos trabajando en Java, para
lo que vamos a proponer dos aproximaciones, la primera es la más habitual,
consiste en obtener la extensión en base al nombre del fichero, o de la ruta completa, devolviendo un texto
vacio si no se encuentra el punto que separa la extensión.
public static String
getExtension(String filename) {
int index =
filename.lastIndexOf('.');
if (index == -1) {
return "";
} else {
return
filename.substring(index + 1);
}
}
Ahora una segunda opción, en la que presentamos como hacer
esta búsqueda, pero evitando que ocurran errores de retorno, porque se envíen directorios
en vez de ficheros completos, por
ejemplo si enviásemos c:\\hola.hola\\ y eso es el nombre de una carpeta, el
primer método nos devolvería el hola, como si fuera la extensión del fichero,
el segundo detectaría que no es un fichero, sino un directorio, y nos
devolvería dentro del primer if. Podríamos ampliar el control, a un segundo if,
que pregunte, si lo que nos han enviado es un fichero y si no es ni un
directorio, ni un fichero, que se supone que han enviado a la consulta.
public static String
getExtensionFile(String filename) {
File f = new File(filename);
if (f == null ||
f.isDirectory()){
return "nulo o directorio";
}else if (f.isFile()){
int index =
filename.lastIndexOf('.');
if (index == -1) {
return "";
} else {
return
filename.substring(index + 1);
}
}else{
return "que has
enviado?";
}
}
domingo, 19 de mayo de 2013
Java, Obtener la memoria que se está usando por la JVM en tiempo de ejecución.
Util cuanto menos, cuando queremos
conocer cómo vamos de uso de memoria en alguna prueba, que estemos realizando, con
estas sencillas llamadas, podemos conocer qué cantidad de bytes estamos
utilizando de memoria en la maquina virtual de Java. Con esto podemos ir viendo
en cada momento la cantidad de recursos que tenemos bloqueados por nuestro
código, si lo ejecutamos de forma aislada y vamos viendo las diferencias que se
generan al ir ejecutando diferentes métodos que tengamos implementados.
También puede sacarte de alguna duda,
cuando no tengas claro si en algún punto, el objeto X, se está instanciando de
nuevo o solo te traes la referencia del objeto.
Runtime rt = Runtime.getRuntime();
System.out.println("
Memoria libre: " +
rt.freeMemory());
System.out.println("
Memoria total: " +
rt.totalMemory());
System.out.println(" Memoria
uso INICIO: " + (rt.totalMemory() - rt.freeMemory()));
viernes, 17 de mayo de 2013
Java buenas prácticas Instanciar objetos al mínimo.
Una de las operaciones que más coste
tienen a la hora de consumir memoria en los desarrollos Java, son las
instanciaciones de objetos, estas deben realizarse solo en los casos que sea
necesario, evitando de esta manera consumir memoria que no es necesaria. Para
ello, existen técnicas que evitan la instanciación de objetos que no sean
necesarios.
Vamos a ver ejemplos para los casos de
objetos de tipo String, Boolean o Integer. Aunque los casos que más memoria
consumen son los objetos personalizados, que estarán formados por más de un
atributo de estos tipos, o listas y mapas de variables, pero de esta forma,
podemos evitar algunos de esos casos si
lo extrapolamos a nuestros objetos.
Deben evitarse instanciaciones de objetos
de tipo String como la siguiente: String a = new String(“Hola”), para lo que
podemos usar String a = “Hola” evitando la llamada a new, que consume espacio
en memoria, o también String.valueOf(“Hola”).
Para las Boolean, además de la factoría
estática (Boolean.valueOf(true)), tenemos la posibilidad, de indicar el valor
de la siguiente manera Boolean b = Boolean.TRUE, que tampoco realizaría una
instanciación de Boolean.
Citando a los propios creadores de la
clase Boolean:
“It is rarely appropriate to use
this constructor. Unless a new instance is required, the static factory valueOf(boolean)
is generally a better choice. It is likely to yield significantly better space
and time performance.”
Solo hay un caso en el que crear una
instancia nueva de un Boolean, tiene sentido, y es cuando se quiera hacer una
comparación por referencia y no por el valor.
jueves, 2 de mayo de 2013
Como acceder a una base de datos Access desde Java.
Una entrada muy rápida de como se conecta la base una base de datos Access a un programa Java.
Para este caso, notificar que Access normalmente el acceso es con USER y PASS en blanco, algo asi: conexion = DriverManager.getConnection("jdbc:odbc:" + NOMBDD, "","");
Comentar además que para que una base de datos, este visible para el driver, debe estar incluida en el origen de datos de Windows, que se encuentra en inicio --> Ejecutar --> ODBCAD32. En la ventana que salta, le damos a añadir (add) elegimos Driver Do Microsoft Access (*.mdb) y introducimos los datos de la base de datos y le damos un nombre, el que usaremos en el código Java
public void abrirConexion() { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conexion = DriverManager.getConnection("jdbc:odbc:" + NOMBDD, "USER","PASS"); System.out.println("Conexión"); statment = conexion.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); System.out.println("Conexion exitosa"); } catch (Exception e) { System.out.println("No se ha podido cargar el Driver JDBC-ODBC"); e.printStackTrace(); } } public void cerrarConexion() { try { statment.close(); conexion.close(); } catch (SQLException e) { e.printStackTrace(); System.exit(1); } }
Suscribirse a:
Entradas (Atom)