用Runtime.getRuntime().exec()需要注意的地方

chenhaozjnubit | | 2017-08-29
有时候我们可能需要调用系统外部的某个程序,此时就可以用Runtime.getRuntime().exec()来调用,他会生成一个新的进程去运行调用的程序。此方法返回一个java.lang.Process对象,该对象可以得到之前开启的进程的运行结果,还可以操作进程的输入输出流。Process对象有以下几个方法:  1、destroy()      杀死这个子进程  2、exitValue()    [阅读全文]
ė541次浏览 60条评论 0 java

使用Java操作LDAP案例

chenhaozjnubit | | 2017-07-12
1 案例描述公司平台使用LDAP来储存企业或用户的信息,在系统的运行过程中需要对LDAP存储的信息进行相关的访问和操作,那么在Java中是如何操作LDAP的呢?2 案例分析LDAP是一个得到关于人或者资源的集中、静态数据的快速方式,是一种存储模式和访问协议。UnboundID LDAP SDK for Java是一个快速、综合易用的 LDAP 目录服务的 Java 客户端API,它提供了一套快速、 [阅读全文]
ė1107次浏览 61条评论 0 java ldap

性能分析之-- JAVA Thread Dump 分析综述

chenhaozjnubit | | 2017-03-17
最近在做性能测试,需要对线程堆栈进行分析,在网上收集了一些资料,学习完后,将相关知识整理在一起,输出文章如下。一、Thread Dump介绍1.1什么是Thread Dump?Thread Dump是非常有用的诊断Java应用问题的工具。每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能力,虽然各个 Java虚拟机打印的thread dump略有不同,但是大多都提供了 [阅读全文]
ė1269次浏览 60条评论 0 java

Java 并发编程:volatile的使用及其原理

chenhaozjnubit | | 2017-03-15
一、volatile的作用  在http://www.cnblogs.com/paddix/p/5374810.html">《Java并发编程:核心理论》一文中,我们已经提到过可见性、有序性及原子性问题,通常情况下我们可以通过Synchronized关键字来解决这些个问题,不过如果对Synchronized原理有了解的话,应该知道Synchronized是一个比较重量级的操作,对系统的性能有比较大 [阅读全文]
ė712次浏览 60条评论 0 java

Java 下的 JSON库性能比较:JSON.simple vs. GSON vs. Jackson vs. JSONP

chenhaozjnubit | | 2017-02-23
JSON已经成为当前服务器与WEB应用之间数据传输的公认标准,不过正如许多我们所习以为常的事情一样,你会觉得这是理所当然的便不再深入思考了。我们很少会去想用到的这些JSON库到底有什么不同,但事实上它们的确是不太一样的。因此,我们运行了一个基准测试来对常用的几个JSON库进行了测试,看看在解析不同大小的文件时哪个库的速度是最快的。下面我会把结果分享给大家。JSON通常用于传输及解析大文件。这对运行 [阅读全文]
ė851次浏览 60条评论 0 java

Java 并发开发:Lock 框架详解

chenhaozjnubit | | 2017-02-22
摘要:我们已经知道,synchronized 是java的关键字,是Java的内置特性,在JVM层面实现了对临界资源的同步互斥访问,但 synchronized 粒度有些大,在处理实际问题时存在诸多局限性,比如响应中断等。Lock 提供了比 synchronized更广泛的锁操作,它能以更优雅的方式处理线程同步问题。本文以synchronized与Lock的对比为切入点,对Java中的Lock框架 [阅读全文]
ė777次浏览 60条评论 0 java

sun.misc.Unsafe的后启示录

chenhaozjnubit | | 2017-01-10
Java语言和JVM平台已经度过了20岁的生日。它最初起源于机顶盒、移动设备和Java-Card,同时也应用在了各种服务器系统中,Java已成为物联网(Internet of Things)的通用语言。我们显然可以看到Java已经无处不在!但是不那么为人所知的是,Java也广泛应用于各种低延迟的应用中,如游戏服务器和高频率的交易应用。这只所以能够实现要归功于Java的类和包在可见性规则中有一个恰到 [阅读全文]
ė701次浏览 60条评论 0 java

Java直接内存读写

