# Java开发

🐉 返回:最全导引

🍞 java中常见使用方法总结 replace、定时任务、图片处理、trycatch、导出等
☕️ java8及其以上版本 🌰 专题:注解、容器、反射、上传下载等
🍀 spring 🍀 springboot
🍀 spring cloud 🌴 Spring的兄弟:Reactor
🍩 源码 💨 java中错误总结
🤘 玩转java开源项目 🤘 玩转java开发过程中的各种工具
java基础 💨 java中坏习惯及一些优化方案
JAVA每日一练 开发框架
yaml文件妙用

# 开发框架

  • Spring
  • Hibernate
  • Struts
    提供了组织良好的Java、JSP和Action类。
  • Play
    主要用于开发需要统一内容创建的应用程序。
  • Google web Toolkit
    轻松地开发和调试Ajax应用程序。Java开发人员更喜欢这个框架来编写复杂的应用程序。它的一些特性包括书签、跨浏览器可移植性、历史记录和管理
  • Grails
    为内容管理系统、Restful web服务和电子商务网站创建健壮的、可伸缩的应用程序。Java Spring、Hibernate、quartz、EE容器和SiteMesh等其他Java技术相协调
  • Blade
    2015年推出的Java Blade以简单和轻量级著称。这个框架最大的亮点是它能够快速创建web应用程序的能力。
  • JavaServer Faces
    由Oracle开发的,可用于创建企业应用程序、本机应用程序和web应用程序开发。它具有将表示层与应用程序代码轻松连接起来的优势。
  • Vaadin
    用于精简Java开发的优秀平台。你可以使用它来获得自定义的web开发服务。此框架的一大优点是能够保证服务器和浏览器之间的顺畅通信。

# 参数配置

JVM

JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xss512k"

  • -server:一定要作为第一个参数,在多个CPU时性能佳
  • -Xms:初始Heap大小,使用的最小内存,cpu性能高时此值应设的大一些
    • -Xms128m表示JVM Heap(堆内存)最小尺寸128MB,初始分配
    • 慎用最小限制选项Xms,PermSize已节约系统资源。
  • -Xmx:java heap最大值,使用的最大内存
    • -Xmx512m表示JVM Heap(堆内存)最大允许的尺寸256MB,按需分配。

Xms&Xmx

上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的一半。
如果-Xmx不指定或者指定偏小,应用可能会导致java.lang.OutOfMemory错误,此错误来自JVM不是Throwable的,无法用try...catch捕捉。

  • -Xmn:young generation的heap大小,一般设置为Xmx的3、4分之一
  • -XX:PermSize:设定内存的永久保存区域
    • -XX:PermSize=64MB 最小尺寸,初始分配
  • -XX:MaxPermSize:设定最大内存的永久保存区域
    • -XX:MaxPermSize=256MB 最大允许分配尺寸,按需分配
    • 过小会导致:java.lang.OutOfMemoryError: PermGen space
    • MaxPermSize缺省值和-server -client选项相关。
      • -server选项下默认MaxPermSize为64m
      • -client选项下默认MaxPermSize为32m

PermSize和MaxPermSize

指明虚拟机为java永久生成对象(Permanate generation)如,class对象、方法对象这些可反射(reflective)对象分配内存限制,这些内存不包括在Heap(堆内存)区之中。

  • -XX:MaxNewSize:
  • -Xss:每个线程的Stack大小,这使得JBoss每增加一个线程(thread)就会立即消耗15M内存,而最佳值应该是128K,默认值好像是512k.
  • +XX:AggressiveHeap: 会使得 Xms没有意义。这个参数让jvm忽略Xmx参数,疯狂地吃完一个G物理内存,再吃尽一个G的swap。
  • -verbose:gc 现实垃圾收集信息
  • -Xloggc:gc.log 指定垃圾收集日志文件
  • -XX:+UseParNewGC:缩短minor收集的时间
  • -XX:+UseConcMarkSweepGC:缩短major收集的时间

