![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
阿虫
软件工程,项目管理、性能测试、质量流程
展开
-
分析Jvm的heap溢出的实例
说起Java的内存泄露,其实定义不是那么明确。首先,如果JVM没有bug,那么理论上是不会出现“无法回收的堆空间”,也就是说C/C++中的那种内 存泄露在Java中不存在的。其次,如果由于Java程序一直持有某个对象的引用,但是从程序逻辑上看,这个对象再也不会被用到了,那么我们可以认为这个 对象被泄露了。如果这样的对象数量很多,那么很明显,大量的内存空间就被泄露(“浪费”更准确一些)了。转载 2012-06-04 11:29:47 · 716 阅读 · 0 评论 -
socket编程(三)---- UDP协议与传输数据报文
UDP协议一般应用在“群发信息”的场合,所以它可以利用多线程机制,实现多信息的同步发送。为了改善代码结构,把一些业务逻辑的动作抽象成方法,并封装成类,这样,基于UDP功能的类就可以在其他应用项目里被轻易的重用。如果把客户端的所有代码都写在一个文件中,那么代码的功能很有可能都聚集在一个方法里,代码的可维护性将会变得很差。所以专门设计ClientBean类,在其中封装了客户端通讯的一些功能方法转载 2012-10-17 14:56:13 · 661 阅读 · 0 评论 -
SNMP4J介绍和实例
一、SNMP简介SNMP指的是简单网络管理协议。它属于TCP/IP五层协议中的应用层协议。它提供了一种简单和方便的模式来管理网络中的各个元素。这里的元素就是各个被管理的对象,可以是因特网中的某个硬件,比如网卡,也可以是某些硬件和软件的配置参数的集合。由于SNMP协议简单可靠 ,受到了众多厂商的欢迎,成为了目前最为广泛的网管协议。SNMP协议主要由两大部分构成:SNMP管理站和SNMP代理。转载 2012-10-19 14:29:01 · 1317 阅读 · 0 评论 -
Java线程总结
今天准备总结一下关于Java 线程的问题,提到线程很容易与进程混淆,从计算机操作系统的发展来看,经历了这样的两个阶段: 单进程处理:最早以前的DOS 系统就属于单进程处理,即:在同一个时间段上只能有一个程序在执行,所以在DOS 系统中只要有病毒的出现,则立刻会有反映; 多进程处理:我们现在使用的Windows 操作系统就是典型的一个多线程,所以,如果在window转载 2012-12-04 17:31:08 · 425 阅读 · 0 评论 -
java自定义注解
Java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用。包含在 java.lang.annotation 包中。1、元注解元注解是指注解的注解。包括 @Retention @Target @Document @Inherited四种。1.1、@Retention: 定义注解转载 2013-01-06 10:19:42 · 444 阅读 · 0 评论 -
Java的SPI机制介绍
SPI的全名为Service Provider Interface.普通开发人员可能不熟悉,因为这个是针对厂商或者插件的。在java.util.ServiceLoader的文档里有比较详细的介绍。究其思想,其实是和"Callback"差不多。“Callback”的思想是在我们调用API的时候,我们可以自己写一段逻辑代码,传入到API里面,API内部在合适的时候会调用它,从而实现某种程度的“定制”。转载 2013-01-08 10:28:39 · 339 阅读 · 0 评论 -
Java内存的原型及工作原理
本文主要通过分析Java内存分配的栈、堆以以及常量池详细的讲解了其的工作原理。一、java虚拟机内存原型寄存器:我们在程序中无法控制栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中堆:存放用new产生的数据静态域:存放在对象中用static定义的静态成员常量池:存放常量非RAM存储:硬盘等永久存储空间。二、常量池(constant pool)常量池指的是在转载 2013-01-16 10:03:22 · 361 阅读 · 0 评论 -
Java中OutOfMemoryError与unable to create new native thread(JVM创建大量线程)的关系
最近在应用服务器跑压力测试过程当中,出现无法创建线程的错误。在java应用中,有时候会出现这样的错误:OutOfMemoryError: unable to create new native thread.这种怪事是因为JVM已经被系统分配了大量的内存(比如1.5G),并且它至少要占用可用内存的一半。有人发现,在线程个数很多的情况下,你分配给JVM的内存越多,那么,上述错误发生的可能性就越大转载 2013-01-31 15:58:27 · 626 阅读 · 0 评论 -
内存溢出和内存泄漏的区别
内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。memory leak会最终会导转载 2013-01-31 15:35:15 · 550 阅读 · 0 评论 -
Java程序员必知的8大排序
8种排序之间的关系:1, 直接插入排序(1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。(2)实例(3)用java实现package com.njue; public class insertSort {转载 2013-01-22 13:42:25 · 659 阅读 · 0 评论 -
Eclipse全键盘编码攻略之一——入门
入门Alt+/ 平时我们输入类实例后按"."就会有个自动补全的提示,其实可以在任何地方按这个快捷键都可以弹出类似的提示,变量名补全、成员变量选择、自动取名等等……。如果闲自己按这个键太麻烦或是对于所有东西都不想自己输入的懒人(比如@SeanLionheart),可以在Windows - Preferences - Java - Editor - Content Assist 中的 Au转载 2013-01-22 17:12:56 · 4615 阅读 · 3 评论 -
Java实现的几个常用排序算法详细解读
排序算法很多地方都会用到,近期又重新看了一遍算法,并自己简单地实现了一遍,特此记录下来,为以后复习留点材料。废话不多说,下面逐一看看经典的排序算法:1. 选择排序选择排序的基本思想是遍历数组的过程中,以 i 代表当前需要排序的序号,则需要在剩余的 [i…n-1] 中找出其中的最小值,然后将找到的最小值与 i 指向的值进行交换。因为每一趟确定元素的过程中都会有一个选择最大值的子流程,所以转载 2013-01-22 13:21:42 · 430 阅读 · 0 评论 -
assertThat使用方法
一般匹配符1、assertThat( testedNumber, allOf( greaterThan(8), lessThan(16) ) );注释: allOf匹配符表明如果接下来的所有条件必须都成立测试才通过,相当于“与”(&&)2、assertThat( testedNumber, anyOf( greaterThan(16), lessThan(8) ) );注释:any转载 2013-05-10 16:38:24 · 493 阅读 · 0 评论 -
socket编程(一)
依据TCP协议,在C/S架构的通讯过程中,客户端和服务器的Socket动作如下服务器:1. 在服务器,用一个端口来实例化一个 ServerSocket对象。此时,服务器就可以这个端口时刻监听从客户端发来的连接请求。2.调用ServerSocket的accept方法,开始监听连接从端口上发来的连接请求。 3.利用accept方法返回的客户端的Socket对象,进行读写IO的操作转载 2012-10-17 14:49:59 · 672 阅读 · 0 评论 -
socket编程(二)---- 使用套接字连接多个客户端
在(一)中,客户端和服务器之间只有一个通讯线程,所以它们之间只有一条Socket信道。如果我们引入多线程机制,则可以让一个服务器端同时监听并接收多个客户端的请求,并同步地为他们提供通讯服务。基于多线程的通讯方式,将大大地提高服务器端的利用效率,并能使服务器端能具备完善的服务功能。 下面通过一个例子来加深理解: 第一步:写服务端线程类 [java]转载 2012-10-17 14:55:25 · 3429 阅读 · 1 评论 -
Junit4 GroboUtils多线程测试
利用JUNIT4,GroboUtils进行多线程测试多线程编程和测试一直是比较难搞的事情,特别是多线程测试。只用充分的测试,才可以发现多线程编码的潜在BUG。下面就介绍一下我自己在测试多线程并发程序时用的一个比较简单好用的测试工具类库。即JUNIT4和GroboUtils。废话不多说,把代码贴出来,大家一看就明白了。 import java.util.ArrayList;转载 2012-06-07 10:43:25 · 3057 阅读 · 1 评论 -
JVM监控工具介绍
jstatd启动jvm监控服务。它是一个基于rmi的应用,向远程机器提供本机jvm应用程序的信息。默认端口1099。实例:jstatd -J-Djava.security.policy=my.policymy.policy文件需要自己建立,内如如下:grant codebase "file:$JAVA_HOME/lib/tools.jar" { permission jav转载 2012-06-14 13:41:37 · 430 阅读 · 0 评论 -
Java 线程池的原理与实现
简单介绍 创建线程有两种方式:继承Thread或实现Runnable。Thread实现了Runnable接口,提供了一个空的run()方法,所以不论是继承Thread还是实现Runnable,都要有自己的run()方法。 一个线程创建后就存在,调用start()方法就开始运行(执行run()方法),调用wait进入等待或调用sleep进入休眠期,顺利运行完毕或休眠被中断或运转载 2012-08-06 12:01:33 · 754 阅读 · 0 评论 -
java多线程框架
(来源于http://www.zhuaxia.com/item/590227619/) JDK5中的一个亮点就是将Doug Lea的并发库引入到Java标准库中。Doug Lea确实是一个牛人,能教书,能出书,能编码,不过这在国外还是比较普遍的,而国内的教授们就相差太远了。一般的服务器都需要线程池,比如Web、FTP等服务器,不过它们一般都自己实现了线程池,比如以前介绍过的To转载 2012-08-10 22:47:51 · 12328 阅读 · 0 评论 -
log4j配置示例
log4j.rootLogger=DEBUG,CONSOLE,DATABASE,FILE log4j.addivity.org.apache=true # 应用于控制台 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Threshold=INFO log4j.app原创 2012-08-17 11:52:57 · 399 阅读 · 0 评论 -
java的concurrent用法详解
我们都知道,在JDK1.5之前,Java中要进行业务并发时,通常需要有程序员独立完成代码实现,当然也有一些开源的框架提供了这些功能,但是这些依然没有JDK自带的功能使用起来方便。而当针对高质量Java多线程并发程序设计时,为防止死蹦等现象的出现,比如使用java之前的wait()、notify()和synchronized等,每每需要考虑性能、死锁、公平性、资源管理以及如何避免线程安全性方面带来的转载 2012-08-29 11:44:54 · 4289 阅读 · 0 评论 -
Callable接口和Runnable接口
Callable接口和Runnable接口相似,区别就是Callable需要实现call方法,而Runnable需要实现run方法;并且,call方法还可以返回任何对象,无论是什么对象,JVM都会当作Object来处理。但是如果使用了泛型,我们就不用每次都对Object进行转换了。 Runnable和Callable都是接口不同之处:1.Callable可以返回一个类型V,而R转载 2012-08-21 12:43:30 · 916 阅读 · 0 评论 -
java Atomic 包实现
AtomicIntegergetAndSet:设置为新值,返回设置之前的值。此方法为原子性操作,即保证在得到当前值与设置新值之间,没有任何其他更新操作。1234567public final int getAndSet(int newValue) {for (;;) {int curre转载 2012-08-27 12:32:58 · 3486 阅读 · 0 评论 -
AbstractExecutorService 任务提交
现在可以来记录AbstractExecutorService的异步任务提交了,单刀直入吧,先看三个submit方法提交单个任务: Java代码 public Future submit(Runnable task) { if (task == null) throw new NullPointerException(); Runna转载 2012-09-06 13:12:55 · 74 阅读 · 0 评论 -
Hibernate的dialect汇总与各种数据库的JDBC连接
RDBMS方言DB2org.hibernate.dialect.DB2DialectDB2 AS/400org.hibernate.dialect.DB2400DialectDB2 OS390org.hibernate.dialect.DB2390DialectPostgreSQLorg.hibernate.dialect转载 2012-09-07 01:27:07 · 1259 阅读 · 0 评论 -
Core Java Concurrency 多线程小手册(基本涵盖多线程所有要点)
关于 Java Concurrency 自从Java诞生之时,Java 就支持并行的概念,比如线程和锁机制。这个教程帮助开发多线程Java程序员能够理解核心的Java并行理念以及如何使用他们。 内容涉及到Java语言中的线程, 重练级以及轻量级同步机制 以及JavaSE 5 中的锁,原子量 并行容器,线程调度 以及线程执行者。 开发人员使用这些知识能够开发好并发线程安全的Java 应转载 2012-09-06 13:09:31 · 1980 阅读 · 1 评论 -
Chapter 1. 使用Spring进行数据访问(Data Access With Spring)
目录(?)[-]统一的数据访问异常层次体系(Consistent Exception Hierarchy In Spring)DAO模式的背景(Background of the DAO Pattern)梦想照进现实(The reality of implementing the DAO pattern)发现问题,解决问题(How to get through?)不重新发明轮子(D转载 2012-09-15 11:26:46 · 5394 阅读 · 0 评论 -
java内存泄露解析
原因有很多种,比如:1.数据量过于庞大;死循环 ;静态变量和静态方法过多;递归;无法确定是否被引用的对象;2.虚拟机不回收内存(内存泄漏); 说白了就是程序运行要用到的内存大于虚拟机能提供的最大内存就发生内存溢出了。 内存溢出的问题要看业务和系统大小而定,对于某些系统可能内存溢出不常见,但某些系统还是很常见的解决的方法,一个是优化程序代码,如果业务庞大,逻辑复杂,尽量减少全局转载 2013-05-15 10:04:18 · 493 阅读 · 0 评论