本文持续更新,记录java使用中遇到的问题
//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所到的位置+相对路径。
如果加载一个类,找不到,就是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,里面的文件就加载不到。
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
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中的不一定连续