java技术--JDK、JRE、JVM、TOMCAT关系

1.JDK:
(1)是开发人员开发使用
(2)JDK中包含JRE
(3)是java运行和编译的,java没有jdk没办法编译运行,java运行必须依赖jdk的环境
(4)jdk是java语言编写的,用来给java程序调用的
2.JRE:
(1)jre是用来运行java程序,就是java程序的运行环境
3.JVM:
(1)jvm是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行
(2)jvm因为与平台进行交互,是用c/c++和汇编语言编写的
4.TOMCAT:
(1)tomcat是web项目的运行容器
(2)java运行必须依赖jdk的环境,但是不一定需要tomcat,也可以放在weblogic等服务器中

 JDK、JRE、JVM关系:
 1.JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录
 2.jre的目录里面有两个文件夹bin和lib,在这里bin里的就是jvm,lib中则是jvm工作所需要的类库
 3.jvm和 lib和起来就称为jre
 4.JDK(开发工具包),JRE(运行环境,运行时类库),JVM(java虚拟机)

5.什么是JVM
5.1.从操作系统的层面来理解,jvm其实就是操作系统中的一个进程
5.2.JVM(虚拟机),相当于电脑安装系统一样,可以运行应用程序

举例:我们启动运行myeclipse(myeclipse其实就是用java语言编写的一个软件)他的运行必然会启动一个jvm,我们可以把myeclipse理解成我们自己写的一个简单的java版的helloworld程序

5.3.JVM跑着tomcat,而没有JVM tomcat就废物了
6.什么是TOMCAT
6.1.Tomcat 其实是一个用java语言开发的免费开源的web服务器
6.2.Tomcat 是 Java 程序,运行在 JVM 之上
6.3.Tomcat 跑起来,就得有jdk,而jdk自带了JVM,安装完了jdk,把安装jdk的bin目录告诉tomca就可以了(运行java应用需要jvm)

  1.一个tomcat是一个进程,其中有很多线程(与有多少个app无关)
  2.一个tomcat启动一个JVM,其中可以有很多APP /WAR
  3.一个tomcat中部署的多个app,虽然同处一个JVM里,但是由于无法相互调用(因为被类加载器隔离开的),所以也可以认为是分布式的 

扩展:Tomcat和JVM的内存配置/性能优化

  1. JVM内存分配设置的参数有四个:
 (1)-Xmx Java Heap最大值,默认值为物理内存的1/4;
 (2)-Xms Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;
 (3)-XX:PermSize:设定内存的永久保存区域;
 (4)-XX:MaxPermSize:设定最大内存的永久保存区域;
    -Xms512M -Xmx1024M -XX:PermSize=512m -XX:MaxPermSize=1024m

扩展:Java 的内存模型(3部分)

 1.Young:年轻代(易被 GC)
    1.1.Young 区被划分为三部分,Eden 区和两个大小严格相同的 Survivor 区
        1.1.1.Survivor 区间:
          (1)某一时刻只有其中一个是被使用的,另外一个留做垃圾收集时复制对象用
          (2)在 Young 区间变满的时候,minor GC 就会将存活的对象移到空闲的Survivor 区间中
          (3)根据 JVM 的策略,在经过几次垃圾收集后,任然存活于 Survivor 的对象将被移动到 Tenured 区间
 2.Tenured,终身代
      2.1.主要保存生命周期长的对象,一般是一些老的对象       
      2.2.当一些对象在 Young 复制转移一定的次数以后,对象就会被转移到 Tenured 区
      2.3.一般如果系统中用了 application 级别的缓存,缓存中的对象往往会被转移到这一区间
 3.Perm,永久代
      3.1.主要保存 class,method,filed 对象,这部门的空间一般不会溢出,除非一次性加载了很多的类
      3.2.在涉及到热部署的应用服务器的时候,有时候会遇到 java.lang.OutOfMemoryError : PermGen space 的错误
      3.3.造成这个错误的很大原因就有可能是每次都重新部署
      3.4.重新部署后,类的 class 没有被卸载掉,这样就造成了大量的 class 对象保存在了 perm 中
      3.5.这种情况下,一般重新启动应用服务器可以解决问题