chenhaozjnubit | | 2017-01-03
     在Hotspot JVM上,我们能够直接对内存进行读写操作。该类的allocateMemory方法用于申请分配内存,putAddress和getAddress方法用于对直接内存进行读写。        下面将通过sun.misc.Unsafe演示直接读写内存的例子。 & [阅读全文]
ė825次浏览 60条评论 0 java

Java7中的ForkJoin并发框架初探(中)——JDK中实现简要分析

chenhaozjnubit | | 2016-12-23
根据前文描述的Doug Lea的理论基础,在JDK1.7中已经给出了Fork Join的实现。在Java SE 7的API中,多了ForkJoinTask、ForkJoinPool、ForkJoinWorkerThread、RecursiveAction、RecursiveTask这样5个类。本文就对JDK1.7中增加这5个工具类实现做简要分析。0. JDK中ForkJoin实现概述在JavaSE [阅读全文]
ė749次浏览 60条评论 0 java

简单排查java应用CPU飙高的线程问题

chenhaozjnubit | | 2016-11-01
1. 获取要查看的进程的ID ps aux | grep xxx2. 查看此进程下的线程信息top -H -p top -p      按shift+htop -Hp        3. 查看栈信息jstack > stacksudo -u tomcat $JAVA_HOME/bin/jstack > stack [阅读全文]
ė2492次浏览 60条评论 0 java

Shallow heap & Retained heap

chenhaozjnubit | | 2016-10-24
所有包含Heap Profling功能的工具(MAT, Yourkit, JProfiler, TPTP等)都会使用到两个名词,一个是Shallow Size,另一个是 Retained Size.这是两个在平时不太常见的名词,本文会对这两个名词做一个详细的解释。Shallow Size对象自身占用的内存大小,不包括它引用的对象。针对非数组类型的对象,它的大小就是对象与它所有的成员变量大小的总和。 [阅读全文]
ė636次浏览 60条评论 0 java

JVM最大线程数

chenhaozjnubit | | 2016-10-12
工作中碰到过这个问题好几次了,觉得有必要总结一下,所以有了这篇文章,这篇文章分为三个部分:认识问题、分析问题、解决问题。 一、认识问题:首先我们通过下面这个 测试程序 来认识这个问题:运行的环境 (有必要说明一下,不同环境会有不同的结果):32位Windows XP,Sun JDK 1.6.0_18, eclipse 3.4,测试程序:Java代码  import j [阅读全文]
ė888次浏览 60条评论 0 java

Java中httpClient中的三种超时设置小结

chenhaozjnubit | | 2016-10-10
本文章给大家介绍一下关于Java中httpClient中的三种超时设置小结,希望此教程能给各位朋友带来帮助。 ConnectTimeoutException:    当连接HTTP服务器或者等待HttpConnectionManager管理的一个有效连接超时引发该异常。 SocketTimeoutException:    当读 [阅读全文]
ė921次浏览 60条评论 0 java

jdk1.5 jdk1.6 jdk1.7 jdk1.8 特性

chenhaozjnubit | | 2016-10-09
JDK各个版本的新特性  对于很多刚接触java语言的初学者来说,要了解一门语言,最好的方式就是要能从基础的版本进行了解,升级的过程,以及升级的新特性,这样才能循序渐进的学好一门语言。今天先为大家介绍一下JDK1.5版本到JDK1.7版本的特性。希望能给予帮助。JDK1.5新特性: 1.自动装箱与拆箱:自动装箱的过程:每当需要一种类型的对象时,这种基本类型就自动地封装 [阅读全文]
ė827次浏览 60条评论 0 java

Runnable、Callable、Executor、Future、FutureTask关系解读

chenhaozjnubit | | 2016-09-26
转自:http://blog.csdn.net/zhangzhaokun/article/details/6615454在再度温习Java5的并发编程的知识点时发现,首要的就是把Runnable、Callable、Executor、Future等的关系搞明白,遂有了下述小测试程序,通过这个例子上述三者的关系就一目了然了。在java5 [阅读全文]
ė651次浏览 60条评论 0 java

ThreadLocal的几种误区

chenhaozjnubit | | 2016-09-22
 最近由于需要用到ThreadLocal,在网上搜索了一些相关资料,发现对ThreadLocal经常会有下面几种误解 一、ThreadLocal是java线程的一个实现      ThreadLocal的确是和java线程有关,不过它并不是java线程的一个实现,它只是用来维护本地变量。针对每个线程,提供自己的变量版本,主 [阅读全文]
