说到GET和POST,就不得不提HTTP协议,因为浏览器和服务器的交互是通过HTTP协议执行的,而GET和POST也是HTTP协议中的两种方法。 HTTP全称为HyperTextTransferProtocol,中文翻译为超文本传输协议,目的是保证浏览器与服务器之间的通信。HTTP的工作方式是客户端与服务器之间的请求-应答协议。 HTTP协议中定义了浏览器和服务器进行交互的不同方法,基本方法有4种,分别是GET,POST,PUT,DELETE。这四种方法可以理解为,对服务器资源的查,改,增,删。 GET:从服务器上获取数据,也就是所谓的查,仅仅是获取服务器资源,不进行修改。 POST:向服...

在JavaWeb程序中,Servlet主要负责接收用户请求HttpServletRequest,在doGet(),doPost()中做相应的处理,并将回应HttpServletResponse反馈给用户。Servlet可以设置初始化参数,供Servlet内部使用。 常用方法 Servlet接口定义了5个方法,其中前三个方法与Servlet生命周期相关: voidinit(ServletConfigconfig)throwsServletException voidservice(ServletRequestreq,ServletResponseresp)throwsServletExcep...

物理地址 堆的物理地址分配对对象是不连续的。因此性能慢些。在GC的时候也要考虑到不连续的分配,所以有各种算法。比如,标记-消除,复制,标记-压缩,分代(即新生代使用复制算法,老年代使用标记——压缩) 栈使用的是数据结构中的栈,先进后出的原则,物理地址分配是连续的。所以性能快。 内存分别 堆因为是不连续的,所以分配的内存是在运行期确认的,因此大小不固定。一般堆大小远远大于栈。 栈是连续的,所以分配的内存大小要在编译期就确认,大小是固定的。 存放的内容 堆存放的是对象的实例和数组。因此该区更关注的是数据的存储 栈存放:局部变量,操作数栈,返回结果。该区更关注的是程序方法的执行。 PS: 静态变...

