博文

Java 虚拟机类装载:原理、实现与应用(2006-02-23 15:44:00)

摘要: 一、引言     Java虚拟机(JVM)的类装载就是指将包含在类文件中的字节码装载到JVM中, 并使其成为JVM一部分的过程。JVM的类动态装载技术能够在运行时刻动态地加载或者替换系统的某些功能模块, 而不影响系统其他功能模块的正常运行。本文将分析JVM中的类装载系统,探讨JVM中类装载的原理、实现以及应用。 二、Java虚拟机的类装载实现与应用

2.1  装载过程简介        所谓装载就是寻找一个类或是一个接口的二进制形式并用该二进制形式来构造代表这个类或是这个接口的class对象的过程,其中类或接口的名称是给定了的。当然名称也可以通过计算得到,但是更常见的是通过搜索源代码经过编译器编译后所得到的二进制形式来构造。         在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、准备和解析三步,除了解析外,其它步骤是严格按照顺序完成的,各个步骤的主要工作如下: 装载:查找和导入类或接口的二进制数据; 链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的; 校验:检查导入类或接口的二进制数据的正确性; 准备:给类的静态变量分配并初始化存储空间; 解析:将符号引用转成直接引用; 初始化:激活类的静态变量的初始化Java代码和静态Java代码块。 至于在类装载和虚拟机启动的过程中的具体细节和可能会抛出的错误,请参看《Java虚拟机规范》以及《深入Java虚拟机》,它们在网络上面的资源地址是: http://java.sun.com/docs/books/vmspec/2nd-edition/html/Preface.doc.html 和 http://www.artima.com/insidejvm/ed2/index.html。 由于本文的讨论重点不在此就不再多叙述。 2.2  装载的实现 JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoade......

阅读全文(2230) | 评论:0 | 复制链接

Java堆的管理--垃圾回收(2006-02-23 15:34:00)

摘要: 1 引言 
      Java的堆是一个运行时数据区,类的实例(对象)从中分配空间。Java虚拟机(JVM)的堆中储存着正在运行的应用程序所建立的所有对象,这些对象通过new、newarray、anewarray和multianewarray等指令建立,但是它们不需要程序代码来显式地释放。一般来说,堆的是由垃圾回收 来负责的,尽管JVM规范并不要求特殊的垃圾回收技术,甚至根本就不需要垃圾回收,但是由于内存的有限性,JVM在实现的时候都有一个由垃圾回收所管理的堆。垃圾回收是一种动态存储管理技术,它自动地释放不再被程序引用的对象,按照特定的垃圾收集算法来实现资源自动回收的功能。 
2 垃圾收集的意义 
        在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象;而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。JVM的一个系统级线程会自动释放该内存块。垃圾收集意味着程序不再需要的对象是"无用信息",这些信息将被丢弃。当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用。事实上,除了释放没用的对象,垃圾收集也可以清除内存记录碎片。     由于创建对象和垃圾收集器释放丢弃对象所占的内存空间,内存会出现碎片。碎片是分配给对象的内存块之间的空闲内存洞。碎片整理将所占用的堆内存移到堆的一端,JVM将整理出的内存分配给新的对象。 

     垃圾收集能自动释放内存空间,减轻编程的负担。这使Java 虚拟机具有一些优点。首先,它能使编程效率提高。在没有垃圾收集机制的时候,可能要花许多时间来解决一个难懂的存储器问题。在用Java语言编程的时候,靠垃圾收集机制可大大缩短时间。其次是它保护程序的完整性, 垃圾收集是Java语言安全性策略的一个重要部份。  垃圾收集的一个潜在的缺点是它的开销影响程序性能。Java虚拟机必须追踪运......

阅读全文(2355) | 评论:0 | 复制链接

仔细触摸Java编程中的“文档”和“包”(2006-02-23 07:47:00)