ė616次浏览 60条评论 0 java

连接池中的maxIdle,MaxActive,maxWait参数

chenhaozjnubit | | 2016-09-20
name:表示你的连接池的名称也就是你要访问连接池的地址auth:是连接池管理权属性,Container表示容器管理type:是对象的类型driverClassName:是数据库驱动的名称url:是数据库的地址username:是登陆数据库的用户名password:是登陆数据库的密码maxIdle,最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连接将被标记为不可用,然后被释放。设为0表 [阅读全文]
ė680次浏览 60条评论 0 java

InetAddress.getLocalHost() throws UnknownHostException

chenhaozjnubit | | 2016-09-12
In good tradition I can answer my own question once again:It seems that InetAddress.getLocalHost() ignores the /etc/resolv.conf but only looks at the /etc/hosts file (where I hadn't specified anything [阅读全文]
ė660次浏览 60条评论 0 java

Java Class卸载与ClassLoader

chenhaozjnubit | | 2016-09-07
JVM中的Class只有满足以下三个条件,才能被GC回收,也就是该Class被卸载(unload):   - 该类所有的实例都已经被GC,也就是JVM中不存在该Class的任何实例。   - 加载该类的ClassLoader已经被GC。   - 该类的java.lang.Class 对象没有在任何地方被引用,如不能在任何地方通过反射访问该 [阅读全文]
ė1331次浏览 60条评论 0 java

使用jvisualvm和飞行记录器分析Java程序cpu占用率过高

chenhaozjnubit | | 2016-09-02
一、jvisualvm使用     JDK1.6中Oracle提供了一个新的JVM监控工具:jvisualvm。下面重点介绍如何在本地通过远程的方式打开Linux服务器上的jvisualvm.     1、Xmanager安装     由于jvisualvm为可视化监控工具,在本 [阅读全文]
ė989次浏览 60条评论 0 java

java多线程学习-java.util.concurrent详解(一) Latch/Barrier

chenhaozjnubit | | 2016-09-01
  Java1.5提供了一个非常高效实用的多线程包:java.util.concurrent, 提供了大量高级工具,可以帮助开发者编写高效、易维护、结构清晰的Java多线程程序。从这篇blog起,我将跟大家一起共同学习这些新的Java多线程构件1. CountDownLatch&nb [阅读全文]
ė654次浏览 60条评论 0 java

Java利用ShutDownHook关闭系统资源

chenhaozjnubit | | 2016-08-29
Java关闭钩子 在Java程序中可以通过添加关闭钩子,实现在程序退出时关闭资源的功能。 使用Runtime.addShutdownHook(Thread hook)向JVM添加关闭钩子 public void addShutdownHook(Thread hook) { SecurityManager sm = System.getSecurity [阅读全文]
ė1071次浏览 60条评论 0 java

Java 并发工具包 java.util.concurrent 用户指南

chenhaozjnubit | | 2016-08-26
译序 本指南根据 Jakob Jenkov 最新博客翻译,请随时关注博客更新:http://tutorials.jenkov.com/java-util-concurrent/index.html。 本指南已做成中英文对照阅读版的 pdf 文档,有兴趣的朋友可以去 Java并发工具包java.util.concurrent用户指南中英 [阅读全文]
ė855次浏览 60条评论 0 java

java高分局之JVM命令参数大全(高级运行时选项)

chenhaozjnubit | | 2016-08-25
java高分局之JVM命令参数大全(高级运行时选项) 这些选项控制hotspotVM运行时的行为 -XX:+CheckEndorsedAndExtDirs 这个选项将会阻止java命令运行应用,除非没有用到endorsed-standards override机制和扩展机制。这个选项会检查应用是否使用了下面 的机制之一 [阅读全文]
ė1142次浏览 60条评论 0 java

JAVA根据IP地址获取详细的地域信息

chenhaozjnubit | | 2016-08-01
  在系统中,网站的头部一般都有显示是哪个城市的,用户进入到网站的首页后,默认城市应该是用户本地的城市信息,例如:北京,网站就要根据你的IP地址的信 息,查询数据,获取北京部分的数据,呵呵,当然我可能描述的不是很清楚,但是可以理解成,通过IP地址定位地理信息就行。很多人现在使用以QQ数据库为基 础获取地址信息,但不完整、而且不规范。互联网提供很多其他接口可以完成这项功能. [阅读全文]
ė780次浏览 60条评论 0 java

Java中Runnable和Thread的区别

chenhaozjnubit | | 2016-07-05
在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义 的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限。 下面看例子: package org.thread.demo; [阅读全文]
ė928次浏览 60条评论 0 java

观察者模式

chenhaozjnubit | | 2016-04-01
观察者模式 Observer 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。 这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己。   观察者模式的组成 抽象主题角色:把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者。抽象主题 [阅读全文]
ė657次浏览 60条评论 0 java 设计模式

Java transient关键字

chenhaozjnubit | | 2016-03-31
Volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到主内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。       Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员 [阅读全文]
ė649次浏览 60条评论 0 java

SimpleDateFormat的线程安全问题与解决方案

chenhaozjnubit | | 2016-02-29
1. 原因 SimpleDateFormat(下面简称sdf)类内部有一个Calendar对象引用,它用来储存和这个sdf相关的日期信息,例如 sdf.parse(dateStr), sdf.format(date) 诸如此类的方法参数传入的日期相关String, Date等等, 都是交友Calendar引用来储存的.这样就会导致一个问题,如果你的sdf是个s [阅读全文]
ė891次浏览 60条评论 0 java

Java中守护线程的总结

chenhaozjnubit | | 2016-01-13
在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程)  用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆: 只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。 Daemon的作用是 [阅读全文]
ė886次浏览 60条评论 0 java

Java7中的switch支持String的实现细节

chenhaozjnubit | | 2015-12-17
在Java7之前,switch只能支持 byte、short、char、int或者其对应的封装类以及Enum类型。在Java7中,呼吁很久的String支持也终于被加上了。   例如,下面是一段switch中使用String的示例代码。 点击(此处)折叠或打开 public class Test { [阅读全文]
ė893次浏览 60条评论 0 java

深入浅出Java垃圾回收机制

chenhaozjnubit | | 2015-12-10
对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC如何工作可以帮你写出更好的Java应用。 这仅仅代表我个人的意见,但我坚信一个精通GC的人往往是一个好的Java开发者。如果你对GC的处理过程感兴趣,说明你已经具备较大规模应用的开 发经验。如果你曾经想过如何正确的选择GC算法,那意味着你已经完全理解你所开发 [阅读全文]
ė637次浏览 60条评论 0 java gc

Java 怎么获取当前时间前一个小时的时间

chenhaozjnubit | | 2015-09-10
Calendar calendar = Calendar.getInstance();      /* HOUR_OF_DAY 指示一天中的小时 */     calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - 1);      SimpleDateFormat df = new SimpleDate [阅读全文]
ė1197次浏览 60条评论 0 java

判断当前所用的web容器

chenhaozjnubit | | 2015-08-07
    if (System.getProperty("com.sun.aas.installRoot") != null)       this.e = "Glassfish";     else if (System.getProperty("resin.home") != null) [阅读全文]
ė791次浏览 60条评论 0 java

-javaagent参数使用

chenhaozjnubit | | 2015-08-06
 javaAgent  javaAgent是从JDK1.5及以后引入的,在1.5之前无法使用,也可以叫做java代理。 1. 代理 (agent) 是在你的main方法前的一个拦截器 (interceptor),也就是在main方法执行之前,执行agent的代码。 agent的代码与你的main方法在同一个J [阅读全文]
ė1421次浏览 60条评论 0 java

JDK各个版本的新特性jdk1.5-jdk8

chenhaozjnubit | | 2015-05-13
JDK各个版本的新特性   对于很多刚接触java语言的初学者来说,要了解一门语言,最好的方式就是要能从基础的版本进行了解,升级的过程,以及升级的新特性,这样才能循序渐进的学好一门语言。今天先为大家介绍一下JDK1.5版本到JDK1.7版本的特性。希望能给予帮助。 JDK1.5新特性: [阅读全文]
ė877次浏览 60条评论 0 java

ConcurrentHashMap

chenhaozjnubit | | 2015-05-06
ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和HashTable功能相同但是线程安全的方法。ConcurrentHashMap可以做到读取数据不加锁,并且其内部的结构可以让其在进行写操作的时候能够将锁的粒度保持地尽量地小,不用对整个ConcurrentHashMap加锁。 ConcurrentHashMap的内部结构 [阅读全文]
ė888次浏览 60条评论 0 java

java,javac,jar的各个参数的具体含义

chenhaozjnubit | | 2015-04-27
1.javac相关的参数 C:\Documents and Settings\ginger>javac -help 用法:javac 其中,可能的选项包括: -g                      [阅读全文]
ė1113次浏览 60条评论 0 java

Java执行Runtime.exec(shell)报Cannot allocate memory

chenhaozjnubit | | 2015-04-16
在Linux下用java的Runtime.getRuntime().exec(cmd)方式,执行shell脚本时,遇到“Cannot allocate memory”的错误。 网上查询资料整理如下: Cannot allocate memory 在Linux上调试一个比较复杂的Java程序,称为JavaA吧,JavaA会频繁的通过Process proc [阅读全文]
ė2012次浏览 60条评论 0 java

网络异常

chenhaozjnubit | | 2015-04-09
第1个异常是java.net.BindException:Address already in use: JVM_Bind。该异常发生在服务器端进行new ServerSocket(port)(port是一个0,65536的整型值)操作时。异常的原因是以为与port一样的一个端口已经被启动,并进行监听。此时用netstat –an命令,可 [阅读全文]
ė1004次浏览 60条评论 0 java

如何产生javacore和heapdump文件

chenhaozjnubit | | 2015-04-08
1.  windows & Linux:          修改运行脚本的javaw 到java,并且添加参数-XX:+HeapDumpOnCtrlBreak。 运行程序后,按ctrl+break, 就可以得到heapdump文件。 -Djava.awt.headless=t [阅读全文]
ė1258次浏览 60条评论 0 java

在 TDA 工具里看到 Java Thread State 的第一反应是

chenhaozjnubit | | 2015-04-02
使用 TDA 工具,看到大量 Java Thread State 的第一反应是: 1,线程状态为“waiting for monitor entry”: 意味着它  在等待进入一个临界区 ,所以它在”Entry Set“队列中等待。 此时线程状态一般都是 Blocked: [阅读全文]
ė1136次浏览 60条评论 0 java

synchronized与static synchronized 的区别

chenhaozjnubit | | 2015-03-19
Acquires a lock on the current object instance at the open brace, and releases it at the close brace  the lock will be on the static instance, and not on any specific instance [阅读全文]
ė1062次浏览 60条评论 0 java

读取网页内容

chenhaozjnubit | | 2015-03-13
  public static String getURLContent(String url, String encoding) {   if (url == null || "".equals(url.trim()))    return null;   StringBuffe [阅读全文]
ė809次浏览 60条评论 0 java

查看class文件的编译jdk版本

chenhaozjnubit | | 2015-03-11
使用 UE 打开 class 文件,第一行内容:   00000000h: CA FE BA BE 00 00 00 32 00 A9 07 00 02 01 00 37 ; 漱壕...2.?....7   前四个字节为固定的 CA FE BA BE ,接下来的四个字节为次版本号(0000)和主版本号(00032)。 [阅读全文]
ė960次浏览 60条评论 0 java

jmap命令(Java Memory Map)

chenhaozjnubit | | 2015-03-09
1、介绍 打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。 可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。使用方法 jmap -histo pid。如果连用SHELL jmap -histo pid>a.log可以 [阅读全文]
ė928次浏览 60条评论 0 java

有关OutOfMemoryError的原因及处理

chenhaozjnubit | | 2015-02-27
堆溢出 会出现java.lang.OutOfMemoryError,紧接着还会跟一条Java heap space,at… 先通过内存映像分析工具堆dump出来的堆快照分析,分清楚是内存泄漏还是内存溢出 对于内存泄漏,查一下GC Roots的引用链,掌握泄露对象的类型信息及GC Roots引用链的信息,定位出问题的地方 [阅读全文]
ė880次浏览 60条评论 0 java

InetAddress.getLocalHost()详解

chenhaozjnubit | | 2015-02-16
使用:InetAddress.getLocalHost() 出现异常: “Reason: java.net.UnknownHostException zw_65_43 : .....   问题原因是在系统的 /etc/Hostname中配置了“zw_65_43” 作为主机名, 而在/etc/hosts文件中没有 相应的“zw_65_43”。 简单的解决办法是对应关系配好就可以, [阅读全文]
ė1538次浏览 60条评论 0 java