对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。 通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。 可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。 JVM的垃圾回收器的基本原理是通过可达性分析来确定哪些对象是不再被程序使用的,从而回收这些对象所占用的内存空间。垃圾回收器会从一组称为"根"的对象开始,通过遍历对象引用链,判断对象是否可达。如果一个对象不可达(...

强引用:发生gc的时候不会被回收。 软引用:有用但不是必须的对象,在发生内存溢出之前会被回收。 弱引用:有用但不是必须的对象,在下一次GC时会被回收。 虚引用(幽灵引用/幻影引用):无法通过虚引用获得对象,用PhantomReference实现虚引用,虚引用的用途是在gc时返回一个通知。 在Java中,有以下几种引用类型: 强引用(StrongReference):强引用是最常见的引用类型。如果一个对象具有强引用与之相连,即使内存空间紧张,垃圾回收器也不会回收该对象。只有当强引用被显式地释放或者强引用变量被重新赋值为其他对象时,才会触发对象的回收。 Objectobj=newO...

找到Tomcat目录下的conf文件夹 进入conf文件夹里面找到server.xml文件 打开server.xml文件 在server.xml文件里面找到下列信息 把Connector标签的8080端口改成你想要的端口 <Servicename="Catalina"> <Connectorport="8080"protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/> more Tomcat的默认端口是8080。如果要修改Tomcat的默认端口,可以按照以下步骤进行操作: 打开T...

session是依赖Cookie实现的。session是服务器端对象session是浏览器和服务器会话过程中,服务器分配的一块储存空间。服务器默认为浏览器在cookie中设置sessionid,浏览器在向服务器请求过程中传输cookie包含sessionid,服务器根据sessionid获取出会话中存储的信息,然后确定会话的身份信息。 session的作用 Session是服务器端用于跟踪和存储关于特定用户会话信息的一种机制。它在Web应用程序中用于维护用户状态和跟踪用户的活动。 在基于Web的应用中,HTTP协议本身是无状态的,即服务器无法直接识别不同请求来自于同一用户。为了解决这个问...

Java堆中划分出一块内存来作为句柄池,引用中存储对象的句柄地址,而句柄中包含了对象实例数据与对象类型数据各自的具体地址信息,具体构造如下图所示: 在某些Java虚拟机实现中,对象的访问可以使用句柄(handle)来进行。句柄访问是一种间接访问对象的方式,其中对象本身的内存地址被封装在句柄对象中,而程序通过访问句柄来间接访问对象。 在使用句柄访问的Java实现中,堆内存被划分为两部分:对象实例数据和句柄池。对象实例数据存储了对象的实际数据,而句柄池则存储了对对象的句柄。每个句柄都包含了对象的实例数据的内存地址以及类型信息等。 当程序需要访问对象时,它首先通过句柄池获取对象的句柄,然后使用...

标记-清除算法:标记无用对象,然后进行清除回收。缺点:效率不高,无法清除垃圾碎片。 复制算法:按照容量划分二个大小相等的内存区域,当一块用完的时候将活着的对象复制到另一块上,然后再把已使用的内存空间一次清理掉。缺点:内存使用率不高,只有原来的一半。 标记-整理算法:标记无用对象,让所有存活的对象都向一端移动,然后直接清除掉端边界以外的内存。 分代算法:根据对象存活周期的不同将内存划分为几块,一般是新生代和老年代,新生代基本采用复制算法,老年代采用标记整理算法。 Java虚拟机(JVM)提供了多种垃圾回收算法,每种算法都具有不同的特点和适用场景。以下是几种常见的垃圾回收算法: 标记-...

虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成可以被虚拟机直接使用的java类型。 Java类加载机制遵循的原则和策略 Java类加载机制是Java虚拟机(JVM)用于加载类的过程和策略。它负责将类的字节码加载到内存中并转换为可执行的Java类。Java类加载机制遵循以下原则和策略: 双亲委派模型(DelegationModel):Java类加载器采用双亲委派模型。当一个类加载器需要加载类时,它首先将加载请求委派给父类加载器,只有在父类加载器无法完成加载时才由当前类加载器自己尝试加载。这样可以确保类的加载过程是从上至下的,避免重复加载和冲突。 ...

在Java虚拟机(JVM)中,双亲委派模型(DelegationModel)是一种类加载机制,它用于在多层次的类加载器之间协调类加载的过程。 根据双亲委派模型,当一个类加载器需要加载某个类时,它首先将加载请求委派给父类加载器,只有在父类加载器无法加载该类时,才由当前类加载器自己尝试加载。这个过程会一直向上追溯,直到顶层的启动类加载器(BootstrapClassLoader)。 双亲委派模型的核心思想是避免重复加载和保护核心类库的安全性。它基于以下几个原则: 委派:当一个类加载器收到加载请求时,它首先将加载任务委派给父类加载器,只有在父类加载器无法完成加载时才自己尝试加载。 反向委派是禁止...

JDK自带了很多监控工具,都位于JDK的bin目录下,其中最常用的是jconsole和jvisualvm这两款视图监控工具。 jconsole:用于对JVM中的内存、线程和类等进行监控; jvisualvm:JDK自带的全能分析工具,可以分析:内存快照、线程快照、程序死锁、监控内存的变化、gc变化等。 JVM调优工具是用于帮助开发者分析和优化Java应用程序性能的工具。以下是一些常用的JVM调优工具: JDK自带工具: jps(JVMProcessStatusTool):用于查看当前运行的Java进程列表和其进程ID。 jstack:用于生成Java线程的堆栈跟踪信息,帮助分析...

  0SnbOly3LC5t   2023年12月15日   22   0   0 开发语言开发语言JVMJavajvmjava

Java内存分配与回收策略以及MinorGC和MajorGC(FullGC)是Java虚拟机(JVM)中与内存管理相关的重要概念。 Java内存分配与回收策略: 对象的分配:Java中的对象通常在堆内存中分配。堆内存被划分为不同的区域,其中最常见的是新生代(YoungGeneration)和老年代(OldGeneration)。 新生代分配:新创建的对象首先被分配到新生代的Eden区域。当Eden区域满时,会触发MinorGC,将存活的对象复制到存活区域(Survivor)中。 对象晋升:经过多次MinorGC后,仍然存活的对象会被晋升到老年代。晋升条件可以是对象年龄达到一定阈值或者Sur...

类装载分为以下5个步骤: 加载:根据查找路径找到相应的class文件然后导入; 验证:检查加载的class文件的正确性; 准备:给类中的静态变量分配内存空间; 解析:虚拟机将常量池中的符号引用替换成直接引用的过程。符号引用就理解为一个标示,而在直接引用直接指向内存中的地址; 初始化:对静态变量和静态代码块执行初始化工作。 类加载是Java虚拟机(JVM)将类的字节码加载到内存并转换成可执行的Java类的过程。类加载过程可以分为以下步骤: 加载(Loading): 加载是类加载的第一个阶段,它的目标是通过类的全限定名(FullyQualifiedName)来获取类的字节码数据。...

SELECT:InnoDB会根据以下条件检查每一行记录:第一,InnoDB只查找版本早于当前事务版本的数据行,这样可以确保事务读取的行要么是在开始事务之前已经存在要么是事务自身插入或者修改过的。第二,行的删除版本号要么未定义,要么大于当前事务版本号,这样可以确保事务读取到的行在事务开始之前未被删除。 INSERT:InnoDB为新插入的每一行保存当前系统版本号作为行版本号。 DELETE:InnoDB为删除的每一行保存当前系统版本号作为行删除标识。 UPDATE:InnoDB为插入的一行新纪录保存当前系统版本号作为行版本号,同时保存当前系统版本号到原来的行作为删除标识保存这两个版本号,使...

MySQL中有四种事务隔离级别,它们分别是: readuncommited:未提交读,读到未提交数据; readcommitted:读已提交,也叫不可重复读,两次读取到的数据不一致; repetableread:可重复读; serializable:串行化,读写数据都会锁住整张表,数据操作不会出错,但并发性能极低,开发中很少用到。 MySQL默认使用REPEATABLE-READ的事务隔离级别。 MySQL提供了四种事务隔离级别,分别是: 读未提交(ReadUncommitted):最低的隔离级别,事务中的修改操作可以被其他事务读取,即一个事务可以读取到另一个事务尚未提交的数据。这...

定位Class文件:JVM首先根据类的全限定名(包括包名和类名)来定位对应的Class文件。通常情况下,JVM会按照约定的目录结构和类路径(Classpath)来查找Class文件。 读取Class文件:一旦定位到Class文件的位置,JVM会将该文件的字节码数据读取到内存中。可以使用文件I/O或网络传输等方式来读取字节码数据。 内存分配:JVM会为该Class文件分配一块内存区域,用于存储类的字节码数据和其他相关信息。这个内存区域称为方法区(MethodArea)或元空间(Metaspace)。 解析符号引用:在加载过程中,JVM会解析Class文件中的符号引用,将其转换为直接引用。符号...

MySQL的间隙锁(GapLock)是一种锁机制,用于在多个事务并发执行时保护数据的一致性。间隙锁是基于索引范围的锁,它锁定了索引范围内的间隙(两个索引值之间的空间),而不是具体的数据行。 间隙锁的作用是防止其他事务在同一个间隙内插入新的数据,从而避免了幻读(PhantomRead)问题。幻读指的是在同一个事务中多次执行相同的查询,但结果集却不一致,因为其他事务插入了新的数据。 下面是一个示例,演示了间隙锁的使用和效果: 假设有一个表products,包含以下数据: +----+------------+ |id|name| +----+------------+ |1|ProductA|...

我们知道在MySQL中使用forceindex可以指定查询的索引,但并不是一定会生效,原因是MySQL会根据优化器自己选择索引,如果forceindex指定的索引出现在候选索引上,这个时候MySQL不会在判断扫描的行数的多少直接使用指定的索引,如果没在候选索引中,即使forceindex指定了索引也是不会生效的。在MySQL中,即使明确指定了查询索引,也可能出现索引没有生效的情况。以下是一些可能导致索引没有生效的原因: 索引不存在或不可用:如果明确指定的索引在表中不存在,或者由于某种原因不可用(如被禁用或损坏),那么查询将无法使用该索引。 索引选择性较低:优化器可能会根据索引的选择性和...

优化器的目的是使用最小的代价选择最优的执行方案,影响优化器选择索引的因素如下: 扫描行数,扫描的行数越少,执行代价就越少,执行效率就会越高; 是否使用了临时表; 是否排序。 MySQL优化器在执行查询时选择合适的索引是一项关键任务,它会考虑以下几个因素: 查询条件:优化器会分析查询语句中的条件,并评估每个可能的索引对于满足条件的效率。例如,如果查询条件涉及到某个列的等值匹配,优化器可能会选择该列上的唯一索引或普通索引。如果查询条件包含范围查询,那么优化器可能会选择适合范围查询的索引。 索引选择性:索引选择性是指索引列上不同值的数量与总行数之比。优化器倾向于选择具有更高选择性的索引,...

关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~