JRE, JDK, JVM
来源:互联网 发布:工大高新 人工智能 编辑:程序博客网 时间:2024/05/17 06:36
一、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还是很简单操作的,例如:
- [root@kaifa02 ~]# javap -private java.lang.Object
- Compiled from "Object.java"
- public class java.lang.Object{
- public java.lang.Object();
- private static native void registerNatives();
- public final native java.lang.Class getClass();
- public native int hashCode();
- public boolean equals(java.lang.Object);
- protected native java.lang.Object clone() throws java.lang.CloneNotSupportedException;
- public java.lang.String toString();
- public final native void notify();
- public final native void notifyAll();
- public final native void wait(long) throws java.lang.InterruptedException;
- public final void wait(long, int) throws java.lang.InterruptedException;
- public final void wait() throws java.lang.InterruptedException;
- protected void finalize() throws java.lang.Throwable;
- static {};
- }
javap 根据传递的不同参数展示不同的内容,可以使用javap -help来查看具体参数的使用,参数很少,也比较简单
- [root@kaifa02 ~]# 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 methods
- 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的内存使用详情,也可以把这些详情输出到特定的文件中进行分析
- [root@kaifa02 ~]# jmap -heap 3876
- Attaching to process ID 3876, please wait...
- Debugger attached successfully.
- Server compiler detected.
- JVM version is 10.0-b22
- using thread-local object allocation.
- Parallel GC with 8 thread(s)
- Heap Configuration:
- MinHeapFreeRatio = 40
- MaxHeapFreeRatio = 70
- MaxHeapSize = 2147483648 (2048.0MB)
- NewSize = 1048576 (1.0MB)
- MaxNewSize = 4294901760 (4095.9375MB)
- OldSize = 4194304 (4.0MB)
- NewRatio = 8
- SurvivorRatio = 8
- PermSize = 16777216 (16.0MB)
- MaxPermSize = 67108864 (64.0MB)
- Heap Usage:
- PS Young Generation
- Eden Space:
- capacity = 123797504 (118.0625MB)
- used = 25266160 (24.095687866210938MB)
- free = 98531344 (93.96681213378906MB)
- 20.40926447111567% used
- From Space:
- capacity = 1900544 (1.8125MB)
- used = 0 (0.0MB)
- free = 1900544 (1.8125MB)
- 0.0% used
- To Space:
- capacity = 20447232 (19.5MB)
- used = 0 (0.0MB)
- free = 20447232 (19.5MB)
- 0.0% used
- PS Old Generation
- capacity = 954466304 (910.25MB)
- used = 19873888 (18.953216552734375MB)
- free = 934592416 (891.2967834472656MB)
- 2.0821990170540374% used
- PS Perm Generation
- capacity = 67108864 (64.0MB)
- used = 35417304 (33.776573181152344MB)
- free = 31691560 (30.223426818847656MB)
- 52.77589559555054% used
9.native2ascii 可以将目标文件转成unicode 编码,或者将unicode编码的文件还原成本地编码,也可以指定编码进行转换。
恩,好了,在jdk的bin目录下还有好多这样的工具使用。虽然不经常使用,但是感觉了解一下还是有必要的。
========================== JVM 相关 =======================
下面整理一下对JVM client 和server 的一点点了解:
在昨天的时候和一个朋友聊天才知道jvm 是分client 和server ,实在是惭愧~
在咱们安装完jdk后,在jdk/jre/bin下有目录 client , server ,在jdk/jre/lib/i386 目录下有个jvm.cfg
- -client KNOWN
- -server KNOWN
- -hotspot ALIASED_TO -client
- -classic WARN
- -native ERROR
- -green ERROR
默认启动的时候是使用第一行的启动,或者你可以加参数 java -client className 进行启动,来定制自己时使用clent还是server。
一般开发工具中使用的是client,针对不同的服务器使用的不同,
jvm server比jvm client 更优化,
jvm server 启动较慢但启动后运行速度较快。jvm client 启动较快。
jvm client 中能运行的可能在jvm server中运行出错 ,所以这样的话最好在开发、测试阶段都使用jvm server ,保持和服务器相同。不过一直用client,也没出现过什么问题,服务器端用的是server的。可能这种高技术含量的bug相当不容易出现了。
在这里只做了解吧。不那么懂,没法深入了。
ps:java -version 可以查看出你使用的是client还是 server
- C:\Documents and Settings\Administrator>java -version
- java version "1.6.0_21"
- Java(TM) SE Runtime Environment (build 1.6.0_21-b06)
- Java HotSpot(TM) Client VM (build 17.0-b16, mixed mode, sharing)
- [root@kaifa02 ~]# java -version
- java version "1.6.0_06"
- Java(TM) SE Runtime Environment (build 1.6.0_06-b02)
- Java HotSpot(TM) Server VM (build 10.0-b22, mixed mode)
- jre,jvm,jdk
- JDK、JRE与JVM
- JDK,JRE,JVM
- jdk、jre与jvm
- jdk,jre,jvm
- java jdk jvm jre
- jdk、jre、jvm详解
- JDK、JRE与JVM
- JRE, JDK, JVM
- jre jdk jvm小结
- JDK JRE JVM 关系
- jvm jre jdk 区别
- JRE,JDK,JVM区别
- java-jdk jre jvm
- java jdk jre jvm
- JDK,JRE,JVM区别
- JDK SDK JRE JVM
- jdk jre jvm
- NS-3中Config::Connect与Config::ConnectWithoutContext的区别
- linux计划任务
- NLB
- 程序自动更新模块
- nmon文件存放的路径
- JRE, JDK, JVM
- java session HttpSessionListener、HttpSessionBindingListener使用区别,实现在线人数统计以及踢出用户
- 第二天
- Linux下非Oracle数据库安装用户执行OCCI程序
- 设置修改CentOS系统时区
- 好好学一遍JavaScript 笔记(一)——基础中的基础
- 使用_TrackMouseEvent捕获WM_MOUSELEAVE和WM_MOUSEHOVER消息
- ModifyStyle()调用不起作用
- Android中不使用布局文件,java代码动态创建布局及控件