`
eric_weitm
  • 浏览: 242863 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java 编程的动态性

    博客分类:
  • java
阅读更多
Java 编程的动态性
参考资料:IBM开发者资料
参考地址 http://www.ibm.com/developerworks/cn/java/j-dyn0429/
一 类加载器
C语言程序执行过程:编译、链接(生成可执行文件)、操作系统的装载程序将其装入内存(建立进程)来运行
java程序的执行:编译、加载、在虚拟机中执行
新加载的类与其他类的链接由jvm来完成,所以java可以实现动态的链接,即在程序已经运行起来之后决定更新哪些模块、使用哪些模块(可以实现不停机而更新功能)。
java的这种机制与C++的dll的区别是,前者完全动态,允许在程序运行的时候改变代码的逻辑、后者所谓的动态在代码逻辑上来讲是静态的(使用的条件、功能的组合要硬编码)。
如:
用户输入了A 则加载A模块,否则不加载
这样一段逻辑,对于A模块而言它是动态的,但是对于加载的这个逻辑而言却是固定的

java的类加载器可以便于实现程序内的空间分离、增强程序的安全性和健壮性。如通过使用不同的加载器可以实现用户程序无法更改系统核心程序、也可实现多个用户空间共享代码(此部分代码放到上层加载器即可)。
这个估计是借鉴了OS中的内核空间和用户空间的概念,一个应用程序挂了很容易,但是想用一个应用程序来把整个OS搞挂(系统无法继续运行)不太容易。同样道理,在现实中想用一个java应用程序来搞挂jvm,好像也是
异常的艰难。如果要开发一个基础的框架(如新的脚本语言),那么如何来保证这种安全性就显得十分的重要。

二 反射(灵活、但是会影响性能)
jvm中的每个Class都有足够的hook让用户来用,所以如果你想改变一个初始化时设置的值成为可能(通过源代码的话只能硬编码)。另外、利用反射用户可以在代码中直接使用之前已经在JVM中实现的模块。
一个实际的使用场景:
假设 我用java实现了一种新的脚本语言 xxx,采用的是编译执行而不是解释执行(为了效率),那么我该如何实现 在XXX脚本中定义过的函数可以被后来的函数使用呢?
如果是解释执行很简单,记录每个内部提供的库函数和定义过的xxx脚本函数的地址,之后在解释新的xxx脚本函数调用时,依次hashmap到相应的函数即可。但是现在xxx脚本是编译型的,
我必须保证用户定义的XX脚本函数 aaa()要马上生效,即当扫描过aaa()之后就要求将它编译、不仅要编译、而且要链接到系统中(这样后面的xxx脚本bbb()中才能使用aaa()函数),由于要链接到系统中的代码是未知的,
要用到哪些其他的库也未知,所以C++是解决不了这个问题的(所以用C++实现的脚本都是解释型的)、而java的类加载器和反射就可以满足这种需要。
顺便说一下:有人认为java比C++慢,为什么还用java来实现脚本语言?java在运行时是否真的比C++慢我姑且不说(在使用JIT的情况下还真的不好说、而且C++可能快、但是我们写出来的C++却不一定快、和程序员
的水平有关系啊),要知道我们整个系统的速度是体现在脚本上的。同样的一个脚本函数aaa(),如果是用C++实现,那么我需要解释每一个语句,之后转化为内部定义的库函数指针、再之后才是真正的函数的执行。
而如果此脚本是用java实现的,那么我的每个脚本函数在运行时跑的都是.class文件,省去了每次都要解释指令的步骤,所以单从这里来看用java来实现脚本语言确实是可能更快的。除非我们相信自己可以做出来比jvm更牛X的虚拟机,不然我们有理由选择java来实现脚本语言。

三 修改byteCode
不仅用户可以使用jvm中已经载入的Class,用户甚至可以在JVM运行的过程中修改byteCode、并且将新的byteCode重新加载(类似于C里面的编译、连接、装载)
Javassist是一种可以改变bytecode的库、如可以在每个方法被调用前添加统计语句(bytecode的层面上)
PS:这种库适合于实现基础的平台,难怪现在基于java的平台如此之多

本文写于 2011年4月
分享到:
评论

相关推荐

    java编程200例(附:JAVA文档完全解读中文版)

    Java编程语言是面向对象的、跨平台的编程语言,由Sun Microsystems公司于1995年推出,目前广泛应用于各种领域,如Web开发、移动应用、企业级应用、大数据处理等。"Java编程200例(附:JAVA文档完全解读中文版)"是一...

    java编程逻辑

    Java编程逻辑是初学者入门Java编程的重要资源,它旨在帮助读者理解编程的基本概念,并通过Java语言来实践这些概念。这本书的PDF版本提供了便捷的在线学习途径,让对Java感兴趣的读者无需购买实体书也能进行深入学习...

    侯捷-java编程思想.pdf

    《侯捷-Java编程思想》是一本深受Java开发者喜爱的经典著作,尽管是繁体版本,但其中也包含英文内容,方便不同语言背景的读者理解。这本书深入浅出地讲解了Java编程的核心概念和技术,旨在帮助读者掌握Java编程的...

    java编程思想第四版源代码.7z

    《Java编程思想》是 Bruce Eckel 的经典著作,第四版更是深入浅出地介绍了Java语言的核心概念和技术。这个压缩包包含的源代码是书中的示例程序,它们旨在帮助读者理解书中阐述的各种编程原理和实践。通过分析这些源...

    计算机软件Java编程特点及其技术分析 (1).pdf

    Java编程是目前世界上最流行的编程语言...Java编程不仅能够提高软件开发效率,还能够提升软件的运行效果、稳定性和安全性,帮助开发者满足用户的新要求,解决计算机网络中的各种问题,确保软件的可靠性和用户的安全性。

    提高Java程序动态性的一个新途径.pdf

    在Java程序开发领域,动态性的提升一直是软件工程师和研究人员关注的热点。随着编程语言的发展,动态语言因其灵活性和易用性越来越受到重视。然而,Java作为一种静态类型语言,其运行时的灵活性受到了一定的限制。...

    Java核心编程Java 课件ppt

    这份"Java核心编程Java课件ppt"是为初学者设计的,旨在帮助他们掌握Java编程的基础知识。以下是一些主要的学习点: 1. **Java简介**:Java是由Sun Microsystems开发的,后来被Oracle公司收购。它被设计成“一次编写...

    Java编程 100例

    理解类的构造器、方法、访问修饰符以及如何通过继承和接口实现多态性,是进阶Java编程的关键。 3. **异常处理**:Java中的try-catch-finally结构用于捕获和处理运行时错误,是编写健壮代码的重要手段。学习如何正确...

    java 编程思想java初学

    《Java编程思想》是Java初学者的一本经典教材,它以其深入浅出的讲解和丰富的实例,深受读者喜爱。本书全面覆盖了Java的基础知识,包括语法特性、面向对象编程概念、异常处理、集合框架、多线程、网络编程等多个方面...

    java语法大全,java语法,java编程基础,java入门

    这份"java语法大全"文档,结合了“java语法”,“java编程基础”,以及“java入门”等核心主题,旨在为初学者提供全面的学习资源,帮助他们理解和掌握Java语言的基本概念和高级特性。 首先,Java语法是学习Java的...

    Java经典编程50道

    《Java经典编程50道》是一份集合了Java编程中具有代表性和挑战性的题目资源,包含完整的源码,旨在帮助开发者提升Java编程技能。通过学习和实践这些题目,开发者可以深入理解Java语言的核心特性和常见设计模式,...

    Java编程艺术.rar

    8. **反射**:Java反射机制允许我们在运行时检查和操作类、接口、字段和方法,提供了强大的动态性,常用于框架开发和元编程。 9. **泛型**:泛型引入于Java 5,用于提供类型安全的容器,防止在运行时出现类型转换...

    Java完美编程 Java完美编程

    Java编程是一种广泛使用的高级编程语言,以其跨平台的特性、丰富的类库以及强大的功能而闻名。本套"Java完美编程"教程旨在帮助开发者深入理解Java语言的核心概念,并掌握实际开发中的最佳实践,从而实现高效、稳定的...

    计算机软件开发的Java编程语言及应用——评《Java编程方法论》.pdf

    【Java编程语言特点】 Java编程语言是面向对象的高级编程语言,它的主要特点包括: 1. **操作灵活性**:Java的语法简洁且易于理解,它允许程序员以更少的代码实现复杂的逻辑,降低了编程的复杂性,提高了开发效率...

    Java编程精选集锦

    以上只是Java编程中的部分核心知识点,实际学习过程中还会涉及更多如并发编程、模块化(Jigsaw)、性能优化、安全性等方面的内容。通过深入理解和实践,你将能够掌握这个强大的编程语言,并利用它来构建复杂的应用...

    Java Web动态图表编程

    本文将深入探讨Java Web动态图表编程的相关知识点,包括基础概念、常用库和技术,以及实践中的应用。 一、基础概念 1. Java Web:Java Web是指使用Java技术构建的Web应用程序,它基于HTTP协议,可以处理用户请求,...

    java编程题库

    Java编程题库是一个集合了各种Java编程相关的学习资源和练习题的综合资料包。这个题库不仅涵盖了基础的Java语法和编程概念,还涉及到高级主题,如网络编程、数据库编程以及输入/输出(IO)操作。它对于Java初学者和...

    计算机软件Java编程特点及其技术分析.pdf

    Java编程语言之所以被广泛使用,主要得益于它的几个核心特点:简单性、独立性、动态性、安全性和可拓展性。 简单性是Java编程语言的一大优势,它简化了编程过程,降低了学习难度,使得开发者能够更加轻松地进行软件...

Global site tag (gtag.js) - Google Analytics