-XX:+UseConcMarkSweepGC

此选项在Heap Size 比较大而且Major收集时间较长的情况下使用更合适。

# 错误收集

# Initial heap size set to a larger value than the maximum heap size

初始堆大小设置为大于最大堆大小的值,调整java虚拟机的内存配置

# License

// 生成私钥,storepass为密钥库开启密码,keypass为私钥密码
// CN——Common Name(姓名),OU——组织单位,U——组织名称,L——所在城市之类,ST——省份,C——国家
keytool -genkeypair -keysize 1024 -validity 3650 -alias "privateKey" -keystore "privateKeys.keystore" -storepass "123456" -keypass "654321" -dname "CN=ht, OU=ht, O=ht, L=SH, ST=SH, C=CN"

// 利用私钥生成证书,以便生成公钥,所以一个证书里面就一个私钥信息
keytool -exportcert -alias "privateKey" -keystore "privateKeys.keystore" -storepass "123456" -file "certfile.cer"

// 利用证书生成公钥,对外发布。
keytool -import -alias "publicCert" -file "certfile.cer" -keystore "publicCerts.keystore" -storepass "123456"
1
2
3
4
5
6
7
8
9

# keytool

缺省值

  • -alias "mykey"
  • -keyalg "DSA"(SHA256withDSA)
  • -keysize 1024
  • -validity 90
  • -keystore 用户宿主目录中名为 .keystore 的文件
  • -file 读时为标准输入,写时为标准输出
keytool -genkey -alias <别名> -keyalg RSA -keystore <keystore文件名称> -keysize 2048
1
  • 1)genkey指令,用于生成私钥

  • 2)alias指令,可以为私钥指定一个别名

  • 3)keyalg指令,算法,一般都是用RSA,非对称加密

    • RSA默认的签名算法是 SHA256withDSA
  • 4)keystore指令,设置生成出来的keystore文件的路径

  • 5)keysize指令,加密长度,目前以2048为佳,一般情况下都用2048位

  • 6、证书条目的删除:

keytool -delete -alias shuany(指定需删除的别名) -keystore yushan.keystore -storepass 123456
1
  • 7、证书条目口令的修改:
keytool -keypasswd -alias yushan(需要修改密码的别名) -keypass yushan(原始密码) -new 123456(别名的新密码)  -keystore e:\yushan.keystore -storepass 123456
1
  • 8、keystore口令的修改:
keytool -storepasswd -keystore e:\yushan.keystore(需修改口令的keystore) -storepass 123456(原始密码) -new yushan(新密码)
1
  • 9、修改keystore中别名为yushan的信息
keytool -selfcert -alias yushan -keypass yushan -keystore e:\yushan.keystore -storepass 123456 -dname "cn=yushan,ou=yushan,o=yushan,c=us"
1
  • 转换密钥库类型:JKS 转 PKCS12
keytool -importkeystore -srckeystore /Users/wu/java-key.keystore -destkeystore /Users/wu/java-key.keystore -srcstoretype jks -deststoretype pkcs12
// 反过来也可以
keytool -importkeystore -srckeystore /Users/wu/java-key.keystore -destkeystore /Users/wu/java-key.keystore -srcstoretype pkcs12 -deststoretype jks
1
2
3

# 常用指令

命令 含义
-certreq 生成证书请求
-changealias 更改条目的别名
-delete 删除条目
-exportcert 导出证书
-genkeypair 生成密钥对
-genseckey 生成密钥
-gencert 根据证书请求生成证书
-importcert 导入证书或证书链
-importpass 导入口令
-importkeystore 从其他密钥库导入一个或所有条目
-keypasswd 更改条目的密钥口令
-list 列出密钥库中的条目
-printcert 打印证书内容
-printcertreq 打印证书请求的内容
-printcrl 打印 CRL 文件的内容
-storepasswd 更改密钥库的存储口令