- 浏览: 780089 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
wangyudong:
新版本 Wisdom RESTClienthttps://gi ...
jersery client调用REST框架web services服务的一个示例 -
wangyudong:
很多REST Client是不支持自动化测试RESTful A ...
jersery client调用REST框架web services服务的一个示例 -
doubledumbao:
感谢你的代码,在使用中发现两处小问题,已经做了修改,再次感谢。 ...
Java Zip Utils 压缩/解压缩工具包 -
doubledumbao:
package com.ry.messagedigest;
...
Java Zip Utils 压缩/解压缩工具包 -
phrmgb:
对wsdl讲解的很细致,收藏
Web Service (二) WSDL详解
本文大部分内容转载自:JRE 与 JDK ,JVM Client Server了解
介绍JVM client模式与server模式的文章有:
http://phl.iteye.com/blog/857587
http://rednaxelafx.iteye.com/blog/1007251
http://developer.51cto.com/art/201009/228035.htm
一、JRE: java runtime environment java 运行环境
JRE是运行java所需要的环境。包含JVM标准实现和JAVA核心类库,以及javaplug-in。
可以在JRE上进行运行、测试和传输应用程序。JRE不包括编译器,调试器和其他工具。
也就是说,如果直接运行一个java编译好了的class文件,使用JRE就OK 了。
但是如果你要开发一个java文件,然后对它进行编译,调试等工作,这个时候就要用到JDK 了。
二、JDK: java development kit java 开发工具包
java开发人员对这个并不陌生,在创建开发环境的时候首要安装的就是JDK,配置环境变量JAVA_HOME ,指向JDK。
在安装JDK的后,你会发现jdk的目录下有一个jre的目录,也就是说,JDK里面包含一个JRE。这样开发了的程序可以编译后直接运行了。
JDK 有三种版本,常说的J2EE(java 2 platform Enterprise edition),J2SE(java 2 platform standyard edition),
J2ME(java 2 platform micro edition)就是说的JDK 的版本。
JDK 除了核心的java api库和jre外,还包括一些程序组成的工具库(jdk的安装目录bin下可以看到),在这里挑几个简单了解下:
1.javac:java的编译器,可以将java文件编译成字节码
2.java: java的解释器,可以将字节码进行解释运行。
3.jdb: java 调试器,可以设置断点和检查变量,逐行运行程序。
4.javah:产生可以调用java过程的c过程,或建立能被java程序调用的C过程头文件。这个我没用过。暂时理解为C 与 java之间的翻译吧。
5.Javap:java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节码的含义。其实个人感觉叫javap反汇编或反编译器比较别扭。
因为javap毕竟不像其他的反编译工具一样将class文件的直接转成java文件,而只能显示方法的名称,不包括具体实现。
我感觉javap还是作为解释class文件的。如果你没有这个class文件的api,没有ide,想在命令行操作里面查看这个class文件都包括什么方法
那javap还是很简单操作的,你可以直接调用任何一个JDK中本身有的类来进行测试,如
javap -private java.lang.Object
我这里自己写了一个Test类来进行测试,如下所示:
类Test.java的源代码如下所示:
import java.io.IOException;
public class Test{
public static void main(String[] args){
System.out.println("I'm running!");
}
public void test1(){}
private void test2(){}
public void test3() throws IOException{}
}
javap 根据传递的不同参数展示不同的内容,如下所示:
D:\>javap -private Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
public static void main(java.lang.String[]);
public void test1();
private void test2();
public void test3() throws java.io.IOException;
}
D:\>javap -public Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
public static void main(java.lang.String[]);
public void test1();
public void test3() throws java.io.IOException;
}
D:\>javap -verbose Test
Compiled from "Test.java"
public class Test extends java.lang.Object
SourceFile: "Test.java"
minor version: 0
major version: 50
Constant pool:
const #1 = Method #6.#20; // java/lang/Object."<init>":()V
const #2 = Field #21.#22; // java/lang/System.out:Ljava/io/PrintS
tream;
const #3 = String #23; // I'm running!
const #4 = Method #24.#25; // java/io/PrintStream.println:(Ljava/l
ang/String;)V
const #5 = class #26; // Test
const #6 = class #27; // java/lang/Object
const #7 = Asciz <init>;
const #8 = Asciz ()V;
const #9 = Asciz Code;
const #10 = Asciz LineNumberTable;
const #11 = Asciz main;
const #12 = Asciz ([Ljava/lang/String;)V;
const #13 = Asciz test1;
const #14 = Asciz test2;
const #15 = Asciz test3;
const #16 = Asciz Exceptions;
const #17 = class #28; // java/io/IOException
const #18 = Asciz SourceFile;
const #19 = Asciz Test.java;
const #20 = NameAndType #7:#8;// "<init>":()V
const #21 = class #29; // java/lang/System
const #22 = NameAndType #30:#31;// out:Ljava/io/PrintStream;
const #23 = Asciz I'm running!;
const #24 = class #32; // java/io/PrintStream
const #25 = NameAndType #33:#34;// println:(Ljava/lang/String;)V
const #26 = Asciz Test;
const #27 = Asciz java/lang/Object;
const #28 = Asciz java/io/IOException;
const #29 = Asciz java/lang/System;
const #30 = Asciz out;
const #31 = Asciz Ljava/io/PrintStream;;
const #32 = Asciz java/io/PrintStream;
const #33 = Asciz println;
const #34 = Asciz (Ljava/lang/String;)V;
{
public Test();
Code:
Stack=1, Locals=1, Args_size=1
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
LineNumberTable:
line 2: 0
public static void main(java.lang.String[]);
Code:
Stack=2, Locals=1, Args_size=1
0: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3; //String I'm running!
5: invokevirtual #4; //Method java/io/PrintStream.println:(Ljava/lang/Str
ing;)V
8: return
LineNumberTable:
line 5: 0
line 6: 8
public void test1();
Code:
Stack=0, Locals=1, Args_size=1
0: return
LineNumberTable:
line 8: 0
public void test3() throws java.io.IOException;
Code:
Stack=0, Locals=1, Args_size=1
0: return
LineNumberTable:
line 12: 0
Exceptions:
throws java.io.IOException
}
可以使用javap -help来查看javap的各的具体参数如下所示:
D:\>javap -help
Usage: javap <options> <classes>...
where options include:
-c Disassemble the code
-classpath <pathlist> Specify where to find user class files
-extdirs <dirs> Override location of installed extensions
-help Print this usage message
-J<flag> Pass <flag> directly to the runtime system
-l Print line number and local variable tables
-public Show only public classes and members
-protected Show protected/public classes and members
-package Show package/protected/public classes
and members (default)
-private Show all classes and members
-s Print internal type signatures
-bootclasspath <pathlist> Override location of class files loaded
by the bootstrap class loader
-verbose Print stack size, number of locals and args for met
hods
If verifying, print reasons for failure
6. Jconsole: Java进行系统调试和监控的工具
7.jstat : 对jvm的内存使用量进行监控,感觉这个东西很好,正好这几天看java虚拟机,如果不安装其他工具,使用jstat就可以监控到jvm内容使用的情况和GC状况,对于jvm调优很有帮助:
8.jmap - Memory Map: Prints shared object memory maps or heap memory details of a given JVM process or a Java core file on the local machine or on a remote machine through a debug server。
jmap 能够打印出jvm的内存使用详情,也可以把这些详情输出到特定的文件中进行分析
9.native2ascii 可以将目标文件转成unicode 编码,或者将unicode编码的文件还原成本地编码,也可以指定编码进行转换。
三、JVM client模式与server模式
下面整理一下对JVM client 和server 的一点点了解:
1.虚拟机版本与模式查看
java -version //查看JVM默认的环境 java -client -version //查看JVM的客户端环境,针对GUI优化,启动速度快,运行速度不如server java -server -version //查看JVM的服务器端环境,针对生产环境优化,运行速度快,启动速度慢
使用各命令查看时的情况,如下图所示:
2、虚拟机模式切换
目录JAVA_HOME/jre/bin下,会有2个目录,server与client.这个就是他们的运行环境的动态库.如我的机器就是:C:\Java\jdk1.6.0_17\jre\bin.找到JAVA_HOME/jre/lib/i386/jvm.cfg(我的机器是C:\Java\jdk1.6.0_17\jre\lib/i386/jvm.cfg)这就是JVM默认的查找顺序,内容如下
-client KNOWN -server KNOWN -hotspot ALIASED_TO -client -classic WARN -native ERROR -green ERROR
-server KNOWN -client KNOWN -hotspot ALIASED_TO -client -classic WARN -native ERROR -green ERROR
3.虚拟机模式的区别:
一般开发工具中使用的是client,针对不同的服务器使用的不同,
jvm server比jvm client 更优化,
jvm server 启动较慢但启动后运行速度较快。jvm client 启动较快。
jvm client 中能运行的可能在jvm server中运行出错 ,所以这样的话最好在开发、测试阶段都使用jvm server ,保持和服务器相同。不过一直用client,也没出现过什么问题,服务器端用的是server的。可能这种高技术含量的bug相当不容易出现了。
JVM Server模式与client模式启动,最主要的差别在于:-Server模式启动时,速度较慢,但是一旦运行起来后,性能将会有很大的提升。JVM如果不显式指定是-Server模式还是-client模式。
PS:但我在我同事的机器上,他的java的版本是1.6.0.32-b05,在他的机器上运行命令java -server -version时会产生如下所示的错误:
所以修改JAVA_HOME/jre/lib/i386/jvm.cfg下面-server和-client的顺序也是报同样的错误,但我看了安装jdk目录下面的文件我的机器的文件目录一样的。当我直接把他的C:\Java\jdk1.6\jre\bin下面的server文件夹内容拷贝到C:\Java\jre6\bi下面的时候,这时就能实现与我在jdk1.6.0_17实验的结果。
4.遇到的因为虚拟机模式产生的问题
当我在jdk1.6.0_17+tomcat3.0的Tomcat环境下跑得好好的程序,当我把jdk版本升级到1.6.0.32时,结果就遇到了如下所示的问题:
# A fatal error has been detected by the Java Runtime Environment: # # Internal Error (c1_Optimizer.cpp:271), pid=5124, tid=2376 # guarantee(x_compare_res != Constant::not_comparable) failed: incomparable constants in IfOp # # JRE version: 6.0_32-b05 # Java VM: Java HotSpot(TM) Client VM (20.7-b02 mixed mode windows-x86 )
每次一启动Tomcat就会出现上面所示的错误,在tomcat\bin目录下面会产生一个错误日志文件,如: hs_err_pid824.log,然后tomcat就自动停止了。
解决办法:
当程序以-server的模式启动问题就能得到解决 ,程序就能正常启动了。
1.在tomcat\bin\catalina.bat 文件中给JAVA_OPTS加一个-server的参数,让其以server的方式启动。如下所示:
rem ----- Execute The Requested Command --------------------------------------- set JAVA_OPTS=-server -Xms256m -Xmx1224m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true echo Using CATALINA_BASE: "%CATALINA_BASE%" echo Using CATALINA_HOME: "%CATALINA_HOME%" echo Using CATALINA_TMPDIR: "%CATALINA_TMPDIR%" if ""%1"" == ""debug"" goto use_jdk echo Using JRE_HOME: "%JRE_HOME%" goto java_dir_displayed :use_jdk echo Using JAVA_HOME: "%JAVA_HOME%" :java_dir_displayed echo Using CLASSPATH: "%CLASSPATH%"
2.修改JAVA_HOME/jre/lib/i386/jvm.cfg文件,把-server KNOWN语句放在-client KNOWN前面,如下所示:
-server KNOWN -client KNOWN -hotspot ALIASED_TO -client -classic WARN -native ERROR -green ERROR
3.在eclipse配置tomcat server的地方设置jdk的启动参数,如下图所示:
发表评论
-
java 中JSON数据特殊字符的处理
2014-05-05 18:41 6952JSon 数据中的String 传递数据时,需要处理好特殊 ... -
Java Zip Utils 压缩/解压缩工具包
2014-05-05 11:27 7015实际开发中可能会用到压缩或解压缩,底层借助于apache的z ... -
edtFtp实现FTP工具类
2012-10-11 11:22 1308edtFtp是一个开源的纯Java的FTP客户端类库。由于它实 ... -
Java class文件的JDK编译版本号
2012-10-11 09:30 1863本人转载自新浪博客,原文地址:http://blog.sina ... -
TOMCAT支持J2EE版本问题
2012-09-03 18:33 7071j2ee1.4 支持的是servlet2.4,j ... -
SimpleDateFormat 线程安全的问题
2012-05-25 18:10 1312SimpleDateFormat中的日期 ... -
Java编程中“为了性能”尽量要做到的一些地方
2012-05-17 08:48 893这篇文章COPY自:http://www.iteye.c ... -
分享一个文件监听器类:FileMonitor
2011-06-17 15:51 3972一直使用tomcat开发,只要将<Context ... -
在eclipse中给jar关联相应的源文件(Source)
2011-05-09 17:17 6771以给commons.dbcp.jar关联源文件为例进行说明。 ... -
tomcat的启动内存设置
2011-05-07 17:16 1150转载自:http://blog.csdn.net/chen ... -
java调用sql server存储过程
2011-05-06 17:21 3491为了便于测试,先创建一个简单的表: CREATE TA ... -
session过期问题
2010-12-16 11:43 1279摘自:http://dev.firnow.com/course ... -
awttest
2010-12-06 22:20 0protected void doPost(Htt ... -
java环境变量设置
2010-07-01 22:01 3239windows xp下配置JDK环境变量: 1.安装JD ... -
一个删除指定目录下所有文件及子目录的Java程序
2010-05-04 14:30 6902今天在je上闲逛时,看到很多人分享的一个删除指定目录下所有文件 ... -
Publishing failed with multiple errors和Timeout waiting for Tomcat v5.5的解决方法
2010-04-27 14:59 2221转载自:http://sucre.iteye.com/bl ... -
eclipse注释规范设置
2010-04-13 14:57 1822本文来自CSDN博客,转载请标明出处:http://blog. ... -
String , StringBuffer, StringBuilder的区别
2010-03-03 17:38 3562转载自:http://www.cnblogs.com/liuy ... -
解决一台机器同时运行多个Tomcat服务
2010-03-03 15:36 1302转载自: http://www.cnblog ... -
如何生成javadoc文档
2010-03-03 15:31 5543编写Javadoc 代码 在Java 代码的类、 ...
相关推荐
**JDK/JRE 17.0.5详解** Java Development Kit (JDK) 和 Java Runtime Environment (JRE) 是Java编程语言的核心组件,对于任何Java开发者和用户来说都至关重要。JDK 17.0.5是Oracle公司发布的最新版本,提供了对...
1. **Java Runtime Environment (JRE)**:JRE是JDK的基础,提供了运行Java程序所需的环境。它包括Java虚拟机(JVM)、类库以及支持Java程序运行所需的其他文件。JVM是Java程序执行的引擎,负责解释和执行字节码。 2...
6. **弃用的HTTP客户端API(Deprecated HTTP Client API)**:JDK9引入的HttpURLConnection被标记为过时,鼓励开发者使用更现代的HttpClient API。 7. **增强的垃圾收集器(Garbage Collectors)**:包括ZGC和...
JVM有两种运行模式:Server模式和Client模式。Server模式适合长时间运行的服务器端应用程序,具有更多的优化,启动虽然慢,但运行速度快;Client模式适合桌面应用程序,启动速度快,但运行性能相对较低。在了解JVM...
1. 改进的动态代理:在JDK 1.6中,Java的动态代理得到了增强,可以更方便地创建代理类,这对于实现AOP(面向切面编程)和其他设计模式提供了便利。 2. 新的Swing组件和改进:此版本增加了新的Swing组件,如...
1. **编译器优化**:JDK 1.6的编译器进行了显著优化,名为“Client Compiler”和“Server Compiler”的两种编译模式提供更好的性能适应性。Server Compiler在多线程应用中表现出色,而Client Compiler适合轻量级的...
在性能方面,JDK 1.6的HotSpot JVM引入了Client和Server两种模式,分别针对桌面应用和服务器环境优化。Server模式下,JVM会启动更复杂的优化策略,提高大型应用的性能。 此外,JDK 1.6还增强了异常处理,提供了更...
在JDK 20中,开发者可以期待看到如模式匹配(Pattern Matching)这样的语言增强,它使代码更简洁、可读性更强。 2. **Linux x64支持** 这个版本的JDK是专为64位Linux操作系统设计的,意味着它可以充分利用64位系统...
在64位的JDK环境下,默认启用的是-server模式,即使指定了-client参数也会被忽略。 ##### 2.2 -agentlib 和 -agentpath - **-agentlib:libname[=options]**:用于装载本地库。其中`libname`为本地代理库文件名,如...
2. 学习设计模式:JDK源代码中充满了设计模式的应用,如工厂模式、单例模式、装饰器模式等,这些都是提升编程能力的宝贵资源。 3. 性能优化:通过分析JVM和垃圾收集器的源代码,我们可以学习如何优化程序性能,减少...
1 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 手动模式 * 2 /usr/lib/jvm/java-6-sun/bin/java 300 手动模式 ``` 3. **确认Java版本**:最后,可以通过`java -version`命令验证安装是否成功。 ```shell ...
export JRE_HOME=/usr/local/jdk1.7.0_80/jre export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin ``` 这些环境变量的设置是确保系统能够找到JDK的安装...
5. **改进的JVM性能**:JDK 8对垃圾回收机制进行了优化,提升了程序运行效率。 **安装步骤** 1. **下载**:首先,从Oracle官方网站获取“jdk-8u261-windows-i586.exe”文件,确保下载的是32位版本,适合Windows 32...
- **Java运行时环境 (JRE)**:包括JVM和Java核心类库,为Java程序提供运行时环境。 - **Java工具**:如Javadoc(生成API文档)、JAR(打包工具)、JDB(调试工具)等,辅助开发过程。 **3. JDK 1.8.0.13的具体改进...
这个可执行文件将安装JDK的全部组件,包括Java编译器(javac)、Java运行时环境(JRE)、Java虚拟机(JVM)、Java文档(javadoc)、Java打包工具(jar)以及其他必要的库和工具。 1. **新特性与改进**:JDK 14引入...
Java Development Kit(JDK)是Java编程语言的核心组件,它为开发者提供了编译、调试和运行Java应用程序所需的所有...通过解压缩并设置环境变量,开发者可以轻松地在本地环境中使用这个版本的JDK进行开发和调试工作。
`-client` 和 `-server` 参数用于选择JVM的执行模式。`-client` 模式适用于桌面应用或开发调试,因为它启动速度快,但运行时性能较低。相反,`-server` 模式适合服务器端应用,提供更好的运行时性能和内存管理,但...
- **类型**:`client`,HotSpot JVM有两种类型——`server`和`client`,可以通过`-server`和`-client`参数来指定。如果不指定,则JVM会根据系统自动选择类型。通常,32位系统默认为`client`模式,64位系统默认为`...
JDK 18是Java语言的一个重要版本,它包含了Java编译器、JVM(Java虚拟机)、JRE(Java运行环境)以及各种开发工具,如Javadoc、JConsole和VisualVM等。这个版本主要关注新特性的引入和现有特性的改进,旨在提升...
JDK 7是在JDK 6的基础上进行了一系列改进与增强,引入了许多新功能和技术,为开发者提供了更加丰富的编程工具。 #### 二、JDK 7 的主要新特性 1. **模块系统**:虽然JDK 7中的模块系统(Project Jigsaw)并未完全...