4-nginx-反向代理
Nginx反向代理的配置语法Nginx反向代理模块的指令是由ngx_http_proxy_module模块进行解析
proxy_pass用来设置被代理服务器地址,可以是主机名称、IP地址加端口号形式
URL:需要进行设置的被代理服务器地址,包含传输协议(http,https://)、主机名称或IP地址加端口号、URI等要素
当proxy_pass时,要注意是否要在URL后面加 / 的问题:
当客户端访问 http://localhost/index.html,效果是一样的
当客户端访问 http://localhost/server/index.html 的时候
第一个proxy_pass就变成了 http://localhost/server/index.html
第二个proxy_pass就变成了 http://localhost/index.html 效果就不一样了
当没有斜杠时,location后的路径会加上去,有斜杠时,则不会。
proxy_set_header更改Nginx服务器接收到的客户端请求的请求头信息,然后将新的请求 ...
12-String相关
String具有不可变性1)当对字符串进行重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值
2)当对现有的字符串进行连接操作的时候,也需要重新指定内存区域赋值,不能使用原有的value进行赋值
3)当调用String的 replace() 方法修改指定字符或字符串的时候,也需要重新指定内存区域赋值,不能使用原有的value进行赋值
注意:String声明为final,不可被继承
123456@Testpublic void test1() { String s1 = "abc";//字面量定义的方式,"abc"存储在字符串常量池中 String s2 = "abc"; System.out.println(s1 == s2) //true}
1234567@Testpublic void test2() { String s1 = "abc";//字面量定义的方式,"abc"存储在字符串常量池中 Stri ...
11-执行引擎
概述1、执行引擎是Java虚拟机的核心组成部分之一
2、执行引擎的任务是将字节码指令解释/编译为对应平台上的本地机器指令 (其实执行引擎就是将高级语言翻译为机器语言)
3、执行引擎的工作过程
输入的是字节码二进制流
处理过程是字节码解析执行的等效过程
输出是执行结果
4、执行引擎在执行的过程中需要执行的字节码指令完全 依赖于PC寄存器
5、每当执行完一项指令操作后,PC寄存器就会更新下一条需要被执行的指令地址
6、在方法的执行过程中,执行引擎有可能会通过存储在局部变量表中的对象引用定位到存储在java堆中的对象实例信息,以及通过对象头中的元数据指针定位到目标对象的类型信息
7、执行引擎包括解释器,及时编译器,垃圾回收器
java代码编译和执行的过程大部分的程序代码转换成物理机的目标代码或虚拟机能执行的指令集之前,都需要经过下图的各个步骤
解释器:
当java虚拟机启动时会根据预定义的规范对字节码采用逐行解释的方式执行
将字节码文件中的内容翻译为对应平台的本地机器指令执行
JIT编译器:
虚拟机将源代码直接编译成和本地机器平台相关的机器语言
...
10-直接内存
1、直接内存不是虚拟机运行时数据区的一部分,而是在Java堆外,直接向系统申请的内存空间
2、来源于NIO,通过存在堆中的 DirectByteBuffer 操作本地内存
123456789private static final int BUFFER = 1024 * 1024 * 1024;//1GBpublic static void main(String[] args){ //直接分配本地内存空间 ByteBuffer byteBuffer = ByteBuffer.allocateDirect(BUFFER); System.out.println("直接内存分配完毕"); byteBuffer = null; System.out.println("直接内存开始释放!"); System.gc();}
3、通常访问直接内存的速度会优于访问java堆的速度(读写性能更高,适用于读写频繁的场合)
4、java的NIO库运行java程序使用直接内存用于数据缓冲
5、直接内存大小 ...
09-对象的实例化,内存布局和访问定位
对象实例化与创建对象实例化的概述(点我)
测试对象实例化的过程
①加载类元信息 ②为对象分配内存 ③处理并发问题 ④属性的默认初始化(零值初始化)
⑤设置对象头信息 ⑥属性的显示初始化、代码块中初始化、构造器中初始化
创建的过程(字节码角度)
对象的内存布局内存布局(点我)
对象的访问定位对象访问定位概述(点我)
08-方法区
方法区的演变
只有HotSpot虚拟机才有永久代
1、jdk1.6之前:又永久代,静态变量存储在永久代上
2、jdk1.7:又永久代,字符串常量池,静态变量移除,保存在堆中
3、jdk1.8以后:无永久代,类型信息、字段、方法、常量池保存在本地内存的元空间,但字符串常量池,静态变量仍在堆
永久代为什么要被元空间替换?1、为永久代设置空间大小是很难确定的如果动态加载类过多,容易产生永久代的OOM,而元空间使用本地内存,只受本地内存的影响
2、对永久代调优困难
字符串常量池为什么要放到堆空间?因为永久代的回收率很低,在进行full GC的时候才会触发,而full GC是老年代空间不足、永久代不足时才会触发,所以导致回收效率不高。但是实际中又有大量字符会被创建,回收效率低导致永久代空间不足。放到堆里,可以及时回收。
方法区的概述1、方法区在JVM启动的时候被创建,它的实际的物理内存空间可以是不连续的(关闭 JVM 就会释放这个区域的内存)
2、方法区时逻辑上是堆的一个组成部分,但是在不同虚拟机里头实现是不一样的,最典型的就是永久代(PermGen space)和元空间(M ...
3-nginx-静态资源部署
静态资源的配置指令listen指令: 用来配置监听端口
default_server属性是标识符,用来将此虚拟主机设置成默认主机
所谓的默认主机指的是如果没有匹配到对应的address:port,则会默认执行的。 如果不指定默认使用的是第一个server
server_name指令:用来设置虚拟主机服务名称
三种匹配方式:精确匹配、通配符匹配、正则表达式匹配
精确匹配
域名是要收取一定的费用,所以可以使用修改hosts文件来制作一些虚拟域名来使用。需要修改 /etc/hosts 文件来添加
通配符匹配server_name中支持通配符”*“,但需要注意的是通配符不能出现在域名的中间,只能出现在首段或尾段
(*)代表任意字符
正则表达式匹配server_name中可以使用正则表达式,并且使用 ~ 作为正则表达式字符串的开始标记
括号取值
匹配执行顺序1、准确匹配
2、通配符在开始时匹配
3、通配符在结束时匹配
4、正则表达式匹配
5、被默认的default_server处理,如果没有指定默认找第一个server
2-nginx-配置到系统服务和系统环境
一、将nginx配置到系统服务1、在 /usr/lib/systemd/system 目录下添加nginx.service,内容如下
12345678910111213141516[Unit]Description=nginx web serviceDocumentation=http://nginx.org/en/docs/After=network.target[Service]Type=forkingPIDFile=/usr/local/nginx/logs/nginx.pidExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.confExecStart=/usr/local/nginx/sbin/nginxExecReload=/usr/local/nginx/sbin/nginx -s reloadExecStop=/usr/local/nginx/sbin/nginx -s stopPrivateTmp=true[Install]WantedBy=default.tar ...
07-堆
堆的核心概述一个进程对应一个JVM实例,一个JVM实例中有一个运行时数据区,一个运行时数据区中只有一个堆空间
进程中的多个线程各自拥有一套程序计数器,本地方法栈,虚拟机栈,但是多个线程共享同一个堆空间
一个JVM实例只存在一个堆内存,堆是Java内存管理的核心区域
堆区在JVM启动的时候就被创建,其空间大小也确定了(JVM管理的最大一块内存区域,大小可调节)
堆可以处于物理上不连续的内存空间,但在逻辑上它应该被视为连续的
多个线程共享一个堆区,容易造成并发性能差的问题,所以堆划分出线程私有的缓冲区,每个线程占一份
几乎所有的对象实例都在这里分配内存
数组和对象可能永远不会存储在栈上,因为栈帧中保存引用,指向对象或数组在堆中的位置
在方法结束后,堆中的对象不会马上被移除,仅仅在垃圾回收的时候会被移除(只是移除了方法区指向堆空间的索引,如果方法结束就移除堆中的对象的话,当方法多次调用时,会因为多次 GC而影响系统性能)
123456789101112public class SimpleHeap { private int id; public SimpleHea ...
1-nginx-目录,配置文件
使用 工具tree查看目录结构1、安装tree工具: yum install -y tree
2、 tree /usr/local/nginx (tree后面跟的是Nginx的安装目录)
查看进程的PID1、查看nginx的master进程和worker进程: ps -ef | grep nginx
2、nginx的./configure的配置参数的时候,有一个参数是–pid-path=PATH默认是 /usr/local/nginx/logs/nginx.pid
所以可以通过查看该文件来获取nginx的master进程ID
信号
信号
作用
TERM或INT
立即关闭整个服务
QUIT
“优雅”地关闭整个服务
HUP
重读配置文件并使用服务对新配置项生效
USR1
重新打开日志文件,可以用来进行日志切割
USR2
平滑升级 到最新版的nginx
WINCH
所有子进程不在接收处理新连接相当于给work进程发送 ...