JAVASE
yjh314
这个作者很懒,什么都没留下…
展开
-
G1,CMS及PARALLEL GC的比较
这篇文章正好接上前一年我们做的一次现实环境下不同GC算法性能比较的试验。这次我们仍然进行同样的试验,不过增加了对G1回收器的测试,并且在多个平台进行测试。今年我们测试的垃>圾回收器有如下几个: - -XX:+UseParallelOldGC - -XX:+UseConcMarkSweepGC - -XX:+UseG1GC ###运行环境 我们使用现成的JIRA任务来转载 2017-11-29 19:06:55 · 3094 阅读 · 0 评论 -
成为Java GC专家(3)—如何优化Java垃圾回收机制
本文是成为Java GC专家系列文章的第三篇。在第一篇《成为JavaGC专家Part I — 深入浅出Java垃圾回收机制》中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生代和老年代,你应该了解的JDK7中的5种GC类型,以及这5种类型对于应用性能的影响。在第二篇《成为JavaGC专家Part II — 如何监控Java垃圾回收机制》,我解释了JVM实际上是如何执行垃圾回收转载 2017-11-30 10:03:02 · 177 阅读 · 0 评论 -
jstat使用
通常运行命令如下:jstat -gc 258195000[root@ ~]# jstat -gc 25819 5000 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT G原创 2017-11-23 11:21:49 · 411 阅读 · 0 评论 -
在你的代码之外,服务时延过长的三个追查方向(下)
本文含一些比较有趣的地方,所以和上一篇截开,免得大家看着swap,page cache没劲就把文章关了。 第二方面 : JVM篇 — 高IO波动下的JVM停顿准备知识:JVM的Stop The World,安全点,黑暗的地底世界在压测中非常偶然的超时,但CPU正常,网络正常,只有IO在刷盘时偶然写个几秒。那,就继续怀疑IO吧。第一步,日志都异步写了吗?而且,转载 2017-12-20 17:41:14 · 297 阅读 · 0 评论 -
在你的代码之外,服务时延过长的三个追查方向(上)
服务化体系里一般都有着严格的超时设定,为业务部门排查那些毛刺慢响应,也是基础架构部门的专家坐诊服务之一。有时候,即使你的代码写的很努力了,但还是会出现慢响应,因为这本就是艰难的世界。 本文从三个方向上各举一些例子:第一方面主要是热身,更加有趣的两方面见下集。 第一方面,操作系统篇准备知识: 《从Apache Kafka 重温文件高效读写》中Swap 和转载 2017-12-20 17:50:10 · 351 阅读 · 0 评论 -
JVM垃圾回收机制
每个Java程序员迟早都会碰到下面这个错误:java.lang.OutOfMemoryError这个时候一般会建议采用如下方式解决这个错误:增加MaxPermSize值增加最大堆内存到512M(-xmx参数)这篇文章会具体介绍Java堆空间和参数MaxPermSize的含义。这篇文章涉及下列主题,并采用Hotspot JVM:垃圾回收器(Garbage Co转载 2017-12-04 17:23:05 · 122 阅读 · 0 评论 -
JVM调优之jstack找出最耗cpu的线程并定位代码
jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多。下面我们来一个实例找出某个Java进程中最耗费CPU的Java线程并定位堆栈信息,用到的命令有ps、top、printf、jstack、grep。第一步先找出Java进程ID,服务器上的Java应用名称为mrf-center:root@ubuntu:/# ps -ef | grep转载 2017-12-04 17:41:19 · 233 阅读 · 0 评论 -
Java性能优化之JVM GC(垃圾回收机制)
Java的性能优化,整理出一篇文章,供以后温故知新。JVM GC(垃圾回收机制)在学习Java GC 之前,我们需要记住一个单词:stop-the-world 。它会在任何一种GC算法中发生。stop-the-world 意味着JVM因为需要执行GC而停止了应用程序的执行。当stop-the-world 发生时,除GC所需的线程外,所有的线程都进入等待状态,直到GC任务完成。G转载 2017-12-04 20:20:27 · 212 阅读 · 0 评论 -
垃圾回收器CMS的配置
com.test.Test.java -Dapp.name=test -Xmx12g -Xms12g -Xmn8g -XX:SurvivorRatio=4 -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70原创 2017-12-21 16:14:15 · 922 阅读 · 0 评论 -
如何使用jstack分析线程状态
背景记得前段时间,同事说他们测试环境的服务器cpu使用率一直处于100%,本地又没有什么接口调用,为什么会这样?cpu使用率居高不下,自然是有某些线程一直占用着cpu资源,那又如何查看占用cpu较高的线程?当然一个正常的程序员不会写出上述代码,这里只是为了让一个线程占用较高的cpu资源。top命令在linux环境下,可以通过top命令查看各个进程的cpu使用情况,默认按cpu使...转载 2018-10-30 11:48:04 · 236 阅读 · 0 评论 -
记一次线上请求缓慢问题处理
9月的某天晚上,接到通知,线上环境请求非常慢,页面打开要1分钟,遂按照系统参数,数据库,应用,web服务器状态逐步排查的步骤,最终定位到问题并得以解决,此处做个检查流程梳理,供大家参考。问题描述:正式环境请求响应异常慢,页面打开需要1分钟左右时间等。第一步 系统参数检查 1 df -h 检查硬盘空间 重点看 Use这一栏,可以看到空间足够,硬盘空间ok2 free 检查内存使用...转载 2018-10-30 12:03:04 · 764 阅读 · 0 评论 -
JAVA常用的工具类使用
1、判断Object是否是String或者是Char类型(来自于json-lib,工具类:JSONUtils) /** * Tests if obj is a String or a char */ public static boolean isString( Object obj ) { if( (obj instanceof String)...原创 2019-02-26 15:37:13 · 257 阅读 · 0 评论 -
jmap操作注意点
jmap的几个主要的危险操作如下:1. jmap -dump这个命令执行,JVM会将整个heap的信息dump写入到一个文件,heap如果比较大的话,就会导致这个过程比较耗时,并且执行的过程中为了保证dump的信息是可靠的,所以会暂停应用。2. jmap -permstat这个命令执行,JVM会去统计perm区的状况,这整个过程也会比较的耗时,并且同样也会暂停应用。转载 2017-11-29 11:28:46 · 1512 阅读 · 0 评论 -
JVM调优总结 -Xms -Xmx -Xmn -Xss
堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。典型设置:java -Xmx3550m -Xms3转载 2017-11-29 11:28:18 · 189 阅读 · 0 评论 -
Linux jmap查看Java程序堆内存的使用情况
敲jmap命令后,显示下面的命令[root@~]# jmapUsage: jmap [option] (to connect to running process) jmap [option] (to connect to a core file) jmap [option] [server_id@]原创 2017-11-03 09:41:42 · 18276 阅读 · 0 评论 -
深入 理解 Statement 和 PreparedStatement 【转】
一、使用Statement而不是PreparedStatement对象JDBC驱动的最佳化是基于使用的是什么功能. 选择PreparedStatement还是Statement取决于你要怎么使用它们. 对于只执行一次的SQL语句选择Statement是最好的. 相反, 如果SQL语句被多次执行选用PreparedStatement是最好的.PreparedStatement的第一次执行转载 2015-11-03 15:03:56 · 313 阅读 · 0 评论 -
java 同步锁(synchronized)
java中cpu分给每个线程的时间片是随机的并且在java中好多都是多个线程共用一个资源,比如火车卖票,火车票是一定的,但卖火车票的窗口到处都有,每个窗口就相当于一个线程,这么多的线程共用所有的火车票这个资源。如果在一个时间点上,两个线程同时使用这个资源,那他们取出的火车票是一样的(座位号一样),这样就会给乘客造成麻烦。比如下面程序:package com.dr.runnable2;cla转载 2015-12-21 17:50:23 · 472 阅读 · 0 评论 -
ThreadPoolExecutor中策略的选择与工作队列的选择(java线程池)
工作原理1、线程池刚创建时,里面没有一个线程。任务队列是作为参数传进来的。不过,就算队列里面有任务,线程池也不会马上执行它们。2、当调用 execute() 方法添加一个任务时,线程池会做如下判断: a. 如果正在运行的线程数量小于 corePoolSize,那么马上创建线程运行这个任务; b. 如果正在运行的线程数量大于或等于 corePoolSi转载 2016-01-06 11:41:21 · 410 阅读 · 0 评论 -
程序运行抛出Unsupported major.minor version 52.0异常
Exception in thread "main" java.lang.UnsupportedClassVersionError: com.org: Unsupported major.minor version 52.0at java.lang.ClassLoader.defineClass1(Native Method)at java.lang.ClassLoader.defineC原创 2016-04-01 12:36:36 · 709 阅读 · 0 评论 -
MVEL-简介
MVEL是一个基于Java应用程序的表达式语言,本文以示例的方式简单介绍MVEL. 一、概述二、示例示例一 比较相等、获取值和计算MVEL可以用==判断相等,如foo.name == "Mr.Foo".其中foo可以为上下文对象也可以是外部变量.具体示例代码如下:Person.java Java代码 public class Perso转载 2016-06-22 15:43:10 · 7820 阅读 · 0 评论 -
jvm中的年轻代 老年代 持久代 gc
虚拟机中的共划分为三个代:年轻代(Young Generation)、老年代(Old Generation)和持久代(Permanent Generation)。其中持久代主要存放的是Java类的类信息,与垃圾收集要收集的Java对象关系不大。年轻代和年老代的划分是对垃圾收集影响比较大的。 年轻代:所有新生成的对象首先都是放在年轻代的。年轻代的目标就是尽可能快速的收转载 2017-09-21 16:14:09 · 254 阅读 · 0 评论 -
内存溢出
对于JVM的内存写过的文章已经有点多了,而且有点烂了,不过说那么多大多数在解决OOM的情况,于此,本文就只阐述这个内容,携带一些分析和理解和部分扩展内容,也就是JVM宕机中的一些问题,OK,下面说下OOM的常见情况:第一类内存溢出,也是大家认为最多,第一反应认为是的内存溢出,就是堆栈溢出:那什么样的情况就是堆栈溢出呢?当你看到下面的关键字的时候它就是堆栈溢出了:ja转载 2017-09-15 11:29:40 · 667 阅读 · 0 评论 -
Java 详解 JVM 工作原理和流程
作为一名Java使用者,掌握JVM的体系结构也是必须的。说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Java API)。它们的关系如下图所示:运行期环境代表着Java平台,开发人员编写Java代码(.java文件),然后将之编译成字节码(.cl转载 2017-09-21 16:46:51 · 195 阅读 · 0 评论 -
聊聊JVM的年轻代
1.为什么会有年轻代我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如果分代的话,我们把新创建的对象放到某一地方,当GC的时候先把这块存“朝生夕死”对象的区域进行回收,这样就会转载 2017-09-21 17:00:43 · 189 阅读 · 0 评论 -
Java8 Lambda表达式教程
1. 什么是λ表达式 λ表达式本质上是一个匿名方法。让我们来看下面这个例子: public int add(int x, int y) { return x + y; }转成λ表达式后是这个样子: (int x, int y) -> x + y;参数类型也可以省略,Java编译器会根据上下文推断出来: (x, y转载 2017-09-22 16:41:42 · 217 阅读 · 0 评论 -
kafka性能测试的,jmap内存堆分析
[root@~]# jmap -heap 23553Attaching to process ID 23553, please wait...Debugger attached successfully.Server compiler detected.JVM version is 25.131-b11using thread-local object allocati原创 2017-11-08 10:03:31 · 919 阅读 · 0 评论 -
JAVA学习(字符操作类Character、String、StringBuffer)(转)
在java中有三个类负责对字符的操作:Character、String、StringBuffer。其中Character类是对单个字符进行操作,String是对一个字符序列的操作,StringBuffer是对一串字符进行操作。 Character java中Character和char的区别:Character是类,char是基本数据类型.char可以自动包装成Char...转载 2019-02-26 15:42:53 · 1232 阅读 · 0 评论