摘要: 什么是包

  Java中的包(Package)其实指的就是目录,它是为了更好地管理Java类(Class)和接口(Interface)。Java语言的包可以被另一个Java开发包所使用。如果我们要引用某个包中的类,用import关键字来标明即可。比如:

  import java.util.

  date=new Date

  

  提示:import java.util.表示java.util中的所有公有类和接口被引入到当前包。这里的匹配符可以调入多个类名。

  常用的Java标准包

  JDK为我们提供了很多标准的Java类和接口,这些包是写Java程序所必需的,知道了每种包所包含的类和接口,并且熟悉这些类和接口是每个Java编程人员都应该掌握的基本技能。

  Java中常用的包有:Java.applet、java.awt、java.i、java.lang、java.net和java.util等等。其中java.applet包含了一些设计小应用程序(Applet)的类和接口;java.awt是一个窗口工具箱包(awtAbstract Window Toolkit),里面是一些GUI界面相关的类;java.io包支持输入输出,比如文件输入流类:FileInputStream等;java.lang包含线程、异常、系统、整数等相关的类,是Java程序中默认加载的一个包;java.net这个类支持TCP/IP网络协议,并包含Socket类及URL相关的类,是网络编程中要使用的;java.util包含一些程序的公用类,如DateDictionary等等。

  除了上面提到的一些标准包之外,还有很多其它的包,比如数据库编程时我们可能需要使用java.sql包,写网络程序还会用到java.rmi包(RMIRemote Method Invocation)等。另外,Javax.包是一些标准包的扩展,常用的包有:javax.swing、javax.sound。

  自己动手创建包

  Java中的包是可以自己创建的。我们可以将很多功能相近的类和接口放在同一个包中,以方便管理和使用。

阅读全文(2535) | 评论:0 | 复制链接

人生转折点!!!这是一封对我非常重要的帖子,请有社会经验的前辈们给些建议(2006-02-23 06:59:00)

摘要: 作  者: best_threewood (三木) 等  级: 信 誉 值: 100 所属社区: Java J2SE / 基础类 问题点数: 100 回复次数: 13 发表时间: 2006-2-22 8:37:11 我是一名还有1年就毕业的计算机专业的本科生。从很多渠道了解到现在社会上竞争异常激烈,很多校友和同学毕业后想找一份称心的工作很困难。而我却认为那些同学找工作困难的原因在于他们对自己的专业技术掌握的还不够,无法达到用人单位的标准。所以我就一直很关注招聘单位都需要程序员掌握那些技术。我在大学期间,参加了一次培训学习了java web编程,随后又自学了Struts和hibernate框架,基于这些框架,自己写过一个论坛和一个新闻发布系统,英语方面也通过了CET-6,这就是我现在的个人情况(自知还很不够)。 我毕业后马上工作的想法一直没变过,可是最近学校的老师却都鼓励我们去考研,随后我又从很多渠道得知考验有很多好处。 我真的很犹豫,不知该怎么办才好。我也看了CSDN上的很多关于考研的利弊进行讨论的帖子,但对于我们这些还没有步入社会的学生来说,对社会的趋势和业内的了解还很模糊,也很困惑。所以我想请前辈们给些指点。时下,对于一个应届毕业生来说考研、就业那个是更好的选择或者说那个能够更有助于今后的发展? 十分感谢!这个问题100分确实很少,但还是请前辈们真诚的给些建议,可以根据自己的经历,也可以根据自己对业内的了解,晚辈不胜感激。 mingxuan3000(铭轩) ( ) 信誉:100 2006-2-22 8:41:44 得分: 0   考研后找一份称心的工作也很困难!!!!!! Top mysohu(21世纪最重要的就是我!:)) ( ) 信誉:100 2006-2-22 8:42:14 得分: 0   沙发 Top pigengler(en) ( ) 信誉:......

阅读全文(2812) | 评论:2 | 复制链接

一个大专生痛心的决定,何去何从....前面的路要如何去走.... (2006-02-22 22:48:00)

