- 浏览: 7340330 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
1. EJB是以RMI为基础的
通过RMI技术,J2EE将EJB组件创建为远程对象,EJB虽然用了RMI技术,但是却只需要定义远程接口而无需生成他们的实现类,这样就将RMI技术中的一些细节问题屏蔽了。
但不管怎么说,EJB的基础仍然是RMI,所以,如果你想了解EJB的原理,只要把RMI的原理搞清楚就行了。你也就弄清楚了什么时候用EJB什么时候不需要用EJB了。
RMI是将各种任务与功能的类放到不同的服务器上,然后通过各个服务器间建立的调用规则实现分布式的运算,也就明白EJB所谓的"服务群集"的概念。
就是将原来在一个计算机上运算的几个类,分别放到其他计算机上去运行,以便分担运行这几个类所需要占用的CPU和内存资源。同时,也可以将不同的软件功能模块放到不同的服务器上,当需要修改某些功能的时候直接修改这些服务器上的类就行了,修改以后所有客户端的软件都被修改了
2 分布式计算与RPC
RPC并不是一个纯粹的Java概念,因为在Java诞生之前就已经有了RPC的这个概念,RPC是"Remote Procedure Call"的缩写,也就是"远程过程调用"。在Java之前的大多数编程语言,如,Fortran、C、COBOL等等,都是过程性的语言,而不是面向对象的。所以,这些编程语言很自然地用过程表示工作,如,函数或子程序,让其在网络上另一台机器上执行。说白了,就是本地计算机调用远程计算机上的一个函数。
RMI英文全称是"Remote Method Invocation",它的中文名称是"远程方法调用",它就是利用Java对象序列化的机制实现分布式计算,实现远程类对象的实例化以及调用的方法。说的更清楚些,就是利用对象序列化来实现远程调用,也就是上面两个概念的结合体,利用这个方法来调用远程的类的时候,就不需要编写Socket程序了,也不需要把对象进行序列化操作,直接调用就行了非常方便。
远程方法调用是一种计算机之间对象互相调用对方函数,启动对方进程的一种机制,使用这种机制,某一台计算机上的对象在调用另外一台计算机上的方法时,使用的程序语法规则和在本地机上对象间的方法调用的语法规则一样。
优点
这种机制给分布计算的系统设计、编程都带来了极大的方便。只要按照RMI规则设计程序,可以不必再过问在RMI之下的网络细节了,如:TCP和Socket等等。任意两台计算机之间的通讯完全由RMI负责。调用远程计算机上的对象就像本地对象一样方便。
RMI可将完整的对象作为参数和返回值进行传递,而不仅仅是预定义的数据类型。也就是说,可以将类似Java哈西表这样的复杂类型作为一个参数进行传递。
缺点
如果是较为简单的方法调用,其执行效率也许会比本地执行慢很多,即使和远程Socket机制的简单数据返回的应用相比,也会慢一些,原因是,其在网络间需要传递的信息不仅仅包含该函数的返回值信息,还会包含该对象序列化后的字节内容。
JVM垃圾回收的相关知识
JVM使用的是分代垃圾回收的方式,主要是因为在程序运行的时候会有如下特点:
大多数对象在创建后很快就没有对象使用它了。
大多数在一直被使用的对象很少再去引用新创建的对象。
因此就将Java对象分为"年轻"对象和"年老"对象,JVM将内存堆(Heap)分为两个区域,一个是"年轻"区,另一个是"老"区,Java将这两个区域分别称作是"新生代"和"老生代"。
"新生代"区域中,绝大多数新创建的对象都存放在这个区域里,此区域一般来说较小而且垃圾回收频率较高,同时因为"新生代"采用的算法和其存放的对象的特点,使该区域垃圾回收的效率也非常高。
而"老生代"区域中存放的是在"新生代"中生存了较长时间的对象,这些对象将被转移到"老生代"区。这个区域一般要大一些而且增长的速度相对于"新生代"要慢一些,"老生代"垃圾回收的执行频率也会低很多。
由于JVM在垃圾回收处理时会消耗一定的系统资源,因此有时候通过JVM启动的时候添加相关参数来控制"新生代"区域的大小,来调整垃圾回收处理的频率非常有用。以便于我们更合理的利用系统资源。
"新生代"区域设置参数是"-Xmn",用这个参数可以制定"新生代"区域的大小。
我们来举一个例子说明:
我们就用系统自带的程序作为例子,在命令行上键入如下指令:
CD C:\java\demo\jfc\SwingSet2[回车] C:\java\demo\jfc\SwingSet2>java -jar -verbose:gc -Xmn4m XX:+PrintGCDetails SwingSet2.jar[回车] |
[GC [DefNew: 3469K->84K(3712K), 0.0007778 secs] 23035K->19679K(28728K), 0.0009191 secs] [GC [DefNew: 3284K->171K(3712K), 0.0007283 secs] 22878K->19766K(28728K), 0.0008669 secs] [GC [DefNew: 3476K->260K(3712K), 0.0008504 secs] 23071K->19855K(28728K), 0.0009862 secs] [GC [DefNew: 3502K->87K(3712K), 0.0009267 secs] 23096K->19682K(28728K), 0.0010610 secs] |
我们需要解释一下输出的详细内容的意思,拿第一行输出来说:
"DefNew: 3469K->84K(3712K), 0.0007778 secs"是指"新生代"的垃圾回收情况,这里的意思是从占用3469K内存空间变为84K内存空间,用时0.0007778秒。
"23035K->19679K(28728K), 0.0009191 secs"是指总体GC的回收情况,整体堆空间占用从23035K降低到19679K的水平,用时0.0009191秒。
那么,这时候我们在将"新生代"的内存设为8M,并把堆的最大可控值设定为32M,再去执行,键入如下指令:
java -jar -verbose:gc -Xmn8m -Xmx32m XX:+PrintGCDetails SwingSet2.jar[回车] |
[GC [DefNew: 6633K->6633K(7424K), 0.0000684 secs] [Tenured: 18740K->18820K(24576K), 0.0636505 secs] 25374K->18820K(32000K), 0.0639274 secs] [GC [DefNew: 6646K->6646K(7424K), 0.0002581 secs] [Tenured: 18820K->18884K(24576K), 0.0651957 secs] 25467K->18884K(32000K), 0.0658804 secs] [GC [DefNew: 6611K->6611K(7424K), 0.0000668 secs] [Tenured: 18884K->18505K(24576K), 0.0931406 secs] 25496K->18505K(32000K), 0.0934295 secs] |
这个结果说明:
"[DefNew: 6633K->6633K(7424K), 0.0000684 secs]"是指"新生代"的垃圾回收情况,这里的意思是从占用6633K内存空间变为6633K内存空间,用时0. 0000684秒。
"25374K->18820K(32000K), 0.0639274 secs"是指总体GC的回收情况,整体堆空间占用从25374K降低到18820K的水平,用时0. 0639274秒。
"[Tenured: 18740K->18820K(24576K), 0.0636505 secs]"是指"老生代"GC的回收情况,整体堆空间占用从18740K降低到18820K的水平,用时0.0009012秒。
通过这些参数的调整我们可以看到在处理垃圾收集问题时,从垃圾回收的频率是时间方面的变化,我们可以根据不同程序的不同情况予以调整。
最后有必要提一下GC的相关参数:
-XX:+PrintGCDetails 显示GC的详细信息
-XX:+PrintGCApplicationConcurrentTime 打印应用执行的时间
-XX:+PrintGCApplicationStoppedTime 打印应用被暂停的时间
注:":"后的"+"号表示开启此选项,如果是"-"号那么表示关闭此选项。
发表评论
-
[转] J2EE集群原理
2013-07-23 09:57 4536J2EE集群原理 什么是集群呢?总的来说,集群包括两个概念 ... -
[转]J2EE 中间件 JVM 集群
2013-07-23 09:51 25231 前言越来越多的关键任务和大型应用正运行在J2EE平台上,象 ... -
[转]通过 Terracotta实现基于Tomcat的Web应用集群
2013-07-23 09:45 5140转载自: http://blog.csdn.n ... -
Terrocotta - 基于JVM的Java应用集群解决方案
2013-07-23 09:47 2508前言 越来越多的企业 ... -
Quartz与Terracotta的集成
2013-07-22 20:39 2789Quartz与Terracotta的集成 • 综述 • 配置 ... -
Terracotta服务器的不同配置方式
2013-07-22 20:37 2160Terracotta Server有4类配置方式:1、单机,无 ... -
Terracotta 3.2.1简介 (一)
2013-07-22 20:25 2490Terracotta开源项目以及Terracotta公司 ... -
Jvm级别的集群(转)
2013-07-22 20:14 2336Java的垃圾回收机制( ... -
【转】java并发编程-Executor框架
2012-11-28 13:20 3742转载自 http://www.iteye.com/topic ... -
【转】互联网常见Open API文档资源
2012-07-17 17:22 2419原文出处:http://www.williamlong.i ... -
最近项目开发中遇到几个问题
2011-11-25 18:49 18301.JDK1.60安装之后与Apache CXF开发WebSe ... -
Java 文件合并功能
2011-08-25 08:44 3766在项目中在一个文件目录中存放多个临时文件合并文件功 ... -
Java 分割功能实现
2011-08-25 08:39 2795在项目针对比较大的文件需要文件的分割功能,特意写了一个 ... -
在JVM关闭的时候线程该怎么关闭呢
2011-08-21 13:11 2213在编写线程类的时候设置一个标志,用于表示是否开始执行 ... -
Java获取系统IP地址
2011-08-21 13:01 6045在一个项目中如果你想获取系统的ip地址那么可能许多同 ... -
java 网络编程,RMI,EJB之间那些屁事(二)
2010-12-12 14:40 1916使用RMI和EJB的童鞋,都知道EJB有客户端 ... -
java 网络编程,RMI,EJB之间那些屁事(一)
2010-12-12 14:18 3040在java的开发中不可避免的遇到java ... -
JMX 和系统管理
2010-12-04 16:03 5634检测 ... -
关于JDK1.5不支持创建泛型数组的解决方案
2009-12-05 14:59 3834在项目中需要 ... -
JDK1.5中的打印服务
2009-12-01 13:23 2593package com.unutrip.print; imp ...
相关推荐
Java的几个小游戏Java的几个小游戏Java的几个小游戏 Java的几个小游戏Java的几个小游戏Java的几个小游戏 Java的几个小游戏Java的几个小游戏Java的几个小游戏 Java的几个小游戏Java的几个小游戏Java的几个小游戏 Java...
下面,我们将深入探讨几个对初学者乃至专业人士都非常有益的Java学习网站,这些网站提供了丰富的教程、实战项目、社区支持以及最新的技术资讯,帮助你全面掌握Java语言。 1. **Oracle官方文档**: Oracle官方网站...
Java的几个重要版本_动力节点Java学院整理,动力节点口口相传的Java黄埔军校
在Java编程中,有几个常用的类对于开发人员来说是不可或缺的,这些类可以帮助我们处理数据库操作、页面分页以及过滤请求。下面将详细讲解标题和描述中提到的几个关键概念。 首先,`baseDao` 类是Java开发中的一个...
经典java问题,你能答出几个.mht
### Java中计算两个日期相差几天 在Java编程中,经常需要处理与日期和时间相关的操作。其中一项常见的需求就是计算两个日期之间的差距。本篇文章将详细介绍如何在Java中计算两个日期相差几天,并深入探讨示例代码中...
到底创建了几个String对象(三)——变量(属性)的覆盖 (四)——final、finally和finalize的区别 (五)——传了值还是传了引用(六)——字符串(String)杂谈 (七)——日期和时间的处理 (八)——聊聊基本...
以下是我从"学习Java必须弄懂的几个问题"这个主题中提炼出的一些重要知识点: 1. **Java基础语法**:Java是一种面向对象的语言,理解其基本语法结构至关重要。包括数据类型(如整型、浮点型、字符型和布尔型)、...
在Java Web开发过程中,中文乱码问题是开发者经常遇到的一个挑战。这些问题主要源于Java默认的Unicode编码与HTML页面及表单默认的Latin-1编码之间的不兼容,以及在不同的环境中(如服务器、数据库、浏览器)使用了...
在使用Java API文档时,开发者通常会关注以下几个方面: 1. 类(Class):了解类的职责、构造器、属性和方法。 2. 接口(Interface):查看接口定义的方法,了解其作用和实现方式。 3. 方法(Method):理解方法的...
### Java开发中几个可以常去看的外国网站 在Java开发领域,不断学习新技术、了解行业动态对于提升个人技能和保持竞争力至关重要。以下是一些值得Java开发者经常访问的外国网站,这些网站提供了丰富的资源,包括技术...
在本项目中,我们关注的是一个使用Java编程语言实现的简单电话簿系统。这个系统包含了多个类,每个类都有特定的功能,共同构建了一个完整的电话簿应用程序。以下是对这些类和功能的详细解释: 1. **PhoneBook.java*...
Java中Executors类中几种创建各类型线程池方法及简单实例
- 在Java中实现slopeone算法,需要维护用户-物品的评分矩阵,并计算每个用户对不同物品的评分差异。这个过程涉及到大量的数据处理和计算,Java的面向对象特性可以很好地支持此类任务。 2. **SVD (奇异值分解)**: ...
资源名称:JAVA开发疑难问题汇总资源目录:【】10年程序员生涯总结:从C 到Java的几点思考【】50个必备的实用jQuery代码段【】5招教你把握Java性能监控【】J2EE基础:浅谈依赖注入实现的方法【】java-内部类那点事...
这些"几个很不错的Java游戏源代码"提供了一次深入理解Java编程、游戏逻辑以及核心Java知识的绝佳机会。下面,我们将详细探讨这些游戏源代码所涵盖的知识点。 首先,"3d坦克游戏"是一个展示Java 3D图形编程能力的...
JAVA的几个经典程序,学生管理系统等等......................................................................................
根据给定的文件信息,我们将深入探讨几个有助于提升Java技能的网站,这些网站涵盖了从基础到高级的多个层次,是学习、研究和实践Java技术的宝库。 ### 1. CSDN (www.csdn.com.cn) CSDN是中国最大的开发者社区之一...