java杂记

本文持续更新,记录java使用中遇到的问题

 

1.java中new File()的路径问题

 

        //System.setProperty("user.dir","d:/");
        File file = new File("a.txt");
        System.out.println("path="+file.getAbsolutePath());
        file.createNewFile();

 以上代码中,a.txt生成的位置是:java命令执行的当前路径+a.txt,设置user.dir属性后,file.getAbsolutePath()的路径会变成设置的d:/a.txt,但new出来的file的路径还会是java命令执行的当前路径+a.txt。

在一些容器,比如jboss等中,这个相对路径就是启动的一系列脚本中最后一个cd所到的位置+相对路径。

 

2.ClassNotFoundException和NoClassDefFoundError

如果加载一个类,找不到,就是ClassNotFoundException,如果加载这个类的过程中引用的其他类找不到,就是NoClassDefFoundError,如

 

public class A {
    B b = new B();
    public static void main(String[] args) {
        new A();
    }
}

 

 

删除B.class,得到结果

 

Exception in thread "main" java.lang.NoClassDefFoundError: B
        at A.<init>(A.java:17)
        at A.main(A.java:24)
Caused by: java.lang.ClassNotFoundException: B
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)

 

3.classloader加载资源时,目录注意要最后有“/”,比如d:/test/,  如果时d:/test,里面的文件就加载不到。

 

3.jvm的一些配置

 

 

a.jmx的时候,如果没有指定 -Djava.rmi.server.hostname=,就需要绑定hosts

b.启动的时候,如果要断点在很前面,可以用:http://blog.csdn.net/lovingprince/article/details/6334109 is_server是否服务器 suspend 是否等待连上了再继续。

c 在jvm crash 的时候,会在启动vm的目录生成hs_error_pid<pid> log

d. 用信号机制处理vm内部错误

e.-XX:MaxDirectMemorySize=10m限制DirectBuffer等堆外内存的总大小

f.加上-XX:+PrintReferenceGC -XX:+PrintGCDetails来得到更多信息,这样能观察到到底你的测试里每次GC处理了多少个、什么类型的弱引用。Cleaner-based的清理是基于PhantomReference的。

 

 

使一些类不用JIT的步骤:

1.在.hotspot_compiler文件中添加需要从动态编译器(JIT)排除的方法.格式如下: 

       exclude  java/lang/CharacterDataLatin1  toLowerCase

2.修改启动参数

        -XX:CompileCommandFile=/home/weblogic/.hotspot_compiler

4.java的nio

 

1.对于buffer.get(byte[] dst),如果dst的大小大于buffer,会抛异常,必须先取得buffer的length,然后 buffer.get(dst,0.length).如果buffer大小大于dst,没有关系。

2.对于buffer.put(byte[] src) ,如果src的大小大于buffer,会抛异常,必须先取得buffer的length,然后buffer.put(src,0,length),如果buffer大于src,没有关系

直接缓冲区也是jvm用户空间的地址,只是连续的,heap中的不一定连续

 

你可能感兴趣的:(java)