摘要:从我进入计算机专业我就很喜欢这个专业,2004年6月毕业就被深圳一家公司招了过来(职位:老板跟班),工资1150包住,当时也在全心的工作,有多出的时间就用来学java了,不过当时还看不懂什么东东,三个月后工资1200包吃住(职位网管+老板跟班),2005年2月为了个人的发展我带着身上仅有的3000元钱辞职到了一家小的sp公司(职位java程序员),工资2500什么都不包,本以为会有一个好的学习环境,进去才知道就我一个人搞java,省吃俭用9个月工作下来还清了在校时的助学贷款7600元,为了个人的发展2006年2月我辞职了,刚辞职2天我以前的同事给我介绍了份新工作,一个物流公司搞软件开始加我也就二个搞java的,想学点技术也只有自学了,公司很大工资也开得可以3800元,对一个大专生来说可以了,比我以前多出了1300元呀,对我来说真的是很大的一个惊喜!但是我仔细想下,在这个公司工作的话工资还算可以,可是就是学不到什么技术,也做不到什么大的项目。我一直喜欢java技术,我也很想在很短时间内有很大的提高,从在学校读书到现在我一直是自学java,没有人指点,只有从网上找到资料,到网上去问一些问题。进步真的太慢了,有时候一个问题看书可能要看3天才能搞懂,如果别人指点一下可能二分钟就搞定了。曾经都想去参加深圳的一些java培训学校,可是面对那么高的学费,我真的不舍得,况且我也没有钱,我是欠债累累,身上最贵的衣服68元,还得省钱去买那不打折的书。那个物流公司人事部几次打电话来叫我去,我拒绝了,我真的想在技术上面有所发展,我也没有什么大项目的开发经验,为了自己的java梦,为了自己的程序梦,今天又拒绝了这个公司。刚到java群聊了下,感觉他们把做软件说得很恐怖,突然间我感觉有些后悔了,我真的放弃了3800/月的工资,对我来说真的很高了。不知道做java要什么时候才有这样的工资,况且我是个大专生。明天还得继续找工作.....
深圳的工作就这么难找吗?我能找到正式工资有3500的工作吗?如果能找到正式工资有3500元的话我真的不后悔我今天的这个决定。家里需要钱,我也需要钱,但是求知欲让我放弃了眼前....以后会如何,真的不敢去想
真的希望大家给点意见:下面是我的个人简历 精通Dreamware,flash,frontpage等软件.
通java,jsp,servlet......

阅读全文(2018) | 评论:1 | 复制链接

计算机专业学生大学毕业前应学会什么? (2006-02-22 20:56:00)

摘要:1。把计算机最基本的课程学扎实,比如对编程很重要的 数据结构+离散数学,
   数据库系统,软件工程, 另外别忘了英语最好过六级(对就业很有帮助)
2。课余掌握c,c++与Java任选,至少能熟练运用VC++,JBuilder以及各自的类库 。winSQL2000,winAcess熟练运用,Oracle或者DB2或者MySQL学有余力再去掌握一种。
3。多研究算法,这才是成为高手的核心。
4。计算机很杂,实际应用有时更重要,多看些计算机杂志。
5。最关键的一点,实践,编几万行代码,做几个小型信息系统,自然心中有底。   硬件啊,这个我不是很熟悉,仅仅提供一点个人意见
1。计算机专业的关于硬件方面的主干课程要非常熟悉,最好有实践机会。
   最重要的就是微机接口,
2。学习点软件吧,Matalab(记不清楚了),一个科学计算工具。
   掌握好大规模集成电路设计,熟悉VHMl语言以及开发软件。
4。要成为月薪薪两万的硬件工程师,核心掌握单片机,通信原理,电路设计。
5。建议你去图书馆计算机书籍分类里面去“硬件”看看,一般来说,足够你学习了
   其实硬件比软件更难,大学基本上就学点理论跟大概,具体的我看你的到工作中去
   学习了,一般现在的大学没那么好的条件让你去实践。
   小秘诀:其实你是在抢电子专业的饭碗,多交几个电子信息专业的朋友,他们会给 你很大帮助的......

阅读全文(2740) | 评论:0 | 复制链接