zoukankan      html  css  js  c++  java
  • 【Java,JNI】学习汇总

    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();
        }
        
    }
  • 相关阅读:
    javascript解决方案插件
    vscode前端快速开发插件
    html5新增语义标签
    vscode快捷键大全
    vscode/sublime前端开发快捷键
    vscode自动缩进快捷键
    Android平台OpenGL ES/Assimp/OpenCV/GLM集成说明
    将AOSP源码导入到Android Studio进行查看
    Android OTA升级
    Android构建系统
  • 原文地址:https://www.cnblogs.com/linxiaojiang/p/3723930.html
Copyright © 2011-2022 走看看