设计模式
面向对象设计原则我们在进行软件开发时,不仅仅需要将最基本的业务给完成,还要考虑整个项目的可维护性和可复用性,我们开发的项目不单单需要我们自己来维护,同时也需要其他的开发者一起来进行共同维护,因此我们在编写代码时,应该尽可能的规范。如果我们在编写代码时不注重这些问题,整个团队项目就像一座屎山,随着项目的不断扩大,整体结构只会越来越遭。 甚至到最后你会发现,我们的程序居然是稳定运行在BUG之上的… 所以,为了尽可能避免这种情况的发生,我们就来聊聊面向对象设计原则。 单一职责原则单一职责原则(Simple Responsibility Pinciple,SRP)是最简单的面向对象设计原则,它用于控制类的粒度大小。 一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。 比如我们现在有一个People类: 123456789101112131415161718192021222324252627282930//一个人类public class People { /** * 人类会编程 */ public void...
Java-HashMap底层实现原理
转自:https://mrbird.cc/Java-HashMap%E5%BA%95%E5%B1%82%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86.html 本节用于记录Java HashMap底层数据结构、方法实现原理等,基于JDK 1.8。 底层数据结构Java HashMap底层采用哈希表结构(数组+链表、JDK1.8后为数组+链表或红黑树)实现,结合了数组和链表的优点: 数组优点:通过数组下标可以快速实现对数组元素的访问,效率极高; 链表优点:插入或删除数据不需要移动元素,只需修改节点引用,效率极高。 HashMap图示如下所示: HashMap内部使用数组存储数据,数组中的每个元素类型为Node<K,V>: 123456789101112131415161718192021222324252627282930313233343536373839static class Node<K,V> implements Map.Entry<K,V> { final int hash; ...
jvm调优相关记录
jvm调优相关jvisualvm VisualVM是集成了命令行JDK工具和轻量级分析功能的可视化工具。专为开发和生产时间使用而设计。 结合visualvm gc插件使用 修改插件 1231. 先查看java版本,再去下面链接查看应该粘贴哪个插件地址http://visualvm.github.io/pluginscenters.html2. 我的是1.8_102 https://visualvm.github.io/archive/uc/8u40/updates.xml.gz 如下是查看jmeter jvm参数,cpu内存,堆内存监控等 一些gc相关 健康的gc升之后极速下降,再继续升,下降 gc相关下文引用shiyonghm 1234567891011JVM区域总体分两类,heap区和非heap区。heap区又分为:Eden Space(伊甸园)、Survivor Space(幸存者区)、Old Gen(老年代)。非heap区又分:Code Cache(代码缓存区);Perm Gen(永久代);Jvm...
MAT的使用
MAT是什么? MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,并可以通过报表直观的查看到可能造成这种结果的对象。 软件地址使用说明1、环境安装好jdk,配置好环境变量JAVA_HOME 运行内存分析器的最低Java版本是 1.8.0 最新版本MAT已经要求17以上 注: 确保你的hprof文件没放在c盘或是桌面,因为mat软件默认会在解析的同时生成一堆文件再hprof文件的相对路径下 2、使用 Memory Analyzer Tools 获取堆存储1、启动进程仅需单击两次。在菜单中,选择“file --> Acquire Heap Dump...” 或者有直接生成好的dump文件,则直接Open Heap Dump ,打开即可; 2、选择Acquire Heap...
jvm常用命令(长期记录)
123456jinfo: 可以输出并修改运行时的java 进程的opts。jps: 与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。jstat: 一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。jstack: 用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使用方式只支持以下的这种方式:jmap: 打印出某个java进程(使用pid)内存内的所有'对象'的情况(如:产生那些对象,及其数量)。jconsole/jvisualvm: java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器 命令后接>>输出某一位置,如: jstat -gc 13976 >> d:\c.txt jps jps1仅显示简单类名和pid jps -l1输出主类或者jar的完全路径名 jps...