java小码农,先从事apm开发
功能描述 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 常见用法 多个人等一个信号后继续执行操作。例如5个运动员,等一个发令员的枪响。 一个人等多个人的信号。
从classloader的变更谈到锁分离
我的博客即将入驻“云栖社区”,诚邀技术同仁一同入驻。
场景分析 现场环境中,造成gc频繁的可能性之一就是通过system.gc主动调用了gc。这种情况出现在开发人员业务代码,或者是jdk自身的代码中(例如nio)。
简易的btrace需求 偶现的方法执行慢,我们是可以用jstack捕捉到的,但是慢到什么地步却是不一定知道的,现在就需要在不重启应用的情况下,获取方法执行的时间。
字节码加密的需求 java的字节码是可以反编译的,所以很多时候,做商用产品的时候,防止别人看你的核心代码是一个必要手段,字节码加密的需求就诞生了,本质就是防止别人反编译看代码。
堆的特点 堆是一种完全二叉树的模拟,堆一般是基于数组的实现,堆分大顶堆和小顶堆,大顶堆就是堆顶是最大的数据,然后子节点总比父节点小,小顶堆则反过来。java中的优先队列就是一个小顶堆的实现。
生产环境最多的几种事故之一就是程序执行慢,如果是web服务的话,表现就是响应时间长。本文分享,从业多年形成的排查守则。 诊断步骤 系统资源查看 首先是系统资源查看,而且必须是在第一步。
代理模式 代理模式是非常常见的设计模式,在功能增强方面使用的特别明显,例如数据库连接池会使用代理连接代理真实的物理连接,以达到close只是归还到池中而不是真实关闭的效果。
今天在网上看到一个问题,问除了加锁之外有没有其他方法来保证线程安全。楼下很多回答copyonwrite机制。这个问题回答有很多,但是copyonwrite的回答有点误导人。
谈到ArrayBlockingQueue的特色就是循环队列,然后一把锁,2个条件,完成了功能。本来以为LinkedBlockingQueue也是这样的,结果和预期不一样,LinkedBlockingQueue利用了链表的特点,使用了两把锁,两个条件来控制。
ArrayBlockingQueue是常用的线程集合,在线程池中也常常被当做任务队列来使用。使用频率特别高。他是维护的是一个循环队列(基于数组实现),循环结构在数据结构中比较常见,但是在源码实现中还是比较少见的。
hs_err_pid简介 hs_err_pid.log是java程序发生core的时候产生的文件,里面有当时出错时jvm的执行情况。 排查方法 头文件解读可以查看问题 头文件包含了简单的信息阐述,里面就core掉的原因 # # An unexpecte...
第一次学习java的时候,学习到IO的时候总感觉很奇怪,他有三个基本字节流文件IO类,FileInputStream,FileOutputStream,RandomAccessFile。
看了《深入理解java虚拟机》java与线程一章提到了linux提供的线程模型是一对一的。我也写过一段linux c,当时开辟多线程也就是调用了pthread_create的库函数。
很多情况下,不得以必须写个classloader来满足需求。例如你一个工程里你想用相同的数据库的多个版本,自己制定了一个jar包目录,没有classloader管理等等。
场景介绍 使用过was的时候,我们常见的建立数据源时有一个验证数据库信息的正确性的按钮。但是如果没有相应的驱动包的时候,校验是失败的,如果想校验成功,那就加入对应的数据库驱动包即可,但是was本身并不是热部署的,要想验证那就必须重启was。
问题场景 现在很多工程为了功能扩展,都给出了插件化的方式。只需要用户配置好配置文件,提供好需要的jar包,就能完成响应功能。本文说一下,数据转存数的功能实现。
很多人说自己看过java源码,估计这个是个盲点,知道了感觉确实用处不大,不过见还真有人问,这里就简述一下。他的主要算法就是 public int hashCode() { int h = hash; if (h == 0 && value.
java string比较时必须使用equals,这是一个定论,但是要了解这个规则确实需要不少知识。不少书上告诉你==只能比较地址,地址不一样,那就是false,string存在着相同字面量不同地址的问题。
线程安全性 说道有关string的线程安全性,大家想到的肯定时stringbuffer和stringbuilder。现在问一句string的大家就可能突然发蒙。