设计模式
作者:小村长
疫情期间重新温习了一遍设计模式,期间查阅了很多博客学习了其他老师对于设计模式的见解。然后整理成笔记分享给大家,同时也非常欢迎大家指出笔记中有所欠缺的地方,希望本系列笔记能够对大家的工作和学习有所帮助。
什么是设计模式 模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案 软件设计的几大原则
影响垃圾收集性能的两个最重要因素是总的可用内存和专用于年轻代的内存比例。
关于这一点的讨论是关于串行垃圾收集器的。Java HotSpot虚拟机包含三种不同类型的垃圾收集器,每个收集器具有不同的性能特征。
原文始发于微信公众号(BeCoder):从创建对象到ConcurrentHashMap
其实创建对象与ConcurrentHashMap之间并没有必然联系,不过很多知识是环环相扣的,这篇文章权当做一次温习吧。
阅读全文带着问题,看源码针对性会更强一点、印象会更深刻、并且效果也会更好。所以我先卖个关子,提两个问题(没准下次跳槽时就被问到)。
Java SE平台的一个优点是他可以将开发人员从复杂的内存分配和垃圾收集中解放出来。
然而,当垃圾收集是主要的瓶颈时,理解垃圾收集实现的某些方面是很有用的。垃圾收集器对应用程序使用对象的方式进行猜想,这些猜想反应在可调参数中,这些参数可以在不牺牲抽象能力的情况下进行调整以提高性能。
人机工程学是Java虚拟机和垃圾收集探索式(例如基于行为的探索式算法)提高应用程序性能的过程。
Java虚拟机为垃圾收集器,堆大小和运行时编译器配置提供基于平台的默认选择。这些选择满足不同类型应用程序的需求,并且需要较少的命令行调优。此外,基于行为调优动态优化堆的大小,以满足应用程序特定的性能要求。
本节将介绍这些默认的选择和基于行为的调优。在使用后续章节中更加详细的控制配置前,请使用这些默认配置。
从小的桌面应用到大型服务器上的web应用,各种各样的应用程序都使用标准版Java平台(Java SE)。为了支持这一系列不同的部署,Java HotSpot VM提供了多个垃圾收集器,每个垃圾收集器都是为满足不同的需求而设计的。Java SE基于应用程序在计算机上运行的类选择最合适的垃圾收集器。然而,对于每个应用程序,此选择可能不是最优的。具备严格的性能目标或者其他需求的用户,开发人员和管理员可能需要显式地选择垃圾收集器并优化某些参数已达到渴望的性能级别。本文档提供了帮助显式完成优化任务的信息。
首先,垃圾收集器的一般特性和基础的调优选项将被描述通过串行垃圾收集器,然后介绍其他垃圾收集器的具体特性以及选择垃圾收集器时要考虑的因素。
通常Java开发人员喜欢使用同步代码编写程序,因为这种请求(request)/响应(response)的方式比较简单,并且比较符合编程人员的思维习惯;这种做法很好,直到系统出现性能瓶颈;在同步编程方式时由于每个线程同时只能发起一个请求并同步等待返回,所以为了提高系统性能,此时我们就需要引入更多的线程来实现并行化处理;但是多线程下对共享资源进行访问时,不可避免会引入资源争用和并发问题;另外操作系统层面对线程的个数是有限制的,不可能通过无限的增加线程数来提供系统性能;最后使用同步阻塞的编程方式还会导致浪费资源,比如发起网络IO请求时候,调用线程就会处于同步阻塞等待响应结果的状态,而这时候调用线程明明可以去做其他事情,等网络IO响应结果返回后在对结果进行处理。
阅读全文在单体应用时,不同业务模块部署在同一个JVM进程内,这时候通过本地调用就可以解决不同业务模块之间的相互引用;但多体应用时,不同业务模块大多部署到不同机器上,这时候一 个高效、稳定的RPC框架就显得特别重要了。Apache Dubbo作为阿里巴巴开源的分布式RPC框架,其已进入了Apache 孵化器项目,相信在开源社区的不断贡献下,其会成为RPC框架中的佼佼者。
阅读全文原文地址 作者:Jakob Jenkov 译者:小龙虾
Java的volatile关键字用于标记一个变量“应当存储在主存”。更确切地说,每次读取volatile变量,都应该从主存读取,而不是从CPU缓存读取。每次写入一个volatile变量,应该写到主存中,而不是仅仅写到CPU缓存。
实际上,从Java 5开始,volatile关键字除了保证volatile变量从主存读写外,还提供了更多的保障。我将在后面的章节中进行说明。
阅读全文作者:小村长
本项目是 周志明 老师写的《深入理解Java虚拟机》的读书笔记,也是我迄今为止读到的认为介绍JVM最好的一本书籍, 读了很多遍,每次都对JVM有新认识。本次笔记主要针对想了解JVM的同学,希望能够对大家的工作和学习有所帮助。
由于我也是第一次公开自己的读书笔记,还不是很深入,可能某些地方存在不足。希望大家有什么好的建议可以评价告诉我,我看到会尽力改进,力争能给大家提供优质的读书笔记。同时也希望有能力的同学也共享自己读书笔记方便大家交流学习。在此,我还是建议有时间的同学能够自己去看看周老师书籍。
Java不仅仅是一门编程语言,还是一个由一些列计算机软件和规范形成的技术体系
Sun定义的Java技术体系包括: – [x] Java程序设计语言 – [x] Java虚拟机 – [x] Class文件格式 – [x] Java API类库 – [x] Java类库
Java程序设计语言、Java虚拟机、Java API类库统称为JDK,JDK是用于Java程序开发的最小环境 <br/> Java API类库中的Java SE API子集和Java虚拟机统称为JRE,JRE是支持Java程序运行的标准环境
Java技术体系可分为四个平台: – Java Card:是一个让Java小程序(Applets)运行在小内存设备(智能卡等)的平台 – Java ME:这个平台支持的是在移动终端(手机平板等)运行Java程序 – Java SE:是一个支持桌面级应用程序(例如windows中的应用程序)的平台,提供了完整的Java核心API – Java EE: 是一个支持多层架构企业应用(例如企业资源计划的平台