java基础
clamaa
这个作者很懒,什么都没留下…
展开
-
String.format(String format, Object… args)总结
JDK1.5中,String类新增了一个很有用的静态方法String.format,这个方法可以简化字符串的输出工作,避免在System.out.println方法和记录Log时代码中出现大量的字符串连接符“+”这种丑陋的代码书写方式,使用指定的格式字符串和参数返回一个格式化字符串,而在System.out.printf方法中也使用了format这种方式输出至console中。 jav...原创 2014-06-06 13:30:34 · 274 阅读 · 0 评论 -
Java NIO学习笔记(下)
摘自并发编程网:http://ifeve.com/overview/仅作自己学习…… 1. FileChannelJava NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。 在使用FileChannel之前,必须先打开它。但是,我们无法直接...原创 2014-04-16 10:01:54 · 112 阅读 · 0 评论 -
JVM内存管理和问题简要分析学习
Java中我们基本上不会显式地调用分配内存的函数,分配内存和回收内存都由JVM自动完成了。 所谓物理内存就是我们通常说的RAM(随机存储器),计算机中还有一个存储单元叫做寄存器,用于存储计算单元执行指定的中间结果。寄存器的大小决定了一次计算可使用的最大数值。 不管是在Windows系统还是在Linux系统下,运行程序都要向操作系统先申请内存地址。通常操作系统管理内存的申请空...2015-04-25 22:55:19 · 67 阅读 · 0 评论 -
web项目中遇到的Maven包依赖冲突问题解决
在搭建web项目时,出现一个比较诡异的问题,任何JSP页面突然都不能够正常地显示,系统爆出HTTP:500(服务器内部错误)的页面 HTTP Status 500 - java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.CompilationResult.getProblems()[Lorg/eclip...原创 2015-05-06 21:52:02 · 618 阅读 · 0 评论 -
准确计算Java中对象的大小
由于在项目中需要大致计算一下对象的内存占用率(Hadoop中的Reduce端内存占用居高不下却又无法解释),因此深入学习了一下如何准确计算对象的大小。 使用system.gc()和java.lang.Runtime类中的freeMemory(),totalMemory(),maxMemory()这几个方法测量Java对象的大小,这种方法的优点是数据类型大小无关的,不同的操作系统,都可以...原创 2014-09-05 22:56:28 · 325 阅读 · 0 评论 -
JNI的一个简单实例
本例子使用的操作系统MacOS, 64位JVM。 JNI编写的几个步骤如下: 编写Java代码,并注明native方法: public class HelloJni { public native void displayHelloJni(); public static void main(String[] args) { ...原创 2014-09-16 21:43:34 · 73 阅读 · 0 评论 -
Java和dubbo中的SPI机制学习
关于java的SPI机制,可以参考:https://docs.oracle.com/javase/tutorial/sound/SPI-intro.html 为了实现在模块装配时的时候不在程序中动态指明,需要提供一种服务发现机制,为某个接口寻找服务实现的机制,就是将装配的控制权转移到程序之外,在模块化设计中这个机制尤其重要。 Java SPI(Service Pro...原创 2016-10-18 16:32:14 · 177 阅读 · 0 评论 -
SimpleDateFormat导致的多线程问题
今天在跑压力测试的过程中,一个看似不可能出错的地方居然报错了,起因在于我们定义的DateUtil工具类,用于将日期进行合理的format以及parse,出现了多线程问题(在单线程时不会出错,只有压测过程中会出现错误)。 代码上分析,原来编写的DateUtil简直是漏洞百出,首先将SimpleDateFormat定义为static变量,这表明在JVM中仅存在一份: ...原创 2016-10-18 20:28:09 · 241 阅读 · 0 评论 -
java中的线程安全与锁优化
Java的线程是映射到操作系统的原生线程之上的,如果要阻塞或唤醒一条线程,都需要操作系统来帮忙完成,这就需要操作系统来帮忙完成,需要从用户态转换到内核态中,状态转换需要耗费很多的处理器时间。如果是非常简单的代码同步块,状态转换消耗的时间可能比用户代码执行的时间还要长。 因此可以说,synchronized是Java语言中的一个重量级操作,对于有经验的程序员都会在确实必要的情况...原创 2016-11-10 19:40:51 · 134 阅读 · 0 评论 -
hadoop中使用hprof工具进行性能分析
在编写完成MapReduce程序之后,调优就成为了一个大问题。如何使用现有工具快速地分析出任务的性能? 对于本地的java应用程序,进行分析可能稍微简单,但是hadoop是一个分布式框架,MapReduce任务可能在集群中的任意机器上被调度运行。而且本地Job运行器是一个与集群差异非常大的环境,数据流的形式也不同,应该在实际集群上对比新的执行时间和旧的执行时间。 hadoop的...2014-11-19 17:06:11 · 138 阅读 · 0 评论 -
Java NIO学习笔记(上)
摘自并发编程网:http://ifeve.com/overview/仅作自己学习…… 1. 概述Java NIO 由以下几个核心部分组成:ChannelsBuffersSelectors 2. ChannelJava NIO的通道类似流,但又有些不同:既可以从通道中读取数据,又可以写数据到通道,但流的读写通常是单向的。通道可...原创 2014-04-15 18:57:02 · 89 阅读 · 0 评论 -
JDK内部工具详解
jps用来查看基于HotSpot JVM里面所有进程的具体状态, 包括进程ID,进程启动的路径等等。与unix上的ps类似,用来显示本地有权限的java进程,可以查看本地运行着几个java程序,并显示他们的进程号,使用jps时,不需要传递进程号做为参数。 Jps也可以显示远程系统上的JAVA进程,这需要远程服务上开启了jstatd服务,以及RMI注及服务,不过常用都是对本对的...原创 2014-04-09 16:28:18 · 235 阅读 · 0 评论 -
java基础-构建命令行运行的java程序简要注意
今天编写了一个运行在服务端的java工具类,才发现自己以前很少关注运营方面的内容,导致在服务端部署一个java的工具变得异常困难,其实这也是自己对java的了解不够造成的。 首先,当代码编写完成之后,在主类中必须要有main函数,其中的参数非常重要。根据一位同事的说法,除正常的执行程序之外,其中至少要包含两种参数:-v(软件版本,以及作者等介绍信息),-h(软件的帮助信息,良好的...原创 2014-06-25 21:34:19 · 62 阅读 · 0 评论 -
JDK1.5到1.7的进化
1. JDK1.51.1 枚举增加了一个关键字enum。 enum非常像public static final int声明,后者作为枚举值已经使用了很多年。对int所做的最大也是最明显的改进是类型安全――您不能错误地用枚举的一种类型代替另一种类型,这一点和 int不同,所有的int对编译器来说都是一样的。除去极少数例外的情况,通常都应该用enum实...原创 2014-03-02 13:46:11 · 103 阅读 · 0 评论 -
JDK1.6中工具构成
要想深入了解Java必须对JDK的组成, 本文对JDK6里的目录做了基本的介绍,主要还是讲解了下JDK里的各种可执行程序或工具的用途 Java(TM) 有两个平台 JRE 运行平台,包括Java虚拟机,运行类库,java应用程序装载器。 JRE不是开发环境,所以不包括编译器,调试器,有需要这些请安装JDK(TM) 当前JDK环境为1.6,假定目录在c:\...原创 2014-03-07 10:05:56 · 146 阅读 · 0 评论 -
Java中的GetOpt操作
在shell工具中,有专门的getopt函数,使用方法如下所示:while getopts "d:t:vh" opt; do case "${opt}" in "d") DATE="${OPTARG}" ;; "t") ID="${OPTARG}" ID2=`echo $ID |原创 2014-07-26 16:02:09 · 112 阅读 · 0 评论 -
Java中设置默认编码
在Java中经常会遇到字符串编码错误的情况,例如我们在eclipse中使用Gerrit插件提交comment或者push commit的信息时,填写中文都会导致Gerrit服务器返回错误,这是因为我们从eclipse端返回字符串默认编码是GBK,但Gerrit服务器只能接受UTF-8的编码,该如何处理? 首先,想到了修改Gerrit插件,对所有涉及到的字符串都采用下面的方式:new...原创 2014-03-13 08:18:06 · 530 阅读 · 0 评论 -
Java测试用例简介
最近需要向组内其他成员普及一下关于Java测试用例的相关知识,特在此进行一下简单的学习和总结。JUnit简介JUnit是一个开源的Java单元测试框架,JUnit4对原有的JUnit框架进行了大幅度的改进,主要目标便是利用了Java中的Annotation,来代替以前必须要继承AbstractTestCase,以及要测试的方法名称必须test为前缀。 JUnit4中提供...原创 2014-08-02 21:04:20 · 266 阅读 · 0 评论 -
Java GC日志查看
Java GC类型Java中的GC有哪几种类型? 参数描述UseSerialGC虚拟机运行在Client模式的默认值,打开此开关参数后,使用Serial+Serial Old收集器组合进行垃圾收集。UseParNewGC打开此开关参数后,使用ParNew+Serial Old收集器组合进...原创 2014-08-07 21:21:37 · 239 阅读 · 0 评论 -
Java运行的基本线程解析
今天根据网上找的一些资料,配合自己的理解,将java程序启动时的一些命令如jps, jstack, 总结如下:(主要是留给自己看的)线程名称解释说明Attach ListenerAttach Listener 线程是负责接收到外部的命令,而对该命令进行执行的并且把结果返回给发送者。通常我们会用一些命令去要求jvm给我们一些反馈信息,如:jav...原创 2014-04-01 21:32:32 · 144 阅读 · 0 评论 -
java.lang.String.trim(), 不仅仅去掉空格
由于我们处理的日志需要过滤一些空格,因此大部分处理日志的程序中都用到了java.lang.String.trim()函数。直到有一次遇到一个诡异的问题,某个包含特殊字符的字符串被trim后居然也为空(虽然这种特殊字符也没有什么太大意义…)。 于是查看这个特殊字段,显示为^I(在Linux下可以通过cat -A命令能够查看这个特殊字符),对应键盘上的Tab键,于是便将trim()函数...2015-03-11 22:22:11 · 178 阅读 · 0 评论 -
locale错误导致Java中文乱码错误的总结
线上执行MapReduce任务计算时,经过排查发现了某些服务器计算的数据出现中文乱码问题,但是服务器的配置是完全一致的。由于我们使用的key可能包含中文,中文乱码问题体现在每次合并map记录的时候计算数据的随机性,每次执行的结果都不一样(由于Map任务执分配的随机性)。(注:此文章大部分都参考了同事查找到的问题解决方法。) 在执行Java进程的过程中,通过命令:jinfo+Java...2014-12-02 20:57:31 · 297 阅读 · 0 评论