2.TOMCAT性能优化:主要三方面,为系统优化(略),Tomcat 本身的优化,Java 虚拟机(JVM)调优
Tomcat 6/7/8 的优化参数有点不一样,最好按下面的方式看一下官网这个文档是否还保留着这个参数
启动tomcat,访问该地址,下面要讲解的一些配置信息,在该文档下都有说明的:
文档:http://127.0.0.1:8080/docs/config
Tomcat 6 文档:https://tomcat.apache.org/tomcat-6.0-doc/config
Tomcat 7 文档:https://tomcat.apache.org/tomcat-7.0-doc/config/
Tomcat 8 文档:https://tomcat.apache.org/tomcat-8.0-doc/config
2.1.Tomcat 本身优化

    2.1.1.修改一下 xml 配置文件中的参数,调整最大连接数,超时等(安装 Tomcat 时,优化就已经开始了)
        (1)工作方式选择
         Apache 和 Tomcat 的整合有三种选择(JK、http_proxy 和 ajp_proxy),建议采用 JK 的连接方式
        (2)Connector 连接器的配置(修改server.xml里的Connector节点)
         1.Tomcat 连接器的三种方式: bio、nio 和 apr
         2.apr 的性能最优, bio 的性能最差
         3.Tomcat 7 使用的 Connector  默认就启用的 Apr 协议,但需要系统安装 Apr 库,否则就会使用 bio 方式。
         4.启用 nio:是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,拥有比传统I/O操作(bio)更好的并发运行性能
         修改server.xml里的Connector节点,修改protocol为org.apache.coyote.http11.Http11NioProtocol/Nio2Protocol/
         Tomcat 8 设置 nio2 更好/Tomcat 6、7 设置 nio 更好
       (3)配置文件优化
         1.需要查看 Tomcat 的运行状态可以配置tomcat管理员账户,然后登陆 Tomcat 后台进行查看
          编辑 /opt/tomcat7/bin/conf/tomcat-users.xml 文件,在里面添加下面信息:
          
          
          
          
          
          
         2.配置文件优化其实就是对 server.xml 优化,可以提大大提高 Tomcat 的处理请求的能力
         3.默认配置下Tomcat 会为每个连接器创建一个绑定的线程池(最大200),默认创建了固定个数的(5个)空闲线程
         默认值:
               
        修改为:
               
        修改为:
               
                
      5.禁用 AJP(如果你服务器没有使用 Apache)
         把下面这一行注释掉,默认 Tomcat 是开启的
           
  以上是一些常用的配置参数属性,当然还有好多其它的参数设置,还可以继续深入的优化

2.2.Java 虚拟机(JVM)调优

        2.2.1.Tomcat 启动命令行中的优化参数,就是 JVM 的优化
        2.2.2.Tomcat 首先跑在 JVM 之上的,因为它的启动其实也只是一个 java 命令行,首先我们需要对这个 JAVA 的启动命令行进行调优
           (1)Linux 修改 /usr/program/tomcat7/bin/catalina.sh 文件,把下面信息添加到文件第一行
           (在 Linux 下,下面的的参数值是被引号包围的,而 Windows 不需要引号包围)
               1.如果服务器只运行一个 Tomcat
                  1.1.机子内存如果是 8G,一般 PermSize 配置是主要保证系统能稳定起来就行:
                  JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms6144m -Xmx6144m -XX:NewSize=1024m -
                  XX:MaxNewSize=2048m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=10 -
                  XX:NewRatio=2 -XX:+DisableExplicitGC"
                  1.2.机子内存如果是 16G,一般 PermSize 配置是主要保证系统能稳定起来就行:
                  JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms13312m -Xmx13312m -XX:NewSize=3072m -
                  XX:MaxNewSize=4096m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=10 -
                  XX:NewRatio=2 -XX:+DisableExplicitGC"
                  1.3.机子内存如果是 32G,一般 PermSize 配置是主要保证系统能稳定起来就行:
                  JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms29696m -Xmx29696m -XX:NewSize=6144m -
                  XX:MaxNewSize=9216m -XX:PermSize=1024m -XX:MaxPermSize=1024m -XX:MaxTenuringThreshold=10 -
                  XX:NewRatio=2 -XX:+DisableExplicitGC"
                  1.4.如果是开发机
                  Xms550m -Xmx1250m -XX:PermSize=550m -XX:MaxPermSize=1250m
           
       2.2.3.Tomcat 的启动参数位于安装目录 ${JAVA_HOME}/bin目录下
       (1)JAVA_OPTS:用于当 Java 运行时选项“start”、“stop”或“run”命令执行。
       (2)CATALINA_OPTS:用于当 Java 运行时选项“start”或“run”命令执行。
       (3)对于 Tomcat 运行过程,可能没什么区别,影响的是结束程序,而不是启动程序。
       (4)如果设置环境变量为只使用 Tomcat,建议使用 CATALINA_OPTS 变量,而如果设置环境变量使用其它的 Java 应用程序,例如 JBoss,应该把设置放在JAVA_OPTS 变量中。
       (5)TOMCAT_HOME\bin\catalina.bat 中添加这样一句话:
       set JAVA_OPTS= -Xmx1024M -Xms512M -XX:MaxPermSize=256m

扩展:直接优化JVM 和 Tomcat JVM优化区别
1.没什么区别:tomcat也是跑在jvm上的
2.建议在Tomcat中优化jvm(原因如下)
(1)tomcat启动会调用jvm,jvm中有默认参数
(2)如果只优化jvm参数启动tomcat后参数会覆盖jvm参数
(3)因此tomcat jvm优化往往是更加贴切的.更加使用的.更加有意义的

你可能感兴趣的:(java技术--JDK,JRE,JVM,TOMCAT关系)