- 浏览: 219208 次
- 性别:
- 来自: 深圳
-
文章分类
- 全部博客 (391)
- java (18)
- python (3)
- ruby (4)
- linux (48)
- 网络 (9)
- 前端 (2)
- 社会、文化、哲学、人生、百态 (0)
- 工具 (10)
- 下载 (0)
- 常用地址 (0)
- tracert (0)
- mysql (8)
- 开源相关收藏 (1)
- 模块查看依懒 (1)
- watch使用 (1)
- Tcpdump (2)
- easy_install安装 (1)
- 构造redis批量删除脚本 (1)
- MYSQL 性能测试 (1)
- JAVA code encode utf-8 (1)
- linux nginx awk 实时 每妙 (1)
- mkpasswd (1)
- spring security oauth (1)
- jmap dump java memory Analyzer (1)
- JAVA DUMP (1)
- swap linux 过高 解决 (1)
- SWAP (1)
- jmap jstat jstack dump (1)
- java jconsole 的使用 (1)
- git 常用 (1)
- MYSQL 索引 动态 唯一 (1)
- TCP 三次握手 四次挥手 (1)
- linux date (1)
- 删除 空行 注释行 (1)
- maven3 yum linux install repository (1)
- linux git 搭建 (1)
- linux sar eth1 查看 流量 (1)
- sar (1)
- netstat ip 过滤 常用脚本 (1)
- Tcpdump 包分析网络连接过程 (1)
- net ipv4 tcp time wait tw recycle (0)
- /etc/sysctl.conf linux 网络 配置 (1)
- ss 网络连接查看 (比netstat 快很多,实时性牺牲) (1)
- MYSQL 关键字 (1)
- Linux 下多核CPU知识 (1)
- top (1)
- 令牌 证书 (1)
- mysql unix timestamp (1)
- 端口扫描 nc nmap (1)
- 204 http code 状态码 (1)
- ss -s ss -l (1)
- linux 常用 curl (1)
- linux sed 替换 换行 (1)
- centos yum install rpm install (1)
- spring-mvc源码解读 (1)
- 使用iftop查看实时的网络流量 (0)
- linux 命令 expect (1)
- HTTP (1)
- openssl ddif 加密 (1)
- iptables 详解 (1)
- python 虚拟化 VirtualEnv virtualenvwrapper (1)
- nginx (2)
- more less 实用技巧 (1)
- linux nginx (2)
- linux curl https ssl 证书 ca (1)
- openssl (1)
- php mysql linux (1)
- linux 虚拟机 虚拟 xen (0)
- linux 虚拟机 虚拟 xen kvm (1)
- linux perl 单行执行技巧 (1)
- mysql 查看库占用空间 表查用空间 (1)
- linux tcpdump (1)
- maven (1)
- sun.misc.Unsafe (1)
- OpenSSL生成证书 (1)
- http://blog.csdn.net/zzulp/article/details/8018751 (1)
- maven 本地 jar dependency (1)
- 计算JAVA代码行数最简单命令 sed (1)
- 常用的证书格式转换 rsa eg (1)
- 加密 解密 签名 (1)
- 分析jar包冲突 (1)
- 使用JMockit编写java单元测试 (1)
- Linux 技巧:让进程在后台可靠运行的几种方法 (1)
- 环境变量控制 (1)
- 5+ 个 tar 命令的用法,附示例 (1)
- scp自动输入密码 (1)
- ps axo pid (1)
- ppid (1)
- comm (1)
- pmem (1)
- lstart|grep mysql (0)
- lstart (1)
- etime|grep mysql (1)
- UML类图字少好理解 (1)
- HTTP经典文章 (1)
- git (1)
- Git常用命令 (1)
- LINUX 系统被攻击的分析过程 (1)
- NIO (1)
- LINUX 操作快捷键使用 (1)
- openSSL命令、PKI、CA、SSL证书原理 (1)
- shell (2)
- 转载 (1)
- mysqldump 可以直接dump->xml (1)
- VIM比较全面的文章 (1)
- eclipse regex 正则表达式 (1)
- synchronized (1)
- 锁 (1)
- java 正则表达式 regex (1)
- Reference Queue 引用 源码 (1)
- spring aop 源码 分析 (1)
- java @Cache @Transaction 注解 (1)
- spring aop (1)
- spring jdk proxy cglib 动态代理 性能比较 (1)
- spring proxy private public 代理限制 (1)
- spring transaction aop 事务 (1)
- spring autowire 注解注入 (1)
- 桥接 NAT NAT地址转换 内部网络 虚拟网络 (1)
- spring-web-mvc 源码解读 之 RequestMappingHandlerMapping (1)
- find atime mtime ctime -n n +n (1)
- android studio 快捷键初探 (1)
- android 源码阅读的计划 (1)
- 计算机网络学习-VLAN (1)
- sed 高级 合并行 (1)
- CAP 一致性 可用性 分布式容错性 (1)
- android lib so 库文件 (0)
- android lib so 库文件 移植 (1)
- android 不错的博文 (1)
- sourceinsight 源码 阅读 (1)
- Android Tab UI (1)
- 诗 (1)
- mysql 批处理 (0)
- netty 堆外内存 DirectByteBuffer (1)
- netty 并发 百万 推送 (1)
- Linux操作系统中内存buffer和cache的区别 (1)
- maven intellij target bytecode version (1)
- linux sleep()的实现原理 (1)
- android (2)
- javadoc 代码注释规范 (1)
- spring 自动注入bean auto (1)
- Photoshop CS6常用快捷键 (1)
- 股票 数据 机器 分析 (1)
- 批处理 (1)
- mysql -e (1)
- char (1)
- Unicode (1)
- 编码 (1)
- utf8 (1)
- utf-8 (1)
- utf16 (1)
- utf-16 (1)
- IntelliJ IDEA (1)
- ide (1)
- idea (1)
- intellij (1)
- 文件 (1)
- 目录 (1)
- 源代码 (1)
- CountDownLatch (1)
- CyclicBarrier (1)
- Semaphore (1)
- spring (1)
- linux 查看不同进制文件 (1)
- WebMvcConfigurationSupport (1)
- sdkman工具的使用 (1)
- http header (1)
- LINUX系统优化 (1)
最新评论
-
gelongmei:
威武我大酒神
shell脚本不换行刷新数据
java虽然是自动回收内存,但是应用程序,尤其服务器程序最好根据业务情况指明内存分配限制。否则可能导致应用程序宕掉。
举例说明含义:
-Xms128m
表示JVM Heap(堆内存)最小尺寸128MB,初始分配
-Xmx512m
表示JVM Heap(堆内存)最大允许的尺寸256MB,按需分配。
说明:如果-Xmx不指定或者指定偏小,应用可能会导致java.lang.OutOfMemory错误,此错误来自JVM不是Throwable的,无法用try...catch捕捉。
PermSize和MaxPermSize指明虚拟机为java永久生成对象(Permanate generation)如,class对象、方法对象这些可反射(reflective)对象分配内存限制,这些内存不包括在Heap(堆内存)区之中。
-XX:PermSize=64MB 最小尺寸,初始分配
-XX:MaxPermSize=256MB 最大允许分配尺寸,按需分配
过小会导致:java.lang.OutOfMemoryError: PermGen space
MaxPermSize缺省值和-server -client选项相关。
-server选项下默认MaxPermSize为64m
-client选项下默认MaxPermSize为32m
经验:
1、慎用最小限制选项Xms,PermSize已节约系统资源。
=========================================================
近期研究对jvm的内存使用情况进行监控,因此对观察虚拟机的内存使用方法做了一些收集,对jvm的参数设置了解了一下:
几个基本概念:
PermGen space:全称是Permanent Generation space,即永久代。就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域,GC(Garbage Collection)应该不会对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。
Heap space:存放Instance。Java Heap分为3个区,Young即新生代,Old即老生代和Permanent。Young保存刚实例化的对象。当该区被填满时,GC会将对象移到Old区。Permanent区则负责保存反射对象。
几个参数设置的意义:
xms/xmx:定义YOUNG+OLD段的总尺寸,ms为JVM启动时YOUNG+OLD的内存大小;mx为最大可占用的YOUNG+OLD内存大小。在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。
NewSize/MaxNewSize:定义YOUNG段的尺寸,NewSize为JVM启动时YOUNG的内存大小;MaxNewSize为最大可占用的YOUNG内存大小。在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。
PermSize/MaxPermSize:定义Perm段的尺寸,PermSize为JVM启动时Perm的内存大小;MaxPermSize为最大可占用的Perm内存大小。在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。
SurvivorRatio:设置YOUNG代中Survivor空间和Eden空间的比例
申请一块内存的过程:
A. JVM会试图为相关Java对象在Eden中初始化一块内存区域
B. 当Eden空间足够时,内存申请结束。否则到下一步
C. JVM试图释放在Eden中所有不活跃的对象(这属于1或更高级的垃圾回收);释放后若Eden空间仍然不足以放入新对象,则试图将部分Eden中活跃对象放入Survivor区/OLD区
D. Survivor区被用来作为Eden及OLD的中间交换区域,当OLD区空间足够时,Survivor区的对象会被移到Old区,否则会被保留在Survivor区
E. 当OLD区空间不够时,JVM会在OLD区进行完全的垃圾收集(0级)
F. 完全垃圾收集后,若Survivor及OLD区仍然无法存放从Eden复制过来的部分对象,导致JVM无法在Eden区为新对象创建内存区域,则出现”out of memory错误”
我们的一种resin服务器的jvm参数设置:
“-Xmx2000M -Xms2000M -Xmn500M -XX:PermSize=250M -XX:MaxPermSize=250M -Xss256K -XX:+DisableExplicitGC -XX:SurvivorRatio=1 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128M -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=60 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -Xloggc:log/gc.log”
是一种典型的响应时间优先型的配置。
Java中有四种不同的回收算法,对应的启动参数为
–XX:+UseSerialGC
–XX:+UseParallelGC
–XX:+UseParallelOldGC
–XX:+UseConcMarkSweepGC
1. Serial Collector
大部分平台或者强制 java -client 默认会使用这种。
young generation算法 = serial
old generation算法 = serial (mark-sweep-compact)
这种方法的缺点很明显,stop-the-world, 速度慢。服务器应用不推荐使用。
2. Parallel Collector
在linux x64上默认是这种,其他平台要加 java -server 参数才会默认选用这种。
young = parallel,多个thread同时copy
old = mark-sweep-compact = 1
优点:新生代回收更快。因为系统大部分时间做的gc都是新生代的,这样提高了throughput(cpu用于非gc时间)
缺点:当运行在8G/16G server上old generation live object太多时候pause time过长
3. Parallel Compact Collector (ParallelOld)
young = parallel = 2
old = parallel,分成多个独立的单元,如果单元中live object少则回收,多则跳过
优点:old old generation上性能较 parallel 方式有提高
缺点:大部分server系统old generation内存占用会达到60%-80%, 没有那么多理想的单元live object很少方便迅速回收,同时compact方面开销比起parallel并没明显减少。
4. Concurent Mark-Sweep(CMS) Collector
young generation = parallel collector = 2
old = cms
同时不做 compact 操作。
优点:pause time会降低, pause敏感但CPU有空闲的场景需要建议使用策略4.
缺点:cpu占用过多,cpu密集型服务器不适合。另外碎片太多,每个object的存储都要通过链表连续跳n个地方,空间浪费问题也会增大。
内存监控的方法:
1. jmap -heap pid
查看java 堆(heap)使用情况
using thread-local object allocation.
Parallel GC with 4 thread(s) //GC 方式
Heap Configuration: //堆内存初始化配置
MinHeapFreeRatio=40 //对应jvm启动参数-XX:MinHeapFreeRatio设置JVM堆最小空闲比率(default 40)
MaxHeapFreeRatio=70 //对应jvm启动参数 -XX:MaxHeapFreeRatio设置JVM堆最大空闲比率(default 70)
MaxHeapSize=512.0MB //对应jvm启动参数-XX:MaxHeapSize=设置JVM堆的最大大小
NewSize = 1.0MB //对应jvm启动参数-XX:NewSize=设置JVM堆的‘新生代’的默认大小
MaxNewSize =4095MB //对应jvm启动参数-XX:MaxNewSize=设置JVM堆的‘新生代’的最大大小
OldSize = 4.0MB //对应jvm启动参数-XX:OldSize=<value>:设置JVM堆的‘老生代’的大小
NewRatio = 8 //对应jvm启动参数-XX:NewRatio=:‘新生代’和‘老生代’的大小比率
SurvivorRatio = 8 //对应jvm启动参数-XX:SurvivorRatio=设置年轻代中Eden区与Survivor区的大小比值
PermSize= 16.0MB //对应jvm启动参数-XX:PermSize=<value>:设置JVM堆的‘永生代’的初始大小
MaxPermSize=64.0MB //对应jvm启动参数-XX:MaxPermSize=<value>:设置JVM堆的‘永生代’的最大大小
Heap Usage: //堆内存分步
PS Young Generation
Eden Space: //Eden区内存分布
capacity = 20381696 (19.4375MB) //Eden区总容量
used = 20370032 (19.426376342773438MB) //Eden区已使用
free = 11664 (0.0111236572265625MB) //Eden区剩余容量
99.94277218147106% used //Eden区使用比率
From Space: //其中一个Survivor区的内存分布
capacity = 8519680 (8.125MB)
used = 32768 (0.03125MB)
free = 8486912 (8.09375MB)
0.38461538461538464% used
To Space: //另一个Survivor区的内存分布
capacity = 9306112 (8.875MB)
used = 0 (0.0MB)
free = 9306112 (8.875MB)
0.0% used
PS Old Generation //当前的Old区内存分布
capacity = 366280704 (349.3125MB)
used = 322179848 (307.25464630126953MB)
free = 44100856 (42.05785369873047MB)
87.95982001825573% used
PS Perm Generation //当前的 “永生代” 内存分布
capacity = 32243712 (30.75MB)
used = 28918584 (27.57891082763672MB)
free = 3325128 (3.1710891723632812MB)
89.68751488662348% used
举例说明含义:
-Xms128m
表示JVM Heap(堆内存)最小尺寸128MB,初始分配
-Xmx512m
表示JVM Heap(堆内存)最大允许的尺寸256MB,按需分配。
说明:如果-Xmx不指定或者指定偏小,应用可能会导致java.lang.OutOfMemory错误,此错误来自JVM不是Throwable的,无法用try...catch捕捉。
PermSize和MaxPermSize指明虚拟机为java永久生成对象(Permanate generation)如,class对象、方法对象这些可反射(reflective)对象分配内存限制,这些内存不包括在Heap(堆内存)区之中。
-XX:PermSize=64MB 最小尺寸,初始分配
-XX:MaxPermSize=256MB 最大允许分配尺寸,按需分配
过小会导致:java.lang.OutOfMemoryError: PermGen space
MaxPermSize缺省值和-server -client选项相关。
-server选项下默认MaxPermSize为64m
-client选项下默认MaxPermSize为32m
经验:
1、慎用最小限制选项Xms,PermSize已节约系统资源。
=========================================================
近期研究对jvm的内存使用情况进行监控,因此对观察虚拟机的内存使用方法做了一些收集,对jvm的参数设置了解了一下:
几个基本概念:
PermGen space:全称是Permanent Generation space,即永久代。就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域,GC(Garbage Collection)应该不会对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。
Heap space:存放Instance。Java Heap分为3个区,Young即新生代,Old即老生代和Permanent。Young保存刚实例化的对象。当该区被填满时,GC会将对象移到Old区。Permanent区则负责保存反射对象。
几个参数设置的意义:
xms/xmx:定义YOUNG+OLD段的总尺寸,ms为JVM启动时YOUNG+OLD的内存大小;mx为最大可占用的YOUNG+OLD内存大小。在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。
NewSize/MaxNewSize:定义YOUNG段的尺寸,NewSize为JVM启动时YOUNG的内存大小;MaxNewSize为最大可占用的YOUNG内存大小。在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。
PermSize/MaxPermSize:定义Perm段的尺寸,PermSize为JVM启动时Perm的内存大小;MaxPermSize为最大可占用的Perm内存大小。在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。
SurvivorRatio:设置YOUNG代中Survivor空间和Eden空间的比例
申请一块内存的过程:
A. JVM会试图为相关Java对象在Eden中初始化一块内存区域
B. 当Eden空间足够时,内存申请结束。否则到下一步
C. JVM试图释放在Eden中所有不活跃的对象(这属于1或更高级的垃圾回收);释放后若Eden空间仍然不足以放入新对象,则试图将部分Eden中活跃对象放入Survivor区/OLD区
D. Survivor区被用来作为Eden及OLD的中间交换区域,当OLD区空间足够时,Survivor区的对象会被移到Old区,否则会被保留在Survivor区
E. 当OLD区空间不够时,JVM会在OLD区进行完全的垃圾收集(0级)
F. 完全垃圾收集后,若Survivor及OLD区仍然无法存放从Eden复制过来的部分对象,导致JVM无法在Eden区为新对象创建内存区域,则出现”out of memory错误”
我们的一种resin服务器的jvm参数设置:
“-Xmx2000M -Xms2000M -Xmn500M -XX:PermSize=250M -XX:MaxPermSize=250M -Xss256K -XX:+DisableExplicitGC -XX:SurvivorRatio=1 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128M -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=60 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -Xloggc:log/gc.log”
是一种典型的响应时间优先型的配置。
Java中有四种不同的回收算法,对应的启动参数为
–XX:+UseSerialGC
–XX:+UseParallelGC
–XX:+UseParallelOldGC
–XX:+UseConcMarkSweepGC
1. Serial Collector
大部分平台或者强制 java -client 默认会使用这种。
young generation算法 = serial
old generation算法 = serial (mark-sweep-compact)
这种方法的缺点很明显,stop-the-world, 速度慢。服务器应用不推荐使用。
2. Parallel Collector
在linux x64上默认是这种,其他平台要加 java -server 参数才会默认选用这种。
young = parallel,多个thread同时copy
old = mark-sweep-compact = 1
优点:新生代回收更快。因为系统大部分时间做的gc都是新生代的,这样提高了throughput(cpu用于非gc时间)
缺点:当运行在8G/16G server上old generation live object太多时候pause time过长
3. Parallel Compact Collector (ParallelOld)
young = parallel = 2
old = parallel,分成多个独立的单元,如果单元中live object少则回收,多则跳过
优点:old old generation上性能较 parallel 方式有提高
缺点:大部分server系统old generation内存占用会达到60%-80%, 没有那么多理想的单元live object很少方便迅速回收,同时compact方面开销比起parallel并没明显减少。
4. Concurent Mark-Sweep(CMS) Collector
young generation = parallel collector = 2
old = cms
同时不做 compact 操作。
优点:pause time会降低, pause敏感但CPU有空闲的场景需要建议使用策略4.
缺点:cpu占用过多,cpu密集型服务器不适合。另外碎片太多,每个object的存储都要通过链表连续跳n个地方,空间浪费问题也会增大。
内存监控的方法:
1. jmap -heap pid
查看java 堆(heap)使用情况
using thread-local object allocation.
Parallel GC with 4 thread(s) //GC 方式
Heap Configuration: //堆内存初始化配置
MinHeapFreeRatio=40 //对应jvm启动参数-XX:MinHeapFreeRatio设置JVM堆最小空闲比率(default 40)
MaxHeapFreeRatio=70 //对应jvm启动参数 -XX:MaxHeapFreeRatio设置JVM堆最大空闲比率(default 70)
MaxHeapSize=512.0MB //对应jvm启动参数-XX:MaxHeapSize=设置JVM堆的最大大小
NewSize = 1.0MB //对应jvm启动参数-XX:NewSize=设置JVM堆的‘新生代’的默认大小
MaxNewSize =4095MB //对应jvm启动参数-XX:MaxNewSize=设置JVM堆的‘新生代’的最大大小
OldSize = 4.0MB //对应jvm启动参数-XX:OldSize=<value>:设置JVM堆的‘老生代’的大小
NewRatio = 8 //对应jvm启动参数-XX:NewRatio=:‘新生代’和‘老生代’的大小比率
SurvivorRatio = 8 //对应jvm启动参数-XX:SurvivorRatio=设置年轻代中Eden区与Survivor区的大小比值
PermSize= 16.0MB //对应jvm启动参数-XX:PermSize=<value>:设置JVM堆的‘永生代’的初始大小
MaxPermSize=64.0MB //对应jvm启动参数-XX:MaxPermSize=<value>:设置JVM堆的‘永生代’的最大大小
Heap Usage: //堆内存分步
PS Young Generation
Eden Space: //Eden区内存分布
capacity = 20381696 (19.4375MB) //Eden区总容量
used = 20370032 (19.426376342773438MB) //Eden区已使用
free = 11664 (0.0111236572265625MB) //Eden区剩余容量
99.94277218147106% used //Eden区使用比率
From Space: //其中一个Survivor区的内存分布
capacity = 8519680 (8.125MB)
used = 32768 (0.03125MB)
free = 8486912 (8.09375MB)
0.38461538461538464% used
To Space: //另一个Survivor区的内存分布
capacity = 9306112 (8.875MB)
used = 0 (0.0MB)
free = 9306112 (8.875MB)
0.0% used
PS Old Generation //当前的Old区内存分布
capacity = 366280704 (349.3125MB)
used = 322179848 (307.25464630126953MB)
free = 44100856 (42.05785369873047MB)
87.95982001825573% used
PS Perm Generation //当前的 “永生代” 内存分布
capacity = 32243712 (30.75MB)
used = 28918584 (27.57891082763672MB)
free = 3325128 (3.1710891723632812MB)
89.68751488662348% used
发表评论
-
代码沉淀
2018-01-17 10:08 5601、如果一个代码片段是抽象的,那意味着它是可以有多种实现的,那 ... -
java.nio.file.StandardOpenOption
2018-01-04 11:19 914java.nio.file.StandardOpenOptio ... -
char类型与Unicode编码
2017-12-27 17:12 568char类型与Unicode编码 Unicode(UTF-8, ... -
javadoc 规范
2017-03-06 13:12 521http://www.cnblogs.com/felix-/ ... -
Java Socket 几个重要的TCP/IP选项解析
2015-12-15 17:02 543http://elf8848.iteye.com/blog/1 ... -
ReentrantLock可重入锁的使用场景
2015-05-05 13:45 587JAVA锁 从使用场景的角度出发来介绍对ReentrantLo ... -
Java ClassLoader详解
2015-04-07 16:27 528http://xjtom78.iteye.com/blog/8 ... -
sun.misc.Unsafe
2015-03-02 16:38 445http://www.cnblogs.com/tianchi/ ... -
JVM参数设置、分析
2014-12-01 19:11 0转自http://itlab.idcquan.com/Java ... -
java原生工具常用命令
2014-10-09 14:59 426jmap -histo pid [实体化情况] jstat ... -
jstat 详细使用
2014-07-16 10:01 667jstat分析VM内存 from:ht ... -
JavaWeb的各种中文乱码终极解决方法
2014-06-12 17:16 534一、Servlet输出乱码 1. 用servlet.getOu ... -
scala环境
2014-06-10 19:05 488http://download.scala-ide.org/e ... -
sonar忽略
2014-06-10 16:54 1182<properties> <aider. ... -
java AES 命令行 报错处理
2014-04-01 11:24 596java.security.NoSuchAlgorithmEx ... -
jmap常用
2014-02-14 17:02 451SYNOPSIS jmap [ option ] pid ... -
JAVA GC详细说明
2014-01-06 13:54 4361.java中GC 即垃圾收集机制是指jvm用于释放那 ... -
JAVA中的GC
2014-01-03 20:34 01.java中GC 即垃圾收集机制是指jvm用于释放那 ... -
JAVA GC详细说明
2014-01-03 20:32 0http://www.360doc.com/content/1 ... -
分析包冲突命令
2013-12-31 16:43 430分析jar包冲突 ls|awk '{a=system(&quo ...
相关推荐
内容概要:本文详细介绍了太阳能自动灌溉系统的设计与实现,涵盖了多个关键技术点。首先,文章解释了太阳能自动灌溉系统的概念及其优势,如高效节水、环保等。接着,深入探讨了SPWM(正弦脉宽调制)技术,展示了如何通过调节脉冲宽度将直流电转换为正弦波形的交流电,这是逆变器工作的核心技术。随后,讨论了仿真的重要性,特别是使用MATLAB/Simulink进行系统行为和性能的模拟,确保设计方案的可行性。此外,还涉及了编程方面,通过Python和C语言实现了系统的控制逻辑,如根据土壤湿度控制灌溉。最后,介绍了DXP原理图在电路设计中的应用,强调了合理的电路布局和防护措施对于系统稳定性的关键作用。 适合人群:对太阳能技术和自动化控制系统感兴趣的工程师和技术爱好者,尤其是有一定电子电路和编程基础的人群。 使用场景及目标:适用于希望深入了解太阳能自动灌溉系统设计和实现的个人或团队,目标是掌握从能源获取、电力转换、系统模拟到代码控制以及电路设计的全流程,最终能够独立构建高效的太阳能自动灌溉系统。 其他说明:文中提供了大量实例代码和实践经验,帮助读者更好地理解和应用相关技术。同时,强调了实际操作中的注意事项,如
# 基于Vue.js的通用组件库 ## 项目简介 此项目是基于Vue.js构建的组件库,涵盖了Button、Form、FormItem、Input、Notice等多个可复用组件。它具备组件测试、文档生成、自定义主题、按需加载、组件数据通信等功能,并且通过Webpack完成打包,方便在各类Vue项目中使用。 ## 项目的主要特性和功能 1. 多种加载方式支持全局引入和按需加载,可根据项目需求灵活选择。 2. 文档生成利用VuePress工具生成组件文档,便于用户查看组件使用方法和样式。 3. 自定义主题能通过修改样式变量来自定义组件主题,满足不同项目的个性化需求。 4. 组件数据通信通过dispatch和broadcast方法实现组件间的数据通信,提升组件库的扩展性。 5. 独立打包样式文件和组件文件分别打包,可单独加载,减少代码量和加载时间。 ## 安装使用步骤 ### 准备工作 确保已经安装基本的Node.js和npm环境,以及Git。
# 基于Python的机器学习基础项目 ## 项目简介 本项目是一个基于Python的机器学习基础项目,涵盖了线性回归、逻辑回归、感知器算法(PLA)及其改进版(Pocket PLA)等机器学习算法的实现。项目通过不同算法处理不同数据集,并展示了这些算法在分类和回归问题上的应用。 ## 项目的主要特性和功能 线性回归实现了基于梯度下降法的线性回归算法,用于拟合数据并预测目标值。 逻辑回归提供了使用梯度下降法和随机梯度下降法的逻辑回归实现,用于分类任务。 感知器算法实现了基本的感知器学习算法(PLA)和Pocket PLA算法,用于线性分类问题。 数据加载与预处理提供了数据加载和预处理功能,支持不同格式的数据输入。 误差计算与性能评估提供了计算模型误差(误差率或准确率)的功能,用于评估模型性能。 ## 安装使用步骤 1. 环境准备确保已安装Python及其相关库(如NumPy、SciPy等)。
幼儿园教师师德培训教学课件
JavaWeb技术在当今的互联网开发中占据着重要的地位,尤其是在电商系统开发领域。通过JavaWeb,我们可以构建出功能强大、稳定可靠的电商网站。本教程将带你从零开始,逐步掌握JavaWeb电商系统开发的基础知识和技能。
内容概要:本文详细介绍了作者使用LabVIEW开发一台三支路并行测试设备的上位机软件及其PLC程序的经验。项目涉及多个关键技术点,如LabVIEW的图形化编程特性、状态机设计模式的应用、ModBUS TCP/IP通信协议的实现等。文中不仅解释了LabVIEW的基本操作和代码结构,还深入探讨了如何通过单状态机引擎和支路编号分流实现多支路独立控制的方法。此外,作者分享了一些实用的通信异常处理技巧和优化策略,如心跳包机制、数据采集与逻辑处理的交错执行等。 适合人群:具有一定LabVIEW基础的学习者和工程师,尤其是从事自动化测试设备开发的技术人员。 使用场景及目标:适用于需要开发复杂测试系统的工程师,帮助他们掌握如何在单线程环境中实现多支路独立控制,提高系统的稳定性和效率。目标是提供一种高效、可靠的开发思路和技术实现方法。 其他说明:文中提到的具体技术和实践经验对于中小型测试系统的开发具有较高的参考价值,特别是状态机设计和ModBUS通信部分的内容。
Java项目t基于ssm的课程设计,包含源码+数据库+论文
Object Oriented Programming Using C++
# 基于C++的CWMP客户端实现 ## 项目简介 本项目是一个基于C++实现的CWMP(Connected Without Plugging Management)客户端,用于与DSL(数字用户线)设备进行配置管理交互。它实现了TR069 1.2版本的客户端程序,支持基本的RPC方法和TR181数据模型,并实现了系统升级、恢复出厂、重启等功能。 ## 主要特性和功能 实现了TR069 1.2版本的客户端程序,支持基本的RPC方法和TR181数据模型。 提供了系统升级、恢复出厂、重启等功能,并只支持安卓平台。 支持Linux和Windows操作系统,并提供了相应的处理逻辑。 使用第三方库如curl和tinyxml2来处理网络请求和XML解析。 提供了命令行参数处理功能,支持启动时上报事件、获取RPC方法等。 支持从备份文件中加载配置信息,包括上传、下载和事件等。 实现了事件处理逻辑,包括定时通知和响应处理。 ## 安装使用步骤
内容概要:本文档是一份关于网络拥塞控制算法的大学实验报告,重点介绍了TCP-Reno和TCP-BBR两种拥塞控制算法的实现及其性能对比。实验分为三部分:首先是观察拥塞现象,通过改变路由器队列长度和链路带宽,研究其对丢包率和有效吞吐量的影响;其次是实现TCP-Reno算法,详细解析了其慢启动、拥塞避免、快速重传和快速恢复四个阶段的工作机制;最后是实现TCP-BBR算法,探讨了其基于带宽和延迟测量的拥塞控制机制,包括带宽估计、RTT估计、发送速率控制和拥塞窗口调整。实验结果显示,TCP-BBR在低延迟高带宽环境中表现出色,而TCP-Reno更适合高延迟低带宽环境。 适合人群:具备一定网络基础知识的学生、研究人员和技术人员。 使用场景及目标:①理解网络拥塞现象及其对数据传输的影响;②掌握TCP-Reno和TCP-BBR两种拥塞控制算法的具体实现;③通过实验数据分析,比较两种算法在不同网络条件下的优劣。 其他说明:实验使用OMNet++模拟器和INET框架进行仿真测试,提供了详细的代码片段和实验结果图表,便于理解和复现。
# 基于Arduino的MIDI控制器项目 ## 项目简介 此项目旨在利用旧式模拟音频设备上的对数滑动电位计制作一个MIDI控制器。通过使用Arduino Pro Micro和74HC4051模拟多路复用器,实现对MIDI信号的接收与传输。项目作者Evan Kale提供了详细的构建指南和演示视频,以帮助爱好者们完成自己的MIDI控制器制作。 ## 项目的主要特性和功能 利用废旧模拟音频设备的电位计作为输入设备。 使用Arduino Pro Micro作为核心控制器,实现对MIDI信号的接收与传输。 利用74HC4051模拟多路复用器增加额外的输入。 兼容Ralf Kistner的arcore补丁,为Arduino IDE环境添加MIDIUSB支持。 ## 安装使用步骤 1. 下载源码文件请确保您已经下载了此项目的源代码文件,其中包括Arduino的编程代码和相关文件。
# 基于STM32的电力电子设备远程监控系统 ## 项目简介 本项目是一个基于STM32F407ZGT6微控制器的电力电子设备远程监控系统。系统通过STM32F407ZGT6核心板实现了电路的三相电压电流采样、信号调理、AD转换、以太网通信及PC端可视化监测功能。项目旨在通过嵌入式系统设计,实现对电力电子设备运行状态的实时远程监控。 ## 主要功能和技术 1. 信号采样与调理通过Altium Designer设计的硬件电路,实现了三相电压和电流的采样与信号调理。 2. AD转换使用STM32F407ZGT6的ADC模块,实现了多通道电压和电流信号的AD转换,并通过DMA进行数据传输。 3. 以太网通信基于LWIP协议栈,实现了UDP通信功能,支持远程数据传输与监控。 4. PC端监控界面使用LabVIEW 2018开发了PC端监控界面,能够实时显示电力电子设备的运行状态。 ## 安装与使用步骤 1. 硬件准备
1、文件说明: Centos8操作系统transmission-gtk-3.00-1.el8.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf transmission-gtk-3.00-1.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm
内容概要:本文详细介绍了台达DOP触摸屏与VFD-S1变频器通过MODBUS RTU协议实现直接通信的方法。首先解释了自动化控制的重要性和各组件的作用,接着逐步讲解了硬件连接、通信参数设置、控制逻辑编程(如启动、停止、正反转、频率设定)以及实时监控功能的具体实现方法。文中还分享了一些实用的设计技巧和常见问题解决办法,确保通信稳定可靠。最后强调了这种直接通信方式的优势及其广泛的应用前景。 适合人群:从事自动化控制领域的工程师和技术人员,尤其是那些希望深入了解触摸屏与变频器直接通信机制的专业人士。 使用场景及目标:适用于需要优化生产设备控制的小型工厂或企业,旨在减少中间环节降低成本的同时提升系统的响应速度和稳定性。通过学习本文提供的实例,读者可以掌握如何快速搭建并调试类似的自动化控制系统。 其他说明:文中提到的技术细节对于理解和实施此类项目非常有价值,同时也提醒读者在实际操作过程中应注意的安全事项和潜在风险。
# 基于Arduino的硬件随机数生成器 ## 项目简介 本项目提供了一个基于Arduino的硬件随机数生成器,旨在通过物理事件生成高质量的随机数。项目使用NE555自由运行振荡器,并通过其时钟漂移作为随机性的来源。生成的随机数可以用于多种应用,包括密码学和模拟实验。 ## 项目的主要特性和功能 硬件随机数生成使用NE555振荡器的时钟漂移作为随机性来源。 可配置固件通过内置命令行界面配置随机数生成器的参数。 多种随机数处理方法支持批量采样、掩码、移位、延迟等多种处理方法。 统计测试工具提供ent、rngtest和dieharder等工具,用于测试生成的随机数序列的质量。 USB接口通过USB接口将生成的随机数反馈到Linux系统的熵池中。 ## 安装使用步骤 ### 1. 硬件准备 按照Eagle PCB设计文件准备硬件组件。 将硬件组件焊接在PCB板上,并确保所有连接正确。 ### 2. 固件烧录
内容概要:本文详细介绍了LabVIEW与Halcon联合编程的具体实现方法及其应用场景。主要内容涵盖三个关键步骤:LabVIEW采集图像、将图像传递给Halcon处理以及LabVIEW读取并展示Halcon的处理结果。文中还深入讨论了图像数据传递的最佳实践,如直接内存传递而非保存再读取的方式,提高了效率。此外,文章提供了使用.NET构造器调用Halcon算子和HDevEngine调用Halcon脚本的方法,并分享了多个实用技巧,如内存管理、版本兼容性和性能优化等。 适合人群:从事图像处理、自动化控制领域的工程师和技术人员,尤其是对LabVIEW和Halcon有一定了解的开发者。 使用场景及目标:适用于需要高效图像处理和自动化控制的工业检测项目,旨在提高图像处理的速度和准确性,减少开发时间和成本。 其他说明:文中提到的技术细节和代码示例均基于LabVIEW 2018 (32-bit) 和 Halcon 17,对于更高版本或其他环境可能需要调整。同时,作者强调了版本兼容性和内存管理的重要性,提醒读者在实际应用中要注意这些问题。
# 基于Arduino的CNC控制器系统 ## 项目简介 Grbl是一款开源的CNC(计算机数控机床)控制器固件,专为Arduino平台量身打造。它借助G代码(CNC机床编程的常用语言)对步进电机运动加以控制,还能对主轴、冷却液等附件进行操控。该系统通过串行通信与计算机或其他设备实现交互,具备实时命令执行、多轴运动控制、安全门监测等功能。 ## 项目的主要特性和功能 1. 多轴运动精准控制支持多轴运动控制,可精确调控机床运动。 2. 实时命令高效执行能实时执行移动、旋转、暂停等G代码命令。 3. 附件全面操控支持主轴的启动、停止及速度控制,同时可对冷却液等附件进行控制。 4. 安全门智能监测可实时监测安全门状态,保障机器工作时安全门处于关闭状态。 5. 便捷串行通信通过串行通信与计算机或其他设备交互,方便用户发送G代码命令并接收反馈信息。 6. 灵活参数设置提供丰富的设置参数,允许用户按需调整。
2023-04-06-项目笔记-第四百四十九阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.447局变量的作用域_447- 2025-03-26
# 基于Python的UAVCAN DSDL文件解析系统 ## 项目简介 本项目主要围绕Zubax GNSS 2展开,它是一款多功能高性能定位模块,可通过CAN总线、USB和UART进行通信。项目包含了Zubax GNSS 2的固件相关内容,同时有一个Python模块用于处理UAVCAN的DSDL定义文件,能从DSDL定义文件中解析出类型定义,支持UAVCAN协议的数据类型和通信。 ## 项目的主要特性和功能 ### Zubax GNSS 2硬件特性 具备先进的多系统GPSGLONASS接收器、高精度气压高度计和带热补偿的3轴罗盘。 支持多种标准协议,如UAVCAN(通过CAN总线)、NMEA 0183(通过USB和UART)和u Blox M8协议,确保与大多数现有软硬件兼容。 ### 固件相关功能 提供不同硬件版本对应的兼容固件版本,每个固件版本有专用分支。