2018年8月29日

摘要: 堆:顺序随意——引用类型的变量——存储引用类型变量的地址 栈:后进先出——值类型 堆和栈的区别 功能不同 栈内存用来存储局部变量和方法调用。 而堆内存用来存储Java中的对象。无论是成员变量,局部变量,还是类变量,它们指向的对象都存储在堆内存中。 共享性不同 栈内存是线程私有的。 堆内存是所有线程共 阅读全文
posted @ 2018-08-29 16:25 xiaowater 阅读(112) 评论(0) 推荐(0)
摘要: javadoc的缺点,javadoc不能强制说明某个类(或方法)应用场景以及缺陷,项目暴露出的功能和性能问题很多其实就是由于javadoc的自阐述性不够造成的,这是javadoc最大的败笔. JVM JRE JDK的关系 JVM:Java Virtual Machine —— 负责执行符合觃范癿Cl 阅读全文
posted @ 2018-08-29 16:24 xiaowater 阅读(351) 评论(0) 推荐(0)
摘要: 序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。 SerialVersionUid,简言之,其目的是序列化对象版本控制,有关各版本反序列化时是否兼容。如果 阅读全文
posted @ 2018-08-29 16:24 xiaowater 阅读(240) 评论(0) 推荐(0)
摘要: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 性能问题:用代码生成代替反射 具体方法: Class<?> clazz = obj.getCla 阅读全文
posted @ 2018-08-29 15:34 xiaowater 阅读(151) 评论(0) 推荐(0)
摘要: 按照代理的创建时期,代理类可以分为两种。 静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。 动态代理:在程序运行时,运用反射机制动态创建而成。 动态代理与静态代理类对照的是动态代理类,动态代理类的字节码在程序运行时由Java反射机制动态 阅读全文
posted @ 2018-08-29 15:33 xiaowater 阅读(124) 评论(0) 推荐(0)
摘要: Example: @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) Example: @Documented @Retention(RetentionPolicy.RUNTIME) @Target( 阅读全文
posted @ 2018-08-29 15:33 xiaowater 阅读(120) 评论(0) 推荐(0)
摘要: Java 的 I/O 类库的基本架构分成四组: 基于字节操作的 I/O 接口:InputStream 和 OutputStream 基于字符操作的 I/O 接口:Writer 和 Reader 基于磁盘操作的 I/O 接口:File 基于网络操作的 I/O 接口:Socket 前两组是根据传输数据的 阅读全文
posted @ 2018-08-29 15:32 xiaowater 阅读(104) 评论(0) 推荐(0)
摘要: 主线程:main()方法。 线程分为:用户线程和守候线程(setDaemon)。 主线程:main()方法。 线程分为:用户线程和守候线程(setDaemon)。 阻止线程执行: 1、睡眠 Thread.sleep静态方法强制当前正在执行的线程休眠(暂停执行),以“减慢线程”。 线程睡眠的原因:线程 阅读全文
posted @ 2018-08-29 15:25 xiaowater 阅读(258) 评论(0) 推荐(0)
摘要: WebService是一种远程调用的一种方案,是一种解决跨平台、跨语言间分布式系统的整合方案(socket),没有严格的客户端和服务端得界定 RMI跟WebService区别: RMI的客户端和服务端都必须是java,webservice没有这个限制 webservice是在http协议上传递xml 阅读全文
posted @ 2018-08-29 15:16 xiaowater 阅读(106) 评论(0) 推荐(0)
摘要: gc垃圾回收,整理内存 垃圾回收器只知道释放那些new分配的内存。 用于处理那些不是java创建对象的内存。 对新生代的GC 是轻量级的GC (又叫 minor GC)速度很快,一般零点几秒就完成了。 对旧生代的GC 是重量级得GC (又叫 full GC)速度很慢。触发情况: 旧生栈 内存使用达到 阅读全文
posted @ 2018-08-29 15:15 xiaowater 阅读(208) 评论(0) 推荐(0)
摘要: 当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序。下面通过两个例子分别用Comparable和Comparator实现对User对象中年龄排序。 1.通过实现Comparable接口,根据User的年龄进行排序。 阅读全文
posted @ 2018-08-29 15:14 xiaowater 阅读(98) 评论(0) 推荐(0)
摘要: java线程安全的两个主要点:java的内存模型,java的线程同步机制。参考:http://www.iteye.com/topic/806990 浅谈java内存模型 java的内存模型的两个主要问题:可见性和有序性。我们都知道计算机有高速缓存的存在,处理器并不是每次处理数据都是取内存的。 浅谈j 阅读全文
posted @ 2018-08-29 15:13 xiaowater 阅读(126) 评论(0) 推荐(0)
摘要: Shallow Clone:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象 在运行时刻,Object中的clone()识别出你要复制的是哪一个对象,然后为此对象分配空间,并进行对象的复制,将原始对 阅读全文
posted @ 2018-08-29 15:10 xiaowater 阅读(83) 评论(0) 推荐(0)
摘要: ConcurrentHashMap是一个支持高并发的高性能的HashMap实现,它支持完全并发的读以及一定程度并发的写,其关键在于使用了锁分离技术。 内部结构: 原理: ConcurrentHashMap定位一个元素的过程需要进行两次Hash操作,第一次Hash定位到Segment,第二次Hash定 阅读全文
posted @ 2018-08-29 15:09 xiaowater 阅读(108) 评论(0) 推荐(0)
摘要: 内置锁synchronized 显式锁Lock 1.ReentrantLock功能性方面更全面,比如时间锁等候,可中断锁等候,锁投票等,因此更有扩展性。在多个条件变量和高度竞争锁的地方,用ReentrantLock更合适,ReentrantLock还提供了Condition,对线程的等待和唤醒等操作 阅读全文
posted @ 2018-08-29 15:08 xiaowater 阅读(132) 评论(0) 推荐(0)
摘要: Class的装载分了三个阶段,loading,linking和initializing。 Class.forName(className) 实际上是调用Class.forName(className, true, this.getClass().getClassLoader())。 注意第二个参数, 阅读全文
posted @ 2018-08-29 15:08 xiaowater 阅读(83) 评论(0) 推荐(0)
摘要: Map接口: | + -- WeakHashMap: 以弱键 实现的基于哈希表的 Map。在 WeakHashMap 中,当某个键不再正常使用时,将自动移除其条 | 目。更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终 | 止,然后被回收。丢弃某 阅读全文
posted @ 2018-08-29 15:08 xiaowater 阅读(147) 评论(0) 推荐(0)
摘要: 阅读全文
posted @ 2018-08-29 15:07 xiaowater 阅读(92) 评论(0) 推荐(0)
摘要: 阅读全文
posted @ 2018-08-29 15:06 xiaowater 阅读(81) 评论(0) 推荐(0)
摘要: CyclicBarrier 一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它 阅读全文
posted @ 2018-08-29 15:03 xiaowater 阅读(95) 评论(0) 推荐(0)
摘要: 自定义线程池 //创建等待队列 BlockingQueue<Runnable> bqueue = new ArrayBlockingQueue<Runnable>(20); //创建一个单线程执行程序,它可安排在给定延迟后运行命令或者定期地执行。 ThreadPoolExecutor pool =  阅读全文
posted @ 2018-08-29 15:03 xiaowater 阅读(102) 评论(0) 推荐(0)
摘要: 常识: 1、JAVA中“=”操作只是将引用和某个对象关联,假如同时有一个线程将引用指向另外一个对象,一个线程获取这个引用指向的对象,那么他们之间不会发生ConcurrentModificationException,他们是在虚拟机层面阻塞的,而且速度非常快,几乎不需要CPU时间。 2、JAVA中两个 阅读全文
posted @ 2018-08-29 15:03 xiaowater 阅读(91) 评论(0) 推荐(0)
摘要: VM运行时数据区域: 1.程序计数器(Program Counter Register) 每一个Java线程都有一个程序计数器来用于保存程序执行到当前方法的哪一个指令,对于非Native方法,这个区域记录的是正在执行的VM原语的地址,如果正在执行的是Natvie方法,这个区域则为空(undefine 阅读全文
posted @ 2018-08-29 11:19 xiaowater 阅读(169) 评论(0) 推荐(0)
摘要: ReadWriteLock接口的核心方法是readLock(),writeLock()。实现了并发读、互斥写。但读锁会阻塞写锁,是悲观锁的策略。 公平性 非公平锁(默认),为了防止写线程饿死,规则是:当等待队列头部结点是独占模式(即要获取写锁的线程)时,只有获取独占锁线程可以抢占,而试图获取共享锁的 阅读全文
posted @ 2018-08-29 11:18 xiaowater 阅读(107) 评论(0) 推荐(0)
摘要: 磁盘 I/O 优化: 性能检测 而磁盘 I/O 通常都很耗时,我们要判断 I/O 是否是一个瓶颈,我们有一些参数指标可以参考: 如我们可以压力测试应用程序看系统的 I/O wait 指标是否正常,例如测试机器有 4 个 CPU,那么理想的 I/O wait 参数不应该超过 25%,如果超过 25% 阅读全文
posted @ 2018-08-29 11:18 xiaowater 阅读(175) 评论(0) 推荐(0)
摘要: Listener 整个Tomcat 服务器中 Listener 使用的非常广泛,它是基于观察者模式设计的,Listener 的设计对开发 Servlet 应用程序提供了一种快捷的手段,能够方便的从另一个纵向维度控制程序和数据。 它们基本上涵盖了整个 Servlet 生命周期中,你感兴趣的每种事件。这 阅读全文
posted @ 2018-08-29 11:04 xiaowater 阅读(125) 评论(0) 推荐(0)
摘要: Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取到内存中。 类装载方式分为: 隐式装载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中。 显式装载, 通过class.f 阅读全文
posted @ 2018-08-29 11:03 xiaowater 阅读(108) 评论(0) 推荐(0)
摘要: getWriter() has already been called for this response reason: getWriter和getOutputStream(chain.doFilter(request, response);) 二者只能选其一,调用了其中一个就不能调用另一个了 3 阅读全文
posted @ 2018-08-29 10:40 xiaowater 阅读(92) 评论(0) 推荐(0)
摘要: 1、QPS:系统每秒处理的请求数(query per second) 2、RT:系统的响应时间,一个请求的响应时间,也可以是一段时间的平均值 3、最佳线程数量:刚好消耗完服务器瓶颈资源的临界线程数 ? QPS和RT的关系: 对于单线程:QPS=1000/RT 对于多线程:QPS=1000*线程数量/ 阅读全文
posted @ 2018-08-29 10:39 xiaowater 阅读(189) 评论(0) 推荐(0)
摘要: webservice接口抛出异常一定要用checked exception,最好不要用exception用resultdto 线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,规避资源耗尽的风险。 高并发时,同步调用应该去考量锁的性能损耗。能用无锁数据结构 阅读全文
posted @ 2018-08-29 10:34 xiaowater 阅读(133) 评论(0) 推荐(0)
摘要: 锁(lock)作为用于保护临界区(critical section)的一种机制,被广泛应用在多线程程序中。 竞争锁是造成多线程应用程序性能瓶颈的主要原因! 区分竞争锁和非竞争锁对性能的影响非常重要。如果一个锁自始至终只被一个线程使用,那么 JVM 有能力优化它带来的绝大部分损耗。如果一个锁被多个线程 阅读全文
posted @ 2018-08-29 10:33 xiaowater 阅读(182) 评论(0) 推荐(0)

导航