类加载子系统
整体流程图
ClassLoader作用
类加载子系统负责从文件或者网络中加载class文件,class文件在文件开头有特定的文件标识。
ClassLoader只负责class文件的加载,至于它是否可以运行,则又Excution Engine决定
加载的类信息存放于称为方法区的内存空间,除了类的信息外,方法区还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是class文件中常量池部分的内存映射)
ClassLoader的角色
class file存在于本地磁盘上,可以理解为设计师画在纸上的模版,而最终这个模版在执行的时候,需要加载到jvm当中来,根据这个文件实例化出n个一模一样的实例
class file加载到jvm中,被称为DNA元数据模板,存在方法区
在class文件->JVM->元数据模板,这个过程中需要一个运输工具扮演快递员的角色,就是我们的类加载器Class Loader。
类的加载过程
第一步:加载 Loading
通过一个类的全限定名获取此类的二进制字节流
将这个字节流所代表的静态 ...
jvm运行时数据区
架构图
线程共享数据区堆用于存放对象实例堆本身没有分区,所有的分区方法都只是逻辑分区,仅用于帮助理解,如:GC分为新生代、老年代、永久代、Eden等,线程可以有线程缓冲区堆内存在物理上可以是不连续的,逻辑上连续即可。
方法区用于存储被虚拟机加载的类型信息、常量、静态变量、即时编译后的代码缓存等数据。
方法区容易和“永久代”混淆老版本中,为了方便,用堆的永久代方法实现方法区java8中,完全舍弃永久代,用元空间实现方法区
永久代的约束宽松不需要连续内存空间可以固定大小,也可以可扩展可以不实现垃圾回收(可能会导致内存溢出)
运行时常量用于存储编译时期生成的各种字面量与符号引用具有动态性:不一定只有编译器生成,运行期间可新增,如:string的intern()方法
线程私有内存程序计数器线程所执行的字节码的行号指示器
java虚拟机栈描述Java方法执行的内存模型方法被执行时,创建一个栈帧,用于存储局部变量表、操作数栈、动态连接、方法出口灯信息。局部变量表存基本数据类型,对象只保存指针局部变量表数量在编译时确定,运行时数量一旦分配不会改变方法执行完毕,出栈
本地方法栈 ...
读书笔记--《大象:Thinking in UML》
中国象棋,只有32棵棋子,规则简单,但水平高低之间,不在于是否掌握了马走日象走田。正如UML,简单说只有元素、视图与模型,但水平高低之间,绝不在于谁能在视图之上画出各种元素堆积的模型,而是在于谁能够借助UML提供的这些工具,灵活自如地为复杂项目的开发提供一个成熟的、统一的、系统的、广泛适用的系统分析设计与建模方法,即软件的统一过程。
老子说,大象希形,大音希声。我的理解大概是,象至极大,形之其次;音至极美,声之其次;器至极巧,工之其次。能把UML讲得如蛋清般清沏,已属罕见,在读完这本书之后,又突然发现已然把朝夕膜拜的RUP之精髓收于囊中,同时让开发框架、软件架构、设计模式、分析、设计与建模等庞大而复杂的概念,再也不像如鲠在喉,真的难以形容这是一种多么美妙的感觉。之余,不得不叹服作者功力之厚、思想之深、语言之美、构思之巧,一切莫不象至极大,故此书第一版,命名为《大象》。
古人将知识分为“技”和“道”,习技固然可以成为人杰,而悟道才能羽化升仙。
人类自从有思想以来,就在不断探寻和认识自己所生活的这个世界。从本质上说,面向过程和面向对象都是人们认识这个世界的方法;而具体的技术, ...
SpringMVC + WebSocket 实现群聊
用SpringMVC+WebScoket技术,实现群聊功能
1 新建项目1、 新建一个空的Maven项目
2、 在pom.xml文件中加入以下依赖:
123456789101112131415161718192021222324252627282930313233343536<properties> <spring.version>5.1.5.RELEASE</spring.version></properties><dependencies> <!--SpringMVC依赖包--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> < ...
Volatile可见性代码验证
Volatile可见性是指:在JMM模型中,所有的线程操作数据时,都不能直接操作主内存里的数据,都需要将数据复制一份到线程内存中,只能修改线程内存中的数据(详细可以查找JMM相关知识)。然而,在一个线程中修改了某一个变量的值之后,应该立即将线程内存中修改的值,同步到主内存中,并通知其他线程,让其他线程重新获取变量值。
1、正确的样例代码1、 首先定义一个数据类这里有两个变量,一个用volatile修饰,另一个没有;
12345678910public class MyData { int number1 = 0; volatile int number2 = 0; public void add(){ this.number1 = 11; this.number2 = 22; }}
2、 新建一个测试类,内容如下,
12345678910111213141516171819202122232425262728import java.util.concurrent.TimeUnit;publ ...
Java操作HDFS示例
1. 环境准备
大数据集群一套,没有的可以自己本地搭建一套(参考地址:https://www.jianshu.com/p/2c2ae6490fa0)
本地安装JDK
本地安装IDEA或者Eclipse
2. 创建Maven项目在IDEA工具中创建一个maven项目,并在pom.xml中添加以下依赖:
12345678910111213141516171819202122232425262728293031323334<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>RELEASE</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4 ...
Hadoop的配置文件与三种运行模式
1. 配置文件简介首先,在hadoop官网中可以看到,hadoop有四个核心模块,如下图:
Hadoop Common (公共的工具,为其他模块提供支撑)
Hadoop Distributed File System (HDFS) (是一个分布式文件系统,提供高吞吐量数据存储)
Hadoop YARN (是一框架,负责任务调度和集群资源管理)
Hadoop MapReduce (负责大数据集合的并行计算)
然而,我们安装完Hadoop的安装包后,在etc/hadoop目录中,可以看到全部的配置文件如下
123456789101112131415161718192021222324252627282930313233343536[root@hadoop101 hadoop]# pwd/opt/module/hadoop-2.7.2/etc/hadoop[root@hadoop101 hadoop]# lltotal 156-rw-r--r--. 1 10 ...
Hadoop伪分布式环境配置与启动
1. 环境准备在一台linux机器上,安装好hadoop运行环境,安装方式请查看:HADOOP运行环境搭建
2. 启动HDFS并运行MapReduce程序2.1. 配置集群1. 配置:hadoop-env.shLinux系统中获取JDK的安装路径:
12[root@ hadoop101 ~]# echo $JAVA_HOME/opt/module/jdk1.8.0_144
编辑hadoop-env.sh,修改hadoop-env.sh中的JAVA_HOME 路径:
1export JAVA_HOME=/opt/module/jdk1.8.0_144
2. 配置:core-site.xml首先文件的存取目录不能停留在本地,要用HDFS上的文件,就需要配置HDFS的NameNode的地址。所以需要在core-site.xml中增加以下配置
12345678910<!-- 指定HDFS中NameNode的地址 --><property><name>fs.defaultFS</name> <value>hdfs://hadoop101 ...
Hadoop的单机模式和官方示例
一、 单机模式说明
单机模式是Hadoop的默认模式。又称本地模式、独立模式等。因为不需要与其他节点交互,单机模式就不使用HDFS,也不加载任何Hadoop的守护进程。该模式主要用于开发调试MapReduce程序的应用逻辑。
1. 环境准备在一台linux机器上,安装好hadoop运行环境,安装方式请查看:HADOOP运行环境搭建
2. 配置说明首先说明,**单机模式在安装之后不需要修改任何配置,配置文件为空即可!**之所以单机模式不需要任何配置文件,是因为配置文件不配置时,系统默认值即为单机模式所需
配置文件名
配置项
配置项含义
默认值
默认值含义
core-site.xml
fs.defaultFS
默认文件系统的名称,可以是HDFS的NameNode地址或者本地
file:///
文件读取和存储都在本地
mapred-site.xml
mapreduce.framework.name
指定执行MapReduce任务的框架。可以是本地、经典、yarn
local
指定MR运行在本地
二、本地运行官方示例搭建完成Hadoop运行环境之后,无需任何配置,即可开始 ...
Hadoop运行环境搭建教程
1. 环境准备:一台linux机器,可以是本地VMware安装的虚拟机,或者一台真实的linux机器都可以。
如果是本地安装的虚拟机,需要预先配置好以下几点:
配置机器静态IP(防止重启时IP变动)
修改主机名(方便配置)
关闭防火墙(防止端口被禁用)
2. 安装包准备
jdk安装包下载地址:https://www.oracle.com/java/technologies/javase-jdk8-downloads.html推荐版本:jdk8及以上
hadopp安装包下载地址:http://archive.apache.org/dist/hadoop/core/推荐版本:2.7.23. 执行安装1. 上传文件
在linux上新建目录/opt/software,/opt/module
上传jdk安装包和hadoop安装包2. 安装jdk
解压jdk包到/opt/module目录 1[root@hadoop101 software]# tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/
配置jdk环境变量先获取jdk解压路径, ...