一:实践一次这样的操作有助于理解Tomcat/Eclipse的启动原理,包括classpath的设置,option的配置等等;

二:通过Bash终端创建一个简单的Java项目(单项目单Module,如果是IDEA的多Module可以创建一个Proj,然后内部再创建Module,这时候Module就类似这里的Proj,但是编译和运行的pwd应该为Proj而非Module)

1.cd到工作空间,个人是:cd /home/silentdoer/TerminalProjs/JavaProjs;然后执行mkdir FirstTerminalProj创建第一个终端项目;

2.cd到FirstTerminalProj里,通过mkdir -p src/me/silentdoer/terminalprojtest classes同时创建src和classes目录,并创建src的包路径,然后通过touch src/me/silentdoer/terminalprojtest/Entrance.java创建一个java文件(后缀其实可以任意或不要);

3.vim ./me/silentdoer/terminalprojtest/Entrance.java;开始写简单代码;

4.第一步先写package me.silentdoer.terminalprojtest;之后便是写Entrance类和main方法;

5.把Entrance.java写好后保存退出,此时pwd在FirstTerminalProj目录里;

6.用javac src/me/silentdoer/terminalprojtest/Entrance.java -d classes命令将该文件编译到对应的目标目录,javac会自动在目标目录内创建与该类包路径对应的目录路径然后生成 类名.class文件;

7.用java -cp classes me.silentdoer.terminalprojtest.Entrance(这里可接参数列表)来运行me.silentdoer.terminalprojtest.Entrance类;注意这里是运行这个类,如果没有指定-cp则jvm会以CLASSPATH的为准去搜索这个类然后执行;

8.运行jar包的方法为java -jar xx.jar(接参数列表),注意这里是需要有.jar后缀的,因为jar包实际上还可以是zip包,它不像.class一样是固定的;

总结:

javac里的-classpath或-cp是用来指定java源文件中(不一定要.java结尾,就像shell脚本不一定要.sh一样,编译后自动是.class)引用的jar包或其它module的classes目录(即Module依赖另一个Module),否则javac发现引用的东西不存在会编译失败(这也是为什么看框架源码要将编译方式由javac换成eclipse的原因);

1.可通过-d xx/classes指定编译输出目录;注意javac可以编译任何路径下的源文件而不需要此文件在对应的目录结构下(已经经过测试确实是这样),但是运行.class则需要在对应的目录结构下(即包路径和目录路径一致,这是因为运行某个类实际上不是去运行而是告诉jvm我要运行哪个类,然后jvm去classpath里搜索)

2.可以javac ./src/me/silentdoer/terminaltestproj/Entrance.java -d ./classes来编译,最后自动生成完整的与包对应的目录和.class文件在classes中;

