Java语言
文章平均质量分 80
java 知识
lxlmycsdnfree
脑科学爱好者,物理爱好者,计算机从业者
展开
-
35 个 Java 代码性能优化总结!搞Android的你更需要
不建议在程序运行过程中使用尤其是频繁使用反射机制,特别是Method的invoke方法,如果确实有必要,一种建议性的做法是将那些需要通过反射加载的类在项目启动的时候通过反射实例化出一个对象并放入内存—-用户只关心和对端交互的时候获取最快的响应速度,并不关心对端的项目启动花多久时间。我们想,如果没有修改过的代码,万一XXX.close()抛异常了,那么就进入了cath块中了,YYY.close()不会执行,YYY这块资源就不会回收了,一直占用着,这样的代码一多,是可能引起资源句柄泄露的。原创 2024-09-20 12:56:05 · 1290 阅读 · 0 评论 -
35 个 Java 代码性能优化总结!搞Android的你更需要
不建议在程序运行过程中使用尤其是频繁使用反射机制,特别是Method的invoke方法,如果确实有必要,一种建议性的做法是将那些需要通过反射加载的类在项目启动的时候通过反射实例化出一个对象并放入内存—-用户只关心和对端交互的时候获取最快的响应速度,并不关心对端的项目启动花多久时间。我们想,如果没有修改过的代码,万一XXX.close()抛异常了,那么就进入了cath块中了,YYY.close()不会执行,YYY这块资源就不会回收了,一直占用着,这样的代码一多,是可能引起资源句柄泄露的。原创 2024-01-04 18:22:17 · 471 阅读 · 0 评论 -
递归统计
实现多叉树聚合统计:每一个节点包含用户信息,统计包含的用户总数(节点的用户总数是下面所有子节点的聚合统计)首先挂所有的数据:private void traverseChild (List<Department> parentList, List<Department> allChild, Map<Long, Department> mapNode) { for(int i = 0; i < parentList.size(); i++) {原创 2020-10-26 13:39:52 · 453 阅读 · 0 评论 -
HashMap和HashSet的内部工作机制
java 的比较基础的功底就是对于java的集合类底层实现和原理的掌握!!!(不可轻视)-----------------------------------------------hashmap存储原理-------------------------------------------案例代码: HashMap hashMap = new HashMap();//line1 h...原创 2018-04-02 11:11:33 · 578 阅读 · 1 评论 -
就是要你懂 Java 中 volatile 关键字实现原理
前言我们知道volatile关键字的作用是保证变量在多线程之间的可见性,它是java.util.concurrent包的核心,没有volatile就没有这么多的并发类给我们使用。本文详细解读一下volatile关键字如何保证变量在多线程之间的可见性,在此之前,有必要讲解一下CPU缓存的相关知识,掌握这部分知识一定会让我们更好地理解volatile的原理,从而更好、更正确地地使用volatile关键...转载 2018-03-30 16:13:07 · 263 阅读 · 0 评论 -
用 JMX 检测应用程序
有多少次您曾经注视着运行中的应用程序,问自己:“它到底在做什么?为什么用了这么长时间呢?” 在这些时刻,您可能会想如果自己在应用程序中构建了更多的监视功能就好了。例如,在服务器应用程序中,能够查看排队等候处理的任务的数量和类型、当前正在处理的任务、过去一分钟或一小时内的吞吐量统计、平均任务处理时间等。这些统计值容易搜集,但是在需要数据的时候,如果没有非侵入性的数据检索机制,那么这些值就不太有用。可...转载 2018-03-02 09:37:18 · 641 阅读 · 0 评论 -
JAVA消息服务JMS规范及原理详解
一、简介JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。JMS允许应用程序组件基于JavaEE平台创建、发送、接收和读取消息。它使分布式通信耦合度更低,消息服务...转载 2018-03-01 21:20:06 · 584 阅读 · 0 评论 -
深究Java中的RMI底层原理
原博客地址:http://blog.csdn.net/sinat_34596644/article/details/52599688前言:随着一个系统被用户认可,业务量、请求量不断上升,那么单机系统必然就无法满足了,于是系统就慢慢走向分布式了,随之而来的是系统之间“沟通”的障碍。一般来说,解决系统之间的通信可以有两种方式:即远程调用和消息。RMI(Remote Method Invocation)...转载 2018-03-01 21:16:45 · 747 阅读 · 1 评论 -
对java注解的深入理解
什么是注解,注解的出现是要解决什么问题?使用Annotation之前(甚至在使用之后),XML被广泛的应用于描述元数据。不知何时开始一些应用开发人员和架构师发现XML的维护越来越糟糕了。他们希望使用一些和代码紧耦合的东西,而不是像XML那样和代码是松耦合的(在某些情况下甚至是完全分离的)代码描述。如果你在Google中搜索“XML vs. annotations”,会看到许多关于这个问题的辩论原创 2018-01-29 20:54:52 · 2008 阅读 · 1 评论 -
Java中hashCode()方法以及HashMap()中hash()方法
Java的Object类中有一个hashCode()方法:public final native Class<?> getClass(); public native int hashCode(); public boolean equals(Object obj) { return (this == obj); } public String toString() {...转载 2018-04-02 15:50:23 · 2754 阅读 · 0 评论 -
java Thread sleep 和obj.wait,以及sychronized,minor源码
sleep()方法是Thread类里面的,主要的意义就是让当前线程停止执行,让出cpu给其他的线程,但是不会释放对象锁资源以及监控的状态,当指定的时间到了之后又会自动恢复运行状态。wait()方法是Object类里面的,主要的意义就是让线程放弃当前的对象的锁,进入等待此对象的等待锁定池,只有针对此对象调动notify方法后本线程才能够进入对象锁定池准备获取对象锁进入运行状态。在JAVA中,是没有类...原创 2018-04-03 18:01:38 · 601 阅读 · 1 评论 -
java 中iterator 和 collection接口源码
iterator接口和具体的容器中实现的iterator 对象(以ArrayList为例)iterator:public interface Iterator<E> { boolean hasNext(); E next(); default void remove() { throw new UnsupportedOperation...转载 2018-04-24 17:22:57 · 280 阅读 · 0 评论 -
Thread 中 ThreadLocal 源码解读
先了解一下ThreadLocal类提供的几个方法:public T get() { }public void set(T value) { }public void remove() { }protected T initialValue() { }get()方法是用来获取ThreadLocal在当前线程中保存的变量副本,set()用来设置当前线程中变量的副本,remove()用来移除当前线...原创 2018-06-05 10:42:49 · 240 阅读 · 0 评论 -
Thread Join 讲解
Thread Join 简单理解就是等待被调用join的线程先执行完,再执行;或者并发线程串行化。不要轻易的使用join否则严重降低线程并发性能;jdk 并不建议使用join。jdk 解释join原文:public final void join() throws InterruptedException Waits for this thread to die. Throws: Interrup...原创 2018-06-05 13:37:17 · 156 阅读 · 0 评论 -
java 调优参数 newRatio, survivorRatio
-XX:NewRatio新生代(Eden + 2*S)与老年代(不包括永久区)的比值;要求比较的搞得吞吐量(避免较多的fullGC)4 表示新生代 :老年代 = 1:4 ,意思是老年代占 4/5-XX:SurvivorRatio2个Survivor区和Eden区的比值8 表示 两个Survivor : Eden = 2: 8 ,每个Survivor占 1/10主要讲解如何为...原创 2019-04-22 19:19:24 · 4977 阅读 · 0 评论 -
java 正则表达
正则表达式(英语:RegularExpression)原属于计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里边,正则表达式通常被用来检索、替换那些符合某个模式的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,Perl,Shell,R,Java等等。 元字符 描述 \ ...原创 2019-05-16 17:12:03 · 540 阅读 · 0 评论 -
JAVA 并发与锁机制原理
Lock完全用Java写成,在java这个层面是无关JVM实现的。在java.util.concurrent.locks包中有很多Lock的实现类,常用的有ReentrantLock、ReadWriteLock(实现类ReentrantReadWriteLock),其实现都依赖java.util.concurrent.AbstractQueuedSynchronizer类,实现思路都大同小异,...原创 2018-01-03 09:34:33 · 1128 阅读 · 0 评论 -
java8新特性简述
Java8发布时间是2014年3月19日,距离今日已经很久了,那么Java8新特性你了解吗?java8是Java的一次重大升级,巨大的里程碑式的改进!!Java语言新特性:1.与传统结合 -- Lambda(闭包)表达式和函数式接口Lambda表达式(也称为闭包)是Java 8中最大和最令人期待的语言改变。它允许我们将函数当成参数传递给某个方法,或者把代码本身当作数据处理:原创 2017-03-30 16:41:22 · 1363 阅读 · 0 评论 -
java 基础知识部分提炼
People p = new People (); 和 Poeple p; 前者是在堆上面创建了内存空间而且p指向了该空间。后者只是一个空指针,没有指向任何存储地址。如果 将上述的p = man;那么前者和后者就都一样了,只是第一种方式声明的对象空间被丢弃,在垃圾回收的时候被释放回收。原创 2017-03-20 18:18:05 · 400 阅读 · 0 评论 -
Java GC原理简单讲解
了解GC,首先需要了解jvm,之前写过关于虚拟机的文章《》其次就是了解设置jvm内存参数和设置方法,这也写过文章《》再者就是了解jvm中有几种GC以及启动方法,也有写过文章《》;但是为什么jvm中有好几款GC呢?你可以这样思考:如果你是jvm的开发者,jvm中要嵌入自己的GC算法。你开发出来的jvm可能需要跑在单cpu的PC上,也有可能跑在多CPU集群的服务器上,也有可能被用来开发大型的应原创 2017-03-29 11:43:50 · 837 阅读 · 0 评论 -
读《深入jvm原理》之class文件
class文件是什么?? 是二进制文件,是被jvm识别的二进制文件。这是Java初学者的回答。较为深入的学习者,可能会给出跨语言编程的概念和实现,class文件就是一个跨语言的实现的第一步,也是动态修改整理已完成编码的代码,去生成新代码的指令的划时代编程的第一步(动态类生成技术)。动态生成类技术:class文件是一种8位字节的二进制流文件, 各个数据项按顺序原创 2017-05-08 10:38:20 · 674 阅读 · 0 评论 -
Java 动态代理与class字节码动态修改技术
代理分两种技术,一种是jdk代理(机制就是反射,只对接口操作),一种就是字节码操作技术。前者不能算技术,后者算是新的技术。未来将有大的动作或者较为广泛的应用和变革,它可以实现代码自我的编码(人工智能,代码智能)。先看看jvm class技术:字节码改写:(一)jdk 动态代理:1.定义业务逻辑public interface Service { //原创 2017-05-08 11:08:30 · 8081 阅读 · 0 评论 -
Java顶尖程序员需要看的书
《深入理解Java虚拟机:JVM高级特性与最佳实践》如果你不满足于做一个只会写if…else…的Java程序员,而是希望更进一步,我随便举几个例子吧:1、了解Java代码的底层运行机制2、定位性能问题3、对整个系统进行性能调优4、解决各种奇奇怪怪的线上线下问题5、更加高级别的,为自己的项目量身定做一款适合自己项目的虚拟机那 么Java转载 2017-06-06 11:49:27 · 438 阅读 · 0 评论 -
java 类加载器加载顺序 经典例子
写了一个string 类,和api中包名,类名都是一样的,然后去加载: 1 package java.lang;2 public class String{3 public static void main(String[] args ){ 4 }5 } 大家发现什么不同了吗?对了,我们写了一个与JDK中String一模一样的类,连包java.lang都一转载 2017-06-02 10:36:23 · 2159 阅读 · 0 评论 -
实例解析Java class文件格式
1)Class文件是有8个字节为基础的字节流构成的,这些字节流之间都严格按照规定的顺序排列,并且字节之间不存在任何空隙,对于超过8个字节的数据,将按 照Big-Endian的顺序存储的,也就是说高位字节存储在低的地址上面,而低位字节存储到高地址上面,其实这也是class文件要跨平台的关键,因为 PowerPC架构的处理采用Big-Endian的存储顺序,而x86系列的处理器则采用Little-En原创 2017-06-30 10:50:36 · 854 阅读 · 0 评论 -
Java类和对象初始化
首先对Java 较为深层技术提几个问题(包含class 文件格式的了解):1.类的访问权限在class二进制文件中怎么体现的?2.类中static 区域 怎么初始化的,时间,顺序,特点是什么?3.jvm pc 程序计数器(寄存器) 会不会出现OOM问题?4.类中成员方法和成员变量有没有最大个数限制?5.类装载是一次性全加载的吗,还是动态的?6.jvm 本地方法栈是什么?原创 2017-06-30 15:12:46 · 431 阅读 · 0 评论 -
java 线程池 -- (Java并发)
池技术是作为一个架构师必须深刻理解的东西,比如线程池,连接池,对象池,内存池等。首先需要问一个问题:在c/c++ 编程中,你是如何操作一个任务的或者给一个线程添加任务的?如果你很清楚,那么你知道Java中runnable和thread的区别吗?Java中没有指针,那么没有办法给一个线程直接传方法指针(传递方法,作为任务),那么直接可以传对象,Runnable对象。线程拿到runnable对象的时候...原创 2017-03-30 12:52:45 · 289 阅读 · 0 评论 -
Linux下建立多实例Tomcat(独立JVM)
说明:本文参照了以下文章:http://apps.hi.baidu.com/share/detail/24999679近期因为客户较多,发现在同一台服务器上由于Lerx V2版本不同,导致了Web应用出错。分析原因,发现是由于所有WEB应用共享同一Tomcat进程,而用户类(WEB-INF/classes)下的类文件同名但内容并不相同导致冲突。因此考虑在linux环境下采用独立jv原创 2017-08-25 10:33:51 · 1372 阅读 · 0 评论 -
java中File类的getPath(),getAbsolutePath(),getCanonicalPath()区别
getPath()这个是获取定义时的路径,这个没有什么争议的。getAbsolutePath()这个是获取绝对路径也就是其父路径 + “定义时的路径”,不会处理".\\","..\\" getCanonicalPath()获取规范化的绝对路径,会处理".\\","..\\" 等public class mymain { public static void main原创 2017-09-03 14:34:36 · 478 阅读 · 0 评论 -
-XX:+PrintGCTimeStamps -XX:+PrintGCDetails 日志分析
-XX:+PrintGCTimeStamps输出格式:289.556:[GC[PSYoungGen:314113K->15937K(300928K)]405513K->107901K(407680K),0.0178568secs][Times:user=0.06sys=0.00,real=0.01secs]293.271:[GC[PSYoungGen...原创 2017-10-26 17:41:56 · 18994 阅读 · 5 评论 -
Java中的ArrayList的初始容量和容量分配
List接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。ArrayList继承于List接口,除继承过来的方法外,还提供一些方法来操作内部用来存储列表的数组的大小。每个ArrayList实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增长。并未指定增长策略的细节,因为...原创 2017-10-30 10:37:35 · 325 阅读 · 0 评论 -
运行java 异常,但是异常并没有 打印,说明 异常没有被捕获
Map paramMap = new HashMap(); paramMap.put("start_time", begain); paramMap.put("end_time", end); try{ listKeys = baseDao.queryForList("cisonar.get_JenksJobKey", paramMap,原创 2017-11-01 16:34:36 · 2182 阅读 · 1 评论 -
Java object方法与GC回收
Object 中的方法:finalize()//清除资源hashcode()//获取hashcodetoString();notify()//唤醒对该对象监视的线程,该方法和wait()正好相反互补,wait和notify方法在线程同步上使用,防止数据污染,数据同步等。wait()//暂时挂起调用该对象的线程getClass()//获取对象的类名clone()//复制和原创 2017-03-15 18:29:30 · 965 阅读 · 0 评论