日志标签:jdk

闲聊ClassLoader

分类:java评论:5条作者:ticmy日期:2012-08-29

Java使用类加载器来装载字节码到内存,以便后续用来创建对象调用方法等。就目前的JVM,要说这个ClassLoader,先要说到它的委托模型(有人将parent译作双亲,双亲委派模型,窃以为,很不准确,原因在说完这个委托模型之后讲)。何为委托模型?java.lang.ClassLoader有这样的描述: 每个 ClassLoader 实例都有一个相关的父类加载器。 需要查找类或资源时,ClassLoader 实例会在试图亲自查找类或资源之前,将搜索类或资源的任务委托给其父类加载器。 虚拟机的内置类加载器(称为 "bootstrap class loader")本身没有父类加载器,但是可以将它用作 ClassLoader 实例的父类加载器。 开始说“每个 ClassLoader 实例都有一个相关的父类加载器”,后面又说“虚拟机的内置类加载器(称为 “bootstrap class loader”)本身没有父类加载器”,这不是自行矛盾吗!其实不然,前面说的“每个 ClassLoader 实例”指的是每个java.lang.ClassLoader(该类是抽象类)子类的对象。而bootstrap class loader(后面叫它引导类加载器)是jvm内部由c++实现的,并不继承java.lang.ClassLoader类,所以它不属于“ClassLoader 实例”,也没有办法在Java代码…
Tags: ,

32位jvm还是64位jvm?

分类:java评论:2条作者:ticmy日期:2012-07-07

在早期,JVM只有32位的,众所周知,32位有4G的内存限制。需要注意的是,32位jvm的堆内存实际可设的大小还受操作系统的限制。Hotspot VM,在Windows下,最大的堆内存大约在1.5G左右;在基于较新的linux kernel的Linux系统下,其限制在2.5到3G之间,在早前的linux kernel下,大约在2G左右;在Solaris下,为3.3G左右。 64位的hotspot VM允许使用更大的堆内存。 但是,64位JVM会有一些性能损失。主要在于普通对象指针(ordinary object pointers或oops)的size增大了,由32位增加到64位,这导致CPU cache中可用的oops减少,降低CPU缓存效率,相比32位,64位jvm的CPU缓存效率降低了8%到15%。 Java 6 HotSpot VM开始提供了一个压缩的普通对象指针的特性,可通过命令行参数-XX:+UseCompressedOops启用,这样就能受益于64位VM带来的内存,也不会有太大的性能损失。当然,压缩与解压缩oops仍然有性能的损耗。 更多阅读: 《Java Performance》by Charlie Hunt and Binu John,Chapter 3. https://wikis.oracle.com/display/HotSpotInternals/CompressedOops …
Tags: ,

通过HP-UNIX jvm获取的时间与操作系统不一致问题分析

分类:java评论:0条作者:ticmy日期:2012-05-30

如果是时区导致的问题,基本一眼能发现。 但如果相差个十几秒,找起原因也是让人大费周折。 最近就碰到一个jvm时间(System.currentTimeMillis)与操作系统时间不一致的情形,用的HP-UNIX系统,多台服务器的时间同步是用了一个NTP服务。 原因如下: hotspot jvm使用gettimeofday系统调用来获取日期和时间信息。但在HP-UX中,出于性能考虑,在应用启动后,采用了一种使用CPU 时钟周期数的机制来计算当前时间。带来的后果就是,使用date命令,adjtime函数或者形如ntp的时间同步服务工具修改系统时间后,java应用未能在重启之前反映出这种修改。如果要求操作系统时间修改立马反映到java应用中,可以使用-XX:+UseGetTimeOfDay选项来告诉JVM使用gettimeofday系统调用,但需要注意的是,这会使性能下降。 因为hotspot本身就是使用的gettimeofday系统调用,所以不会有这个问题 The HotSpot JVM uses the gettimeofday() system call to obtain date and time information. For performance reasons a new mechanism that uses the number of CPU ticks since the application started is used to calculate the current time. As a result,…
Tags: ,