博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Java,JNI】学习汇总
阅读量:4527 次
发布时间:2019-06-08

本文共 4927 字,大约阅读时间需要 16 分钟。

START FROM 2014/5/12 for memory of wenchuan

【1】关于java内存的三篇文章:

1,内存模型http://www.cnblogs.com/aigongsi/archive/2012/04/26/2470296.html

而内存模型就是规定了一个规则,处理器如何同主内存同步数据的一个规则。

2,垃圾回收http://www.cnblogs.com/aigongsi/archive/2012/04/06/2434771.html

要点:jvm采用找root对象的方式确定是否回收。

Strong Reference(强引用) –>Weak Reference (弱引用) -> Soft Reference(软引用) – > Phantom Reference(引用)

 

Strong Reference : 只有在引用对象root不可达的情况下才会标识为可回收,垃圾回收才可能进行回收

Weak Reference :即使在root算法中 其引用的对象root可达到,但是如果jvm堆内存 不够的时候,还是会被回收。

Soft Reference : 无论其引用的对象是否root可达,在响应内存需要时,由垃圾回收判断是否需要回收。

Phantom Reference :在回收器确定其指示对象可另外回收之后,被加入垃圾回收队列.

3,volatile关键字http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html

对于volatile修饰的变量,jvm虚拟机只是保证从主内存加载到线程工作内存的值是最新的

4,再总结下synchronized用法

   有两种,一种用来修饰方法 --public synchronized void quary(),一种用来造一个同步块--synchronized(xxx.class){...}

  修饰方法:若是实例方法,则:同一时间,同一个实例,只能访问被synchronized修饰的方法中的1个。若是类方法,同理;

  同步块:修饰方法无法避免不同线程的访问,同步块中加一个“锁”,锁即一个全局对象或者类,即可保证所有线程都只能有一个线程在访问。

5,20140707,mysql+hibernate过程中的问题及解决

  一,得不到session,搜了下,又仔细看了下生成的factory及接口,发现封闭极其漂亮,直接new一个dao就可以操作数据库,然后commit一下

  二,jsp就是把java代码放到html块中,java代码用<%%> <%!%><%=%>什么的括起来,page指令就是在jsp文件头可以import

  三,可以写一个有main方法的test类,直接跑这个test类,打出log

  四,jsp和html写完直接可以访问出来,servlet写完要重新跑一下,让servlet.class重新生成

  五,花了时间比较长的一个总是是getSession为空指针,百度不出解决,看log成了关键,一看就发现总是在哪里了。

6,20140805   关于MD5,一切皆在代码中

import java.io.FileInputStream;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class MD5Utils {    public static void main(String[] args){        MD5Utils.md5String("i");        log("******************************");        MD5Utils.md5File("e:/TortoiseSVN-1.8.7.25475-x64-svn-1.8.9.msi");    }    public static void log(String str){        System.out.println(str);    }    private static final char HEX_DIGITS[] = {            '0', '1', '2', '3', '4', '5',            '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'    };    public static String toHexString(byte[] b) {        StringBuilder sb = new StringBuilder(b.length * 2);        for (int i = 0; i < b.length; i++) {            sb.append(HEX_DIGITS[(b[i] & 0xf0) >>> 4]);            sb.append(HEX_DIGITS[b[i] & 0x0f]);        }        return sb.toString();    }    /**     * MD5鍔犲瘑     *      * @param string     * @return     */    public static String md5String(String string) {        byte[] hash;        try {            hash = MessageDigest.getInstance("MD5").digest(                    string.getBytes("UTF-8"));            log("hash.length = "+hash.length+"");        } catch (NoSuchAlgorithmException e) {            log("NoSuchAlgorithmException");            throw new RuntimeException("Huh, MD5 should be supported?", e);        } catch (UnsupportedEncodingException e) {            log("UnsupportedEncodingException");            throw new RuntimeException("Huh, UTF-8 should be supported?", e);        }        StringBuilder hex = new StringBuilder(hash.length * 2);                for (byte b : hash) {            log(Integer.toHexString(b & 0xFF)+"");            if ((b & 0xFF) < 0x10){                hex.append("0");            }            hex.append(Integer.toHexString(b & 0xFF));//            log(hex+"");        }        log(hex.toString());        return hex.toString();            }    public static String md5File(String filename) {        InputStream fis;        byte[] buffer = new byte[1024];//1KB        int numRead = 0;        MessageDigest md5;        int count = 0;        try {            fis = new FileInputStream(filename);            md5 = MessageDigest.getInstance("MD5");            log(toHexString(md5.digest()));            while ((numRead = fis.read(buffer)) > 0) {                log("numRead="+numRead);                count++;                log("count="+count+" buffer:"+buffer[0]+buffer[1]+buffer[2]+buffer[3]);                md5.update(buffer, 0, numRead);                log(toHexString(md5.digest()));            }            fis.close();            log(toHexString(md5.digest())+"------result");            return toHexString(md5.digest());        } catch (Exception e) {            System.out.println("error");            return null;        }    }}

 7,关于enum,依旧是一切都在代码中

public enum ECar {    A("audi"), B("bmw"),V("vw");    private String nName;    ECar(String name) {        this.nName = name;    }    public String getName() {        return this.nName;    }        public static ECar getEnumByName(String name) {        for(ECar car: ECar.values()){            if(car.getName().equals(name)){                return car;            }        }        return ECar.V;            }        public static String getNameByEnumStr(String enumStr){        for(ECar car: ECar.values()){            if(car.toString().equals(enumStr)){                return car.getName();            }        }        return V.getName();    }    }

 

转载于:https://www.cnblogs.com/linxiaojiang/p/3723930.html

你可能感兴趣的文章