T086学习网 | 站长学院 | 技术文档 | 成语 | 歇后语 | 帝国时代 | 代码收藏 | IP地址查询 | 生活百科 | 生日密码 | CSS压缩 | 用户评论 | 欣欣百宝箱

“老虎”来了 J2SE1.5新功能一览

【 天极网作者:李娟编译 更新时间:2004-09-22 | 字体:
[导读]  虽然Java版本从1.0发展到1.4.2,但Java语言本身一直没有什么大的变化,只是增加了少量关键字,所以业界一直在呼吁对Java语言进行修正,以适应新的开发技术。2004年2月Sun发布了代号为“虎”的Java 2标准版( J2SE...

  可扩缩性和性能

  Sun承诺在1.5版中对可扩缩性和性能方面进行改善,新的重点在于启动时间和内存大小,使得高速部署应用程序变得更加容易。

  最显著的更新是引入了在HotSpot JVM中共享数据的类。这种技术不仅在多个运行的JVM之间共享只读数据,而且改善了启动速度,因为核心的JVM类是预包装的。

  性能人机工程学是J2SE 1.5的新特性。这意味着如果你在原先的版本中使用了特定的JVN运行期间选项,可能不必重新验证你的性能。

  监控和可管理性

  监控和可管理性是 Java 平台中的 RAS (Reliability, Availability, Serviceability,即可靠性、可用性、可服务性) 的一个关键组件。

  JVM监控和管理API指定了一套广泛的JVM内部实现方法,允许监视一个运行中的JVM。信息可以通过JMX ( JSR - 003) MBeans访问,并且可以在Java地址空间内本地访问或者使用JMX远程接口(JSR -160)和行业标准的SNMP协议工具来访问。

  最有用的一个特性就是低内存探测器。但超过阀值时,JMX MBeans可以通知注册的监听器什么时候达到临界值。

  J2SE 1.5提供了一个简单的方法,可以启动JVM和应用程序的out - of - the - box远程管理。例如,为了启动一个可被相同的本地计算机中的jconsole监视的应用程序,可以使用下面的系统属性:

Java -Dcom.sun.management.jmxremote -jar Java2Demo.jar

  并且,为了通过JMX监视它,而不需要验证,可以:

java -Dcom.sun.management.jmxremote.port=5001 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -jar Java2Demo.jar

  想了解如何简单地使用新的应用编程接口,下面记录了在HotSpot JVM中的内存堆栈的使用方法。

import java.lang.management.*;
import java.util.*;
public class MemTest
{
 public static void main(String args[])
 {
  List<MemoryPoolMXBean> pools = ManagementFactory.getMemoryPoolMXBeans();
  for (MemoryPoolMXBean p: pools)
  {
   System.out.println("Memory type="+p.getType()+" Memory usage="+p.getUsage());
  }
 }
}


  新的JVM应用编程接口(JSR - 163)

  这个版本中还包含了一个更加强大的本地应用编程接口,名为JVMTI。这个应用编程接口通过JSR - 163确定。然而,JVMTI是用来涵盖整套的本地访问的处理工具,除了简介以外还有监视、调试和潜在的各种其它代码分析工具。

  这个实现包括用于字节码实现的机制,Java程序语言实现服务( JPLIS)。这可以使分析工具只在需要的地方添加补充的简介。这种方法的好处是它允许更具体的分析并且限制了运行的JVM上的简介工具的干扰。这个工具甚至可以可以在运行期间动态地生成,此外还可以在类装载期间,作为类文件进行预处理。

  下面的示例创建了一个工具钩子,它可以从磁盘加载类文件的一个已修改的版本。要运行该测试,可利用 java -javaagent:myBCI BCITest 启动 JRE。

//File myBCI.java import
java.lang.instrument.Instrumentation;
public class myBCI
{
 private static Instrumentation instCopy;
 public static void premain(String options, Instrumentation inst)
 {
  instCopy = inst;
 }
 public static Instrumentation getInstrumentation()
 {
  return instCopy;
 }
}
//File BCITest.java import java.nio.*;

import java.io.*;
import java.nio.channels.*;
import java.lang.instrument.*;
public class BCITest
{
 public static void main (String[] args)
 {
  try
  {
   OriginalClass mc = new OriginalClass();
   mc.message(); FileChannel fc=new FileInputStream( new File("modified"+File.separator+"OriginalClass.class")).getChannel();
   ByteBuffer buf = fc.map(FileChannel.MapMode.READ_ONLY, 0, (int)fc.size());
   byte[] classBuffer = new byte[buf.capacity()];
   buf.get(classBuffer, 0, classBuffer.length);
   myBCI.getInstrumentation().redefineClasses( new ClassDefinition[] {
    new ClassDefinition(mc.getClass(), classBuffer)});
   mc.message();
  }
  catch (Exception e){}
 }
}
//OriginalClass.java
//Compile in current directory
//Copy source to modified directory,change message and recompile

public class OriginalClass
{
 public void message()
 {
  System.out.println("OriginalClass");
 }
}


  如果没有可用的控制台窗口,那么生成的堆栈追踪就很困难。两个新的API——getStackTrace和Thread.getAllStackTraces——以程序的方式提供该信息。

StackTraceElement e[]=Thread.currentThread().getStackTrace();
for (int i=0; i <e.length; i++)
{
 System.out.println(e[i]);
}
System.out.println(" "+Thread.getAllStackTraces());


  HotSpot JVM包括一个致命错误处理程序,如果JVM出现故障,可以运行一个用户提供的脚本或者程序。调试工具还可以使用HotSpot JVM的可维护性代理连接器连接到一个挂起的JVM或者核心文件。

-XX:onError="command" -XX:onError="pmap %p" -XX:onError="gdb %p"optional %p used as process id

上一页 [1] [2] [3] 4 [5] 下一页
  • 转载请注明来源:IT学习网 网址:http://www.t086.com/ 向您的朋友推荐此文章
  • 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系我们,我们会尽快予以更正。
  • 了解这些字:
  • 更多
    留言建议ASP探针PHP探针站长Enjoy的Blog
    © 2017 T086学习网 - T086.com(原itlearner.com)
    RunTime:15.99ms QueryTime:7