3.如果要一次性编译目录下所有的文件可以用:查了下也测试了似乎只能编译某个包下的所有文件用如me/silentdoer/test01/*.java实现;(最终想了下还是用shell脚本实现吧,就是传递两个参数,src路径和classes路径,然后shell遍历src下所有的目录通过cd $dir和cd ..实现转接到不同目录然后通过javac ./*.java -d classes来实现编译所有的.java文件[这时候后缀的好处体现出来了,虽然并不要求必须是.java],编译方式类似:javac src/me/silentdoer/terminalprojtest/*.java -d classes),这里不需要用到-sourcepath,目前不知道这个有什么用。

1)java运行字节码文件则要求提供-cp为classes目录,用java -cp ./classes me.silentdoer.terminalprojtest.Entrance即可运行;注意这里之所以不需要.class是因为javac是为了查找要编译的文件跟后缀无关,而所有的编译好的都叫XX.class,因此字节码文件后缀唯一而源文件后缀任意,所以运行时不需要附带.class;

2)如果运行的项目需要用到其它jar包或引用了其它module,则应该是java -cp ./classes:xx/other-module-classes:xx/XX.jar。。。这样子引用其它module和jar包;

3)java命令还可以指定JVM的其它参数,如java -cp ./classes-server -d64 -Dmypro=33 me.silentdoer.terminalprojtest.Entrance等等,这里-server表示jvm以server模式执行,-d64表示以64位数据模式执行[需要安装的是64位jre],-Dmypro=33表示在系统参数里添加key-value为mypro=33;

4)经常用来优化jvm和配置全局变量的参数:

1.-server,如tomcat启动时会指定;

2.-d64,只要安装的是64位的最好指定;

3.Dmypro=33,如tomcat启动时会指定DCATALINA_HOME=xxx等等

4.-Xms设定此jvm实例的初始的堆大小(内存)也是最小大小,使用方式为-Xms256m,即这个jvm在启动后就会从操作系统那申请256兆的内存;(单位包括k即kb,m即兆,g为G,应该没有byte单位的)

5.-Xmx设定此jvm实例最多可以从操作系统那里申请多少的内存,使用方式为-Xmx2048m,则当随着对应java app需要的内存越多此jvm实例会继续像操作系统申请内存,但不超过2048m;如果java app的需求超过了这个值就会报outofmemory异常;

6.-Xss设定jvm为对应java app每个启动线程分配的大小,jdk1.5以后是1M

这里java.lang.Runtime类中的 freeMemory(), totalMemory(), maxMemory()的输出和上面的配置有莫大关系,maxMemory获得此jvm实例设置的-Xmx大小,而totalMemory则是获得当前从操作系统中请求到的内存大小,freeMemory则是此jvm实例请求了多少内存但是没用上的;

如果没有配置-Xms则jvm实例是一点一点的从操作系统里申请内存的,即基本上用到多少申请多少,因而一定程序上影响jvm的性能,但是freeMemory会很小;而如果一开始就设置-Xms为一个较大的值,则对应java app一开始的freeMemory是会比较大的

,但是随着业务的进行freeMemory会波动,而且要用到内存可以立刻使用而不用等操作系统去分配;(输出的totalMemory会比jvm请求分配的略小,因为jvm自己也需要占用内存,这也是java程序比系统原生程序要慢的原因之一)

重要:这些参数都要在xxx.Entrance之前指定而不能放在后面,即java -cp ./ demo.Test -server -d64 -Xms1024m是错误的,要放在demo.Test的前面,至少我这里1.8测试是这样的;

以上的配置要符合条件,比如你只有4G内存却设置-Xms20480m显然是有问题的,也不能设置满,毕竟操作系统还要运行其它进程而且也未必给jvm实例这么多内存;

在终端上创建Java项目及编译和运行的更多相关文章

  1. github上创建java项目简单操作

    github上创建java项目简单操作 参考L: github上创建java项目简单操作 - CSDN博客http://blog.csdn.net/qq_29392425/article/detail ...

  2. 使用Maven创建Java项目

    在本教程中,我们将向你展示如何使用 Maven 来创建一个 Java 项目,导入其到Eclipse IDE,并打包 Java 项目到一个 JAR 文件. 所需要的工具: Maven 3.3.3 Ecl ...

  3. Maven学习(十)-----使用Maven创建Java项目

    所需要的工具: Maven 3.3.3 Eclipse 4.2 JDK 8 注意:请确保 Maven 是正确安装和配置(在Windows,*nix,Mac OSX系统中),然后再开始本教程,避免 mv ...

  4. maven 学习---使用Maven创建Java项目

    在本教程中,我们将向你展示如何使用 Maven 来创建一个 Java 项目,导入其到Eclipse IDE,并打包 Java 项目到一个 JAR 文件. 所需要的工具: Maven 3.3.3 Ecl ...

  5. Java开发环境的搭建以及使用eclipse从头一步步创建java项目

    一.java 开发环境的搭建 这里主要说的是在windows 环境下怎么配置环境. 1.首先安装JDK java的sdk简称JDK ,去其官方网站下载最近的JDK即可..http://www.orac ...

  6. java第一天--Java开发环境的搭建以及使用eclipse从头一步步创建java项目

    一.java 开发环境的搭建 这里主要说的是在windows 环境下怎么配置环境. 1.首先安装JDK java的sdk简称JDK ,去其官方网站下载最近的JDK即可..http://www.orac ...

  7. 搭建一套Java开发环境以及使用eclipse从头一步步创建java项目

    一.java 开发环境的搭建 在windows 环境下怎么配置环境. 1.首先安装JDK java的sdk简称JDK ,去其官方网站下载JDK. https://www.oracle.com/tech ...

  8. Linux巩固记录(2) java项目的编译和执行

    由于要近期使用hadoop等进行相关任务执行,操作linux时候就多了 以前只在linux上配置J2EE项目执行环境,无非配置下jdk,部署tomcat,再通过docker或者jenkins自动部署上 ...

  9. Eclipse 创建 Java 项目

    打开新建 Java 项目向导 通过新建 Java 项目向导可以很容易的创建 Java 项目.打开向导的途径有: 通过点击 "File" 菜单然后选择 New > Java P ...

随机推荐

  1. autolayout UILabel 设置最大宽度

    label1.preferredMaxLayoutWidth = 100: label1.numberOfLines = 0; //自适应行数

  2. mysql创建定时器(event),查看定时器,打开定时器,设置定时器时间

    由于项目需要创建定时器(evevt),所以就百度了一下,发现基本都是来源于一个模板,有些功能还不全,现在自己总结一下. 注:mysql版本是从5.1开始才支持event的.如果你的版本低于5.1就先升 ...

  3. MySQL修改编码设置及乱码问题

    源地址:http://blog.csdn.net/millia/article/details/5806774   昨天尝试把自己用php编写的第一个糙站发布到网上..结果出现了因为编码不统一而导致乱 ...

  4. 迷你MVVM框架 avalonjs 学习教程15、属性监听与模块通信

    avalon的ViewModel对象从其内部EventManager里继承了三个方法,$watch.$unwatch.$fire三个方法,它们就是我们本节的主题. 词如其名,非常直白,一看就知道做什么 ...

  5. Fiddler命令行和HTTP断点调试

    fiddler设置断点: fiddler->rules->automatic Breakpoints->选择断点方式,这种方式下设定的断点会对之后的所有HTTP请求有效. 有两个断点 ...

  6. windows下多个文件合并成一个文件

    如果你拿到的是一堆文件,那么你想把它合并成一个文件来使用,那么按下面的步骤,轻轻松松就可以搞定. 第一步:把所有要合并的文件放到同一个文件下面 第二步:在CMD里面进入到你的文件目录 第三步:输入如下 ...

  7. "诗词大闯关"调查过程心得体会

    为了充分满足客户需求来更好地完成我们的项目--"诗词大闯关",我们根据项目内容,制定了调查表.我们小组以网上问卷调查的形式制作了调查表,并收集了122份有效的问卷调查表. 通过这次 ...

  8. mysql数据类型长度

    1个字节= 8位  tinyint 为一个字节  2的8次方= 256 所以最多存储到256 日期和时间数据类型 MySQL数据类型 含义 date 3字节,日期,格式:2014-09-18 time ...

  9. x86汇编知识点汇总

    目录: 1.进制转换 2.原码.反码.补码 3.寄存器 4.存储器的段结构 5.堆栈 6.传送类指令 7.算术运算类指令(不含乘除) 8.位操作类指令 9.标志位操作指令 10.标识符.常量与变量 1 ...

  10. 兼容多浏览器的网页复制插件(ZeroClipboard)

    前言: 常规利用JS编写的网页复制功能是最简单的方法,但是只对IE有效,无法做到兼容其它浏览器,对其他浏览器也就只能弹窗提示用户手动复制了. <script type="text/ja ...