java基础学习
文章平均质量分 91
achuo
IT码农,技术菜鸟,十年经验,技术渣渣
展开
-
快速定位java系统线上问题
一、前言Java 语言是当前互联网应用最为广泛的语言,作为一名 Java 程序猿,当业务相对比较稳定之后平常工作除了 coding 之外,大部分时间(70%~80%)是会用来排查突发或者周期性的线上问题。由于业务应用 bug(本身或引入第三方库)、环境原因、硬件问题等原因,Java 线上服务出现故障 / 问题几乎不可避免。例如,常见的现象包括部分请求超时、用户明显感受到系统发生卡顿等等。尽快线上问题从系统表象来看非常明显,但排查深究其发生的原因还是比较困难的,因此对开发测试或者是运维的同学产生了转载 2021-05-05 21:45:29 · 774 阅读 · 0 评论 -
jvm性能调常用工具Jinfo Jstat Jmap Jstack jvisualvm
jinfo使用可以查看java的系统参数可以查看某个JVM的参数可以调整某个JVM的参数查看jvm的参数 λ jps 9920 jar 3524 1512 Launcher 10028 Jps λ jinfo -flags 9920 Attaching to process ID 9920, please wait... Debugger attached successfully. Ser..转载 2020-09-16 15:42:12 · 741 阅读 · 0 评论 -
性能瓶颈--MEM(swap)
内存的性能瓶颈主要集中在两点,一个是内存不足,一个是没有充分的利用buffer/cache 。这里先介绍内存资源不足吧,毕竟应用程序不在 buffer/cache 里读写的可能性不大,除非程序员自己设置直接I/O。否则至少也用的是缓存I/O。当然一些动态链接库也有自己的缓存。内存回收当有内存资源不足的时候,就会导致内存回收,也就是释放掉回收的内存,比如buffer/cache 就属于可回收内存,他们在内存管理中叫做文件页(File-backend Page)。大部分的文件页都可以直接回收,以后有需转载 2020-09-11 16:17:14 · 1745 阅读 · 0 评论 -
linux 查看哪些进程用了swap
如果系统的物理内存用光了,则会用到swap。系统就会跑得很慢,但仍能运行;如果Swap空间用光了,那么系统就会发生错误。通常会出现“application is out of memory”的错误,严重时会造成服务进程的死锁。所以要高度重视。swap查看有很多种方法,一一介绍下:freefree -m就能看出当前系统所使用的swap了。那么如何查看哪些进程使用了swap呢,这样好针对性的做出优化。topCentos(6.0之前):top只能看到swap总使用量..转载 2020-09-11 16:03:47 · 2604 阅读 · 0 评论 -
Java性能优化必知的50个细节(珍藏版):Jvm调优+MySQL+Tomcat
在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身。养成良好的编码习惯非常重要,能够显著地提升程序性能。文末有整理好的相关面试文件,可以免费获取。性能优化的50个细节1. 尽量在合适的场合使用单例使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面:第一,控制资源的使用,通过线程同步来控制资源的并发访问;第二,控制实例的产生,以达到节约资源的目的;第三,控制数据共享,在不建立直接关联的条转载 2020-09-02 11:54:33 · 177 阅读 · 0 评论 -
mat(Eclipse Memory Analyzer tool)之二--heap dump分析
在工作中可能会遇到内存溢出这种灾难性的问题,那么程序肯定是存在问题,找出问题至关重要,上一篇文章讲了jmap命令的使用方法,当然用jmap导出的文件我们也看不懂啊,那就交给memory analyzer(mat)这个工具,让他帮助我们来观察程序的内存分布情况吧。MAT 不是一个万能工具,它并不能处理所有类型的堆存储文件。但是比较主流的厂家和格式,例如 Sun, HP, SAP 所采用的 HPROF 二进制堆存储文件,以及 IBM 的 PHD 堆存储文件等都能被很好的解析。下面来看看要怎么做呢,...转载 2020-09-02 10:41:48 · 878 阅读 · 0 评论 -
JVM系列之五:垃圾回收
0. 垃圾回收机制 1. C/C++需要程序员显式垃圾回收。 显式垃圾回收两大缺点:1. 内存泄漏:程序忘记及时回收无用内存,从而导致内存泄漏,降低系统性能。2. 错误回收:程序错误地回收系统核心类库的内存,从而导致系统崩溃。 2. Java由JRE在后台自动进行。 JRE会提供一个后台线程来进行检测和控制,一般都是在CPU空闲或者内存不足时自动进行垃圾回收。JAVA虚拟机垃圾回收优点: 1. 大大缩短编程时间,提高编程效率。 2. 保护程序的完整性,是安转载 2020-08-27 21:14:36 · 342 阅读 · 0 评论 -
Java系列笔记(4) - JVM监控与调优
光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决之。通过学习,我觉得JVM监控与调优主要的着眼点在于如何配置、如何监控、如何优化3点上。下面就将针对这3点进行学习。(如果您对Java的内存区域划分和内存回收机制尚不明确,那在阅读本文前,请先阅读我的前一篇博客《Java系列笔记(3) - Java 内存区域和GC机制》,在该博客中,详细叙述了Java HotSpot虚拟机(Sun/Oracle JDK系列默认的虚拟机)的内存分配和垃圾回收机制。本文...转载 2020-08-12 20:51:57 · 256 阅读 · 0 评论 -
Java系列笔记(3) - Java 内存区域和GC机制
Java垃圾回收概况 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢。这是因为在Java虚拟机中,存在自动内存管理和垃圾清扫机制。概括地说,该机制对JVM(Java Virtual Machine)中的内存进行标记,并确定哪些内存需要回收,根据一定的回收策略,自动的回收内存,永不停息(Nerver Stop)的保证J转载 2020-08-12 20:44:06 · 174 阅读 · 0 评论 -
jvm优化—— 图解垃圾回收
从这篇开始我们开始探讨一些jvm调优的问题。在jvm调优中一个离不开的重点是垃圾回收,当垃圾回收成为系统达到更高并发量的瓶颈时,我们就需要对jvm中如果进行“自动化”垃圾回收技术实施必要的监控和调节。这是jvm优化系列第一篇,其他请看以下:jvm优化必知系列——监控工具对于调优之前,我们必须要了解其运行原理,java 的垃圾收集Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了。因此本篇主要从这三个方面转载 2020-08-12 20:11:20 · 145 阅读 · 0 评论 -
jvm优化必知系列——监控工具
这是jvm优化系列第二篇:jvm优化——垃圾回收通过上一篇的jvm垃圾回收知识,我们了解了jvm对内存分配以及垃圾回收是怎么来处理的。理论是指导实践的工具,有了理论指导,定位问题的时候,知识和经验是关键基础,数据可以为我们提供依据。在常见的线上问题时候,我们多数会遇到以下问题:内存泄露 某个进程突然cpu飙升 线程死锁 响应变慢...等等其他问题。如果遇到了以上这种问题,在线下可以有各种本地工具支持查看,但到线上了,就没有这么多的本地调试工具支持,我们该如何基于监控工.转载 2020-08-12 20:09:58 · 173 阅读 · 0 评论 -
深入理解jvm--性能监控工具
1.jvm监控工具介绍1.1.jconsole JConsole是一个基于JMX的GUI工具,用于连接正在运行的JVM,不过此JVM需要使用可管理的模式启动。1.2.启动jconsole 通过JDK/bin目录下的“jconsole.exe”启动Jconsole后,将自动搜索出本机运行的所有虚拟机进程,双击其中一个进程即可开始监控。 也可以“远程连接服务器,进行远程虚拟机的监控。 补充:根据端口号查看进程 netstat -ano |findstr 8080转载 2020-08-12 17:47:41 · 183 阅读 · 0 评论 -
【JVM】jmap命令详解----查看JVM内存使用详情
linux获取java进程PID:https://www.cnblogs.com/sxdcgaq8080/p/10734752.html如果命令使用过程中报错,可能解决你问题的方案:https://www.cnblogs.com/sxdcgaq8080/p/11089179.htmlhttps://www.cnblogs.com/sxdcgaq8080/p/10675966.html==========================================...转载 2020-08-04 18:01:53 · 576 阅读 · 0 评论 -
【JVM】jstat命令详解---JVM的统计监测工具
1.jstat命令简介 jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。 命令的格式如下: jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]2.使用详情列表【以下的统计空间单位,未标明的 都是KB】1>类加载统计命令:jstat -class 19570结果:解析:Loaded:加载class的数量Bytes:所占用空间大小Unloaded:未加载数量Bytes:未加载占用空间...转载 2020-08-04 17:54:17 · 9529 阅读 · 0 评论 -
Jackson /常用注解/ annotation
1、@JsonAutoDetect自动检测,(作用在类上)来开启/禁止自动检测。fieldVisibility:字段的可见级别 ANY:任何级别的字段都可以自动识别 NONE:所有字段都不可以自动识别 NON_PRIVATE:非private修饰的字段可以自动识别 PROTECTED_AND_PUBLIC:被protected和public修饰的字段可以被自动识别 PUBLIC_ONLY:只有被public修饰的字段才可以被自动识别 DEFAULT:...转载 2020-07-20 19:53:39 · 402 阅读 · 0 评论 -
JVM 源码解读之 CMS GC 触发条件
前言经常有同学会问,为啥我的应用 Old Gen 的使用占比没达到 CMSInitiatingOccupancyFraction 参数配置的阈值,就触发了 CMS GC,表示很莫名奇妙,不知道问题出在哪?其实 CMS GC 的触发条件非常多,不只是 CMSInitiatingOccupancyFraction 阈值触发这么简单。本文通过源码全面梳理了触发 CMS GC 的条件,尽可能的帮你了解平时遇到的奇奇怪怪的 CMS GC 问题。先抛出一些问题,来吸引你的注意力。为什么 Old Gen 使转载 2020-07-15 17:27:53 · 684 阅读 · 0 评论 -
理解CMS GC日志
准备工作,配置输出GC日志本文以idea的启动日志为例解读CMS收集器的GC日志在idea64.exe.vmoptions文件中可以看到idea的启动参数,下面是初始启动参数配置-Xms128m-Xmx750m-XX:ReservedCodeCacheSize=240m-XX:+UseConcMarkSweepGC-XX:SoftRefLRUPolicyMSPerMB=50-ea-Dsun.io.useCanonCaches=false-Djava.net.preferIPv.转载 2020-07-15 17:23:23 · 1385 阅读 · 0 评论 -
老大难的GC原理及调优,这下全说清楚了
概述本文介绍GC基础原理和理论,GC调优方法思路和方法,基于Hotspot jdk1.8,学习之后将了解如何对生产系统出现的GC问题进行排查解决阅读时长约30分钟,内容主要如下:GC基础原理,涉及调优目标,GC事件分类、JVM内存分配策略、GC日志分析等 CMS原理及调优 G1原理及调优 GC问题排查和解决思路GC基础原理1 GC调优目标大多数情况下对 Java 程序进行GC调优, 主要关注两个目标:响应速度、吞吐量 响应速度(Responsiveness) 响应速度指程序转载 2020-07-14 20:48:53 · 510 阅读 · 0 评论 -
JVM调优实战:解决CMS concurrent-abortable-preclean LongGC的问题
1. 背景1.1 多个业务线的应用出现LongGC告警最近一段时间,经常收到CAT报出来的Long GC告警(配置为大于3秒的为Longgc)。2. 分析前的一些JVM背景知识回顾2.1 JVM堆内存划分新生代(Young Generation)新生代内被划分为三个区:Eden,from survivor,to survivor。大多数对象在新生代被创建。Minor GC针对的是新生代的垃圾回收。老年代(Old Generation)在新生代中经历了几次Minor GC仍然存活转载 2020-07-02 22:03:38 · 1014 阅读 · 0 评论 -
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解
JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat等小巧的工具,本博客希望能起抛砖引玉之用,让大家能开始对JVM性能调优的常用工具有所了解。 现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 .....转载 2020-06-18 17:44:56 · 218 阅读 · 0 评论 -
IntelliJ IDEA提升效率开发插件必备
工欲善其事,必先利其器,好的工具可以提升我们的开发效率,下面介绍几款个人觉得比较好的编辑器插件,不仅炫酷更重要可以提高你的工作效率。本文是作者辛苦整理的16款插件,每个都是超级实用的,不好不介绍,相信体验过后才知道它的好。Activate-power-mode pojo-to-json SequenceDiagram Free Mybatis plugin Key promoter...转载 2020-02-26 11:49:47 · 1113 阅读 · 0 评论 -
Apache Commons:功能齐全的通用Java组件
http://hao.jobbole.com/apache-commons/Apache Commons是一个Apache项目,提供了功能齐全的通用Java组件。http://jbcdn1.b0.upaiyun.com/2015/11/7d3c7fe755d47aca42d13d2910103163.pngApache Commons项目由由下面三部分组成:转载 2017-07-26 19:13:05 · 3926 阅读 · 1 评论 -
Java Web自定义MVC框架详解
http://blog.csdn.net/jackfrued/article/details/42774459最近给学生讲Java Web,希望他们能够在学完这部分内容后自己实现一个MVC框架。但是突然发现百度上能搜索到的靠谱的资料并不是很多,有些只是原理没有代码实现,有些有代码实现但是对于初学者来说理解起来还是比较困难,于是决定把自己讲自定义MVC框架的内容放在这里分享给转载 2017-10-31 20:23:55 · 395 阅读 · 0 评论 -
解决POI读取Excel内存溢出的问题
Office软件一直是一个诲誉参半的软件,广大普通计算机用户用Office来满足日常办公需求,于是就产生了很多生产数据和文档,需要和企业单位的专用办公系统对接,而Office的解析工作一直是程序员非常头痛的问题,经常招致程序员的谩骂,也被誉为是微软最烂的发明之一。POI的诞生解决了Excel的解析难题(POI即“讨厌的电子表格”,确实很讨厌,我也很讨厌Excel),但如果用不好POI,也会导致程序转载 2017-11-13 19:33:30 · 1229 阅读 · 0 评论 -
Java类加载器总结
1.类的加载过程 JVM将类加载过程分为三个步骤:装载(Load),链接(Link)和初始化(Initialize)链接又分为三个步骤,如下图所示:1) 装载:查找并加载类的二进制数据;2)链接:验证:确保被加载类的正确性;准备:为类的静态变量分配内存,并将其初始化为默认值;解析:把类中的符号引用转换为直接引用;3)初始化:为类的静态变量赋予正确的初始转载 2015-08-06 17:41:15 · 345 阅读 · 0 评论 -
Java网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解。 下面代码中会使用这样一个例子:客户端发送一段算式的字符串到服务器,服务器计算后返回结果到客户端。 代码的所有说明,都直接作为注释,嵌入到代码中,看代码时就能更容易理解,代码中会用到一个计算结果的工具类,见文章代码部分。 相关的基础知识文章推荐: Linux 网络 I/转载 2017-06-08 10:25:03 · 814 阅读 · 0 评论 -
JVM内存管理------垃圾搜集器参数精解
http://www.cnblogs.com/zuoxiaolong/p/jvm9.html JVM内存管理------JAVA语言的内存管理概述 JVM内存管理------杂谈(借此也论一论obj=null) JVM内存管理------GC简介 JVM内存管理------GC算法精转载 2017-07-05 14:59:48 · 472 阅读 · 0 评论 -
jmap命令(Java Memory Map)
JDK内置工具使用一、javah命令(C Header and Stub File Generator)二、jps命令(Java Virtual Machine Process Status Tool)三、jstack命令(Java Stack Trace)四、jstat命令(Java Virtual Machine Statistics Monitoring To转载 2017-06-09 10:35:36 · 438 阅读 · 0 评论 -
Java中的集合、枚举、泛型【下】
http://blog.csdn.net/silentbalanceyh/article/details/4586627(本章主要讲解Java里面会遇到的所有集合类以及相关用法,还有JDK1.5里面出来的一些关于集合和算法的新内容,主要是方便我们在开发过程中适当地注意选择,而且本章的内容相对前边章节比较少,但是代码量比较大,但是大部分内容都是个人的一些总结。当然这一个章节会涉及到JDK转载 2017-05-22 09:52:35 · 964 阅读 · 0 评论 -
IO、文件、NIO【四】
http://blog.csdn.net/silentbalanceyh/article/details/5252301(这一个章节将讲到Java里面比较重要的一个章节,这里说一句抱歉,因为最近换工作的原因,一直没有时间继续书写教程,不过接下来我会一直坚持写下去的哈,希望大家能够支持。这个章节主要涉及到常用的文件读写,包括高级的文件IO内容——java.nio,因为这些内容在如今的转载 2017-06-05 14:28:19 · 697 阅读 · 0 评论 -
Java中的集合、枚举、泛型【上】
http://blog.csdn.net/silentbalanceyh/article/details/4586611(本章主要讲解Java里面会遇到的所有集合类以及相关用法,还有JDK1.5里面出来的一些关于集合和算法的新内容,主要是方便我们在开发过程中适当地注意选择,而且本章的内容相对前边章节比较少,但是代码量比较大,但是大部分内容都是个人的一些总结。当然这一个章节会涉及到J转载 2017-05-20 20:10:01 · 873 阅读 · 0 评论 -
图解Java面试题-集合
内容大纲.pngHashMap和Hashtable的区别首先来看Map接口的关系图Map关系图.png两者的区别Hashtable和HashMap.pngList和Map区别List和Map.pngCollection和Collections的区别Collection和Collections.pngSet如何区分元素重复与否Set里的元素是不能重复的,元转载 2018-01-10 19:29:58 · 378 阅读 · 0 评论 -
图解Java面试题-JVM
GC是什么?为什么要有GC?垃圾回收的优点和原理,并考虑两种回收机制垃圾回收器的基本原理是什么Java中会有内存泄漏吗ClassLoader如何加载classJVM内存模型图转载 2018-01-10 19:41:07 · 423 阅读 · 0 评论 -
【死磕Java并发】—–深入分析synchronized的实现原理
记得刚刚开始学习Java的时候,一遇到多线程情况就是synchronized,相对于当时的我们来说synchronized是这么的神奇而又强大,那个时候我们赋予它一个名字“同步”,也成为了我们解决多线程情况的百试不爽的良药。但是,随着我们学习的进行我们知道synchronized是一个重量级锁,相对于Lock,它会显得那么笨重,以至于我们认为它不是那么的高效而慢慢摒弃它。 诚然,随着Javs转载 2018-01-10 20:01:48 · 272 阅读 · 0 评论 -
面试官:生产环境碰到系统CPU飙高和频繁GC,你要怎么排查?
处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题。当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警。本文主要针对系统运行缓慢这一问题,提供该问题的排查思路,从而定位出问题的代码点,进而提供解决该问题的思路。对于线上系统突然产生的运行缓慢问题,如果该问题导致线上系统不可用,那么首先需要做的就是,导出jstack和内存信息,...转载 2019-09-03 10:11:48 · 589 阅读 · 0 评论 -
Mybatis Generator最完整配置详解
搭项目的时候遇到一点坑,特此转发一下详细的配置详解<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.o...转载 2019-07-16 10:33:46 · 801 阅读 · 0 评论 -
互联网 Java 工程师进阶知识完全扫盲
好东西就要分享,谢谢这位大神https://github.com/doocs/advanced-java转载 2018-12-13 09:50:12 · 998 阅读 · 0 评论 -
Java四种线程池使用
Java 四种线程池的使用https://juejin.im/post/59df0c1af265da432f301c8d1,线程池的作用 线程池作用就是限制系统中执行线程的数量。 根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果。 少了浪费了系统资源,多了造成系统拥挤效率不高。 用线程池控制线程数量,其他线程排 队等候。 一个任务执行完毕,再从队列的中取最前面的任务开始执行。 若...转载 2018-06-08 15:29:02 · 39165 阅读 · 5 评论 -
Java系列笔记(4) - JVM监控与调优
目录参数设置收集器搭配启动内存分配监控工具和方法调优方法调优实例 光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决之。通过学习,我觉得JVM监控与调优主要的着眼点在于如何配置、如何监控、如何优化3点上。下面就将针对这3点进行学习。 (如果您对Java的内存区域划分和内存回收机制尚不明确,那在阅转载 2018-05-08 14:41:40 · 375 阅读 · 0 评论 -
Java系列笔记(3) - Java 内存区域和GC机制
目录Java垃圾回收概况Java内存区域Java对象的访问方式Java内存分配机制Java GC机制垃圾收集器Java垃圾回收概况 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢。这是因转载 2018-05-08 14:39:35 · 330 阅读 · 0 评论