- 浏览: 5705 次
最新评论
文章列表
分布式设计与开发中有些疑难问题必须借助一些算法才能解决,比如分布式环境一致性问题,感觉以下分布式算法是必须了解的(随着学习深入有待添加):
Paxos算法
一致性Hash算法
Paxos算法
1)问题描述
分布式中有这么一个疑难问题,客户端向一个分布式集群的服务端发出一系列更新数据的消息,由于分布式集群中的各个服务端节点是互为同步数据的,所以运行完客户端这系列消息指令后各服务端节点的数据应该是一致的,但由于网络或其他原因,各个服务端节点接收到消息的序列可能不一致,最后导致各节点的数据不一致。举一个实例来说明这个问题,下面是客户端与服务端的结构图:
当client1、cli ...
分布式环境中大多数服务是允许部分失败,也允许数据不一致,但有些最基础的服务是需要高可靠性,高一致性的,这些服务是其他分布式服务运转的基础,比如naming service、分布式lock等,这些分布式的基础服务有以下要求:
高可用性
高一致性
高性能
对于这种有些挑战CAP原则 的服务该如何设计,是一个挑战,也是一个不错的研究课题,Apache的ZooKeeper也许给了我们一个不错的答案。ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务, 它暴露了一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。关于ZooKeeper更多信息可以参 ...
在IDF05(Intel Developer Forum 2005)上,Intel首席执行官Craig Barrett就取消4GHz芯片计划一事,半开玩笑当众单膝下跪致歉,给广大软件开发者一个明显的信号,单纯依靠垂直提升硬件性能来提高系统性能的时代已结束,分布式开发的时 ...
JVM学习笔记(四)------内存调优(转)
- 博客分类:
- JVM
首先需要注意的是在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提供的内存查看工具,比如JConsole和Java VisualVM。
对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数,过多的GC和Full GC是会占用很多的系统资源(主要是CPU),影响系统的吞吐量。特别要关注Full GC,因为它会对整个堆进行整理,导致Full GC一般由于以下几种情况:
旧生代空间不足调优时尽量让对象在新生代GC时被回收、让对象在新生代多存 ...
JVM内存组成结构
JVM栈由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示:
1)堆
所有通过new创建的对象的内存都在堆中分配,其大小可以通过-Xmx和-Xms来控制。堆被划分为新生代和旧生代,新生代又被进一步划分为Eden和Survivor区,最后Survivor由From Space和To Space组成,结构图如下所示:
新生代。新建的对象都是用新生代分配内存,Eden空间不足的时候,会把存活的对象转移到Survivor中,新生代大小可以由-Xmn来控制,也可以用-XX:SurvivorRatio来控制Eden和Survivor的比例
旧生代。用于存放新生代 ...
Java代码编译是由Java源码编译器来完成,流程图如下所示:
Java字节码的执行是由JVM执行引擎来完成,流程图如下所示:
Java代码编译和执行的整个过程包含了以下三个重要的机制:
Java源码编译机制
类加载机制
类执行机制
Java源码编译机制
Java 源码编译由以下三个过程组成:
分析和输入到符号表
注解处理
语义分析和生成class文件
流程图如下所示:
最后生成的class文件由以下部分组成:
结构信息。包括class文件格式版本号及各部分的数量与大小的信息
元数据。对应于Java源码中声明与常量的信息。包含类/继承的超 ...
从Java平台的逻辑结构上来看,我们可以从下图来了解JVM:
从上图能清晰看到Java平台包含的各个逻辑模块,也能了解到JDK与JRE的区别
对于JVM自身的物理结构,我们可以从下图鸟瞰一下:
对于JVM的学习,在我看来这么几个部分最重要:
Java代码编译和执行的整个过程
JVM内存管理及垃圾回收机制
下面将这两个部分进行详细学习
Section 1:类和对象的生命周期
装载
连接(验证、准备、解析)
初始化
类只有在被主动使用的时候才会初始化,主动初始化有6中情况:
创建某个类的新实例。(new或者反射、反序列化等)
调用某个类的静态方法。
调用类或者接口的静态字段。final的静态字段除外,任何对final的静态字段引用都会直接被编译器优化成相应的值。
使用反射
初始化某个子类时,要求超类必须初始化。此规则不适用于接口:子接口初始化时,只有使用到父接口的非常量字段时,父接口才会初始化。
虚拟机启动时,被包含为启动类的类(即包含main方法的)。
一.装载
通过全限定类名,将clas ...
一.JVM的三大组成部分
VM Runtime
GC
JIT
VM Runtime
(一).命令行选项 Command Line Options
命令行选项分为三种
标准选项。在JVM规范中定义的选项,所有虚拟机实现都必须遵循。
非标准选项(非标准)。 以-X开头的参数。
开发者选型(非标准)。 以-XX开头的参数。
对于开发者选项,可以通过 +或者
线程安全性
要编写线程安全的代码,其核心在于要对状态访问操作进行管理,特别是共享的和可变状态的访问。
Java的主要同步机制是关键字synchronized,它提供乐一种独占的加锁方式,意味着只有一个线程能持有这种锁。
即使每个操作是原子的,复合操作也不一定能保证原子性。
重入
重入意味着已经取得锁的线程,如果再次请求自己获得的锁,那么也是允许的。
重入的一种实现方法是,每个锁关联一个线程持有者和计数器。如果计数值为0时,锁将被释放。
对象的共享
使用同步可以避免多个线程在同一时刻访问相同的数据。
同步还有另外个重要方面,即保证内存可见性。我们不仅希望某个线程正在使用对象状 ...
ibatis一次来源于“internet”和“abatis”的组合,最初侧重于密码软件的开发,现在是一个机遇Java的持久层框架。
现在主流的ORM,无论Hibernate还是Apache OJB,都对数据库结构提供了较为完整的封装,提供了从POJO到数据库表的全套映 ...
BIT FLOAT CHAR TIMESTAMP OTHER UNDEFINED
TINYINT REAL VARCHAR BINARY BLOB NVARCHAR
SMALLINT DOUBLE LONGVARCHAR VARBINARY CLOB NCHAR
INTEGER NUMERIC DATE LONGVARBINARY BOOLEAN NCLOB
BI ...