
java
文章平均质量分 82
想当程序媛的秀妍
这个作者很懒,什么都没留下…
展开
-
Java的输入输出
文章目录Scanner类常用方法代码Scanner类java.util.Scanner是一个用于扫描输入文本的类。常用方法next()查找并返回来自此扫描器的下一个完整的标记。只读取输入直到空格,他不能读取两个由空格或符号隔开的单词,此外,next()在读取输入后将光标放在同一行中,只读空格之前的数据,并且光标指向本行。nextInt()只读取int值,就是只能读取整数类型的数据,如果输入了非整数数据,就会报错。nextFloat()、nextDouble()也是类似,只能读取符合该类型的数原创 2021-08-06 11:04:30 · 117 阅读 · 0 评论 -
Hibernate的介绍与使用
文章目录框架介绍ORM开发步骤创建持久化类创建对象-关系映射文件创建Hibernate配置文件通过Hibernate API编写访问数据库的代码Hibernate进行数据持久化操作Hibernate与触发器Hibernate缓存框架介绍Hibernate是一个Java领域的持久化框架,是一个ORM框架。ORM对象/关系映射ORM的思想:将关系数据库中表中的记录映射称为对象,以对象的形式展现,程序员可以把对数据库的操作转化为对对象的操作。ORM采用元数据来描述对象-关系映射细节,元数据通常原创 2021-05-14 15:33:04 · 229 阅读 · 1 评论 -
设计模式与原则
文章目录七大设计原则二十四大设计模式对象创建接口适配对象去耦抽象集合行为扩展算法封装性能与对象访问对象状态七大设计原则单一职责原则:一个类负责一项职责。里式替换原则:继承与派生的规则。依赖倒置原则:高层次模块不应该依赖低层次模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。即针对接口编程,不要针对实现编程。接口隔离原则:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。迪米特法则:低耦合、高内聚开闭原则:一个软件实体如类、模块和函数应该对扩展开放,对修改原创 2021-05-14 10:38:21 · 385 阅读 · 1 评论 -
struts2(四)--运行流程
文章目录几个相关的API流程图源码分析几个相关的APIActionMapping保存当前Action映射状态的简单类。ActionMapper会返回一个ActionMapping,如果返回的是ActionMapping,说明这是一个Struts2请求,如果返回的是null,说明没有一个action和其匹配,那么这是一个非struts2请求。ActionProxy是XWork和action之间的一个中间层。ActionInvocationAction和各拦截器之间的一个执行状态,利用Act原创 2021-05-13 19:19:31 · 151 阅读 · 0 评论 -
设计模式--工厂方法
创建型–工厂方法(Factory Method)在简单工厂中,创建一个对象的是另一个类,而在工厂方法中,是由子类来创建对象。意图定义了一个创建对象的接口,但由子类决定要实例化哪个类。工厂方法把实例化操作推迟到子类。类图实现...原创 2021-05-13 10:25:03 · 109 阅读 · 0 评论 -
设计模式--抽象工厂
创建型–抽象工厂(Abstract Factory)抽象工厂模式创建的是对象家族,也就是很多对象而不是一个对象,并且这些对象是相关的,也就是说必须一起创建出来,而工厂方法模式只是用于创建一个对象,这和抽象工厂模式有很大的不同。意图提供一个接口,用于创建相关的对象家族。类图抽象工厂模式用到了工厂方法模式来创建单一对象,AbstractFactory中的createProductA()和createProductB()方法都是让子类来实现,这两个方法单独来看就是在创建一个对象,这符合工厂方法模式的定原创 2021-05-12 13:09:36 · 94 阅读 · 1 评论 -
设计模式--模板方法
文章目录意图类图实现意图在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。类图实现冲咖啡和冲茶的流程类似,但是某些步骤会有些不一样,可复用那些相同步骤的代码。感谢并参考:https://pdai.tech/md/dev-spec/pattern/17_template.html...原创 2021-05-12 09:14:03 · 82 阅读 · 0 评论 -
设计模式--代理
文章目录意图类图代理模式为另一个对象提供一个替身或占位符以控制对这个对象的访问。意图控制对其他对象的访问。类图代理有四类:远程代理(Remote Proxy):控制对远程对象(不同地址空间)的访问,他负责将请求及其参数进行编码,并向不同地址空间中的对象发送已经编码的请求。虚拟代理(Virtual Proxy):根据需要创建开销很大的对象,他可以缓存实体的附加信息,以便延迟对它的访问,例如在网站上加载一个很大的图片时,不能马上完成,就可以用虚拟代理缓存图片的大小信息,然后生成一张临时图片代替原原创 2021-05-11 21:53:00 · 66 阅读 · 0 评论 -
struts2(三)--运行流程
Struts2会把请求参数给栈顶对象的属性。文章目录显示和删除员工信息列表流程定义两个jsp页面Struts.xmlEmployee.javaEmployeeAction.javaDao.java运行流程Params拦截器ModelDriven拦截器实现方式edit修改方法流程总结使用 paramsPrepareParamsStack 拦截器栈后的运行流程PrepareInterceptorparamsPrepareParamsStack拦截器栈该流程以Employee的增删改查为例进行整个流程的讲解。原创 2021-05-11 21:36:24 · 150 阅读 · 1 评论 -
struts2(二)--OGNL与标签
文章目录值栈OGNL值栈在页面上能够获取属性值,并不是在请求域中获取,而是从值栈里面获取的。在页面中打印的request实际上是经过struts重新包装的StrutsRequestWrapper.StrutsRequestWrapper类重写了getAttribute方法。可以从 ActionContext 中获取值栈对象。属性值是在值栈中获取的,而不是在请求域中获取该属性值。值栈(ValueStack)贯穿整个Action的生命周期,每个Action类的对象实例都拥有一个ValueStac原创 2021-05-11 10:53:35 · 140 阅读 · 0 评论 -
设计模式--适配器
文章目录意图类图实现将一个类的接口,转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以合作无间,适配器有两种:对象适配器:使用组合(委托)的适配器类适配器:使用多重继承在程序中,经常会存在现有的程序无法直接使用,需要做适当的变换之后才能使用的情况,这种填补现有程序和所需程序之间差异的设计模式就是适配器模式。意图将一个类接口转换成另一个用户需要的接口。它位于实际情况和需求之间,填补两者之间的差异。类图实现鸭子(Duck)和火鸡(Turkey)拥有不同的叫声,Duck 的叫声调原创 2021-05-10 17:46:24 · 70 阅读 · 0 评论 -
设计模式--单例模式&简单工厂
文章目录创建型--单例模式(Singleton pattern)懒汉式--线程不安全饿汉式--线程安全懒汉式--线程安全创建型--简单工厂(Simple Factory)意图类图实现创建型–单例模式(Singleton pattern)单例设计模式确保一个类只有一个实例,并提供该实例的全局访问点。使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量。懒汉式–线程不安全在以下实现中,私有静态原创 2021-05-10 17:20:26 · 244 阅读 · 1 评论 -
Struts(一)相关概念介绍
文章目录MVC设计模式概览使用Filter作为控制器的MVC过程介绍Action概述actionAction类在Action中访问Web资源ActionSupportresult通配符映射动态方法调用MVC设计模式概览实现MVC(Model、View、Controller)模式的应用程序由三大部分组成:模型:封装应用程序的数据和业务逻辑POJO(普通java类)视图:实现应用程序的信息显示功能JSP控制器:接收来自用户的输入,调用模型层,响应对应的视图组件Servlet、Filter使用Fi原创 2021-05-10 11:39:53 · 153 阅读 · 0 评论 -
Redis(八)--缓存问题
文章目录概述缓存穿透概述Redis最常用的一个场景就是作为缓存,作为缓存在实践中会出现一系列的问题,像一致性、穿击、穿透、雪崩、污染等。在高并发的业务场景下,数据库大多数情况下都是用户并发访问最薄弱的环节,所以,需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问Mysql数据库,这样可以大大缓解数据库的压力。缓存穿透...原创 2021-05-09 18:30:31 · 256 阅读 · 0 评论 -
Redis(七)--分片技术详解
文章目录介绍Redis集群的数据分布算法:哈希槽算法集群的请求重定向Redis集群中节点的通信机制:goosip协议介绍原理通信过程优缺点goosip协议的常见类型集群的扩容与收缩扩容收缩集群的故障检测与故障恢复机制故障检测故障恢复介绍Redis分片(Sharding)技术是指将数据分散到多个Redis实例中的方法,分片之后,每个Redis拥有一部分原数据集的子集。在数据量非常大的时候,这种技术能够将数据量分散到若干主机的Redis实例上,进而减轻单台redis实例的压力。分片技术能够以更扩展的方式使多原创 2021-05-09 16:49:17 · 4247 阅读 · 1 评论 -
Redis(六)--高可用哨兵机制
文章目录哨兵机制(Redis Sentinel)哨兵的作用哨兵集群的组建哨兵监控Redis库主库下线的判定哨兵集群的选举新主库的选出故障的转移哨兵机制(Redis Sentinel)在Redis主从集群中,哨兵机制是实现主从库自动切换的换件机制,它有效的解决了主从复制模式下故障转移的问题。哨兵的核心功能是主节点的自动故障转移。哨兵的作用监控:哨兵会不断的检查主节点和从节点是否运作正常。自动故障转移:当主节点不能正常工作时,哨兵会开始自动故障转移操作,他会将失效主节点的其中一个从节点升级为新原创 2021-05-09 10:10:57 · 118 阅读 · 0 评论 -
Redis(五)--高可用主从复制详解
文章目录主从复制概述主从复制的作用主从复制原理全量复制增量复制几个问题为什么还有从库的从库的设计?主从复制概述要避免单点故障,即保证高可用,便需要冗余(副本)方式提供集群服务。而Redis提供了主从库模式,以保证数据副本的一致,主从库之间采用的是读写分离的方式。主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器,前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。主从复制的作用数据冗余:主从复制实现了数据的热备份,是持原创 2021-05-08 20:18:23 · 225 阅读 · 0 评论 -
Redis(四)--发布订阅模式详解
文章目录Redis发布订阅简介发布订阅的使用基于频道的发布/订阅基于模式的发布/订阅深入理解Redis发布订阅简介Redis中发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis的SUBSCRIBE命令可以让客户端订阅任意数量的频道,每当有新信息发送到被订阅的频道时,信息就会被发送给所有订阅指定频道的客户端。当有新消息通过PUBLISH命令发送给频道channel1时,这个消息就会被发送给订阅他的三个客户端:发布订阅的使用Redi原创 2021-05-08 17:35:19 · 379 阅读 · 0 评论 -
Redis(三)--持久化:RDB和AOF机制详解
文章目录Redis持久化简介RDB持久化触发方式手动触发自动触发深入理解RDBRDB优缺点AOF持久化如何实现AOF深入理解AOF重写RDB和AOF的抉择RDB和AOF混合方式从持久化中恢复数据开发运维常见问题性能与实践Redis持久化简介什么是持久化?Redis所有数据保存在内存中,对数据的更新将异步的保存到磁盘上。为什么需要持久化?Redis是基于内存的数据库,服务一旦宕机,内存中的数据将全部丢失。通常的解决方案是从后端数据库恢复这些数据,但是后端数据库有性能瓶颈,如果是大数据量的恢复,原创 2021-05-08 16:22:30 · 324 阅读 · 0 评论 -
Redis(一)--概念和基础
文章目录引入解决CPU及内存压力解决IO压力NoSQL数据库概述特点适用场景例子MemcacheRedisMongoDBRedis概述特点使用场景Redis技术常用的五大数据类型StringListSetHash引入Web1.0的时代,数据访问量有限,使用高性能的单点服务器可以解决大部分的问题。随着Web2.0的到来,用户访问量大幅度提升,同时产生了大量的用户数据,加上后来的智能移动设备的普及,所有的互联网平台都面临了巨大的性能挑战。解决CPU及内存压力解决IO压力NoSQL数据库概述原创 2021-05-07 19:17:15 · 144 阅读 · 1 评论 -
Spring--AOP详解
文章目录Spring的核心部分AOP简介底层原理AOP术语基于AspectJ实现AOP操作基于xml配置文件实现基于注解方式实现(使用)Spring的核心部分IOC:控制反转,把创建对象过程和对象之间的调用过程交给Spring进行管理,为了降低耦合度AOP:面向切面,不修改源代码进行功能增强AOP简介面向切面编程,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高开发的效率。通俗的说,就是不通过修改源代码的方式,在主干功能里面添加新原创 2021-05-07 15:41:50 · 103 阅读 · 2 评论 -
Spring--IOC详解
文章目录IOC简介IOC实现原理Spring容器管理的bean类型IOC与Bean的加载过程通过注解的方式进行IOC的加载的过程this()Bean的生命周期IOC简介IOC(控制反转),就是把对象创建和对象之间的调用过程,交给Spring进行管理。使用IOC可以降低耦合度。为什么IOC可以极大的降低耦合度?原始版一般我们想使用userDao中的方法时,会在调用地创建userDao的对象,当userDao对象包名更改或者方法名更改时,也同时修改userService的代码,耦合度很高。原创 2021-05-07 14:43:53 · 360 阅读 · 1 评论 -
MyBatis--主要流程
文章目录主要流程1. 利用XML文件创建sqlSessionFactory对象2. 配置每一个sql以及sql的封装规则3. 将sql映射文件注册到全局配置文件中4. 写代码主要流程1. 利用XML文件创建sqlSessionFactory对象这里的XML文件是全局配置文件(myBatis-config.xml)(1)有数据源<dataSource>一些运行环境信息(2)同时要将我们写好的sql映射文件一定要注册到全局配置文件中2. 配置每一个sql以及sql的封装规则sql映原创 2021-05-07 12:00:30 · 104 阅读 · 0 评论 -
SpringMVC--主要流程
文章目录SpringMVC工作流程SpringMVC的主要组件SpringMVC工作流程用户发送请求至前端控制器DispatcherServletDispatcherServlet收到请求调用HandlerMapping处理器映射器处理器映射器找到具体的处理器(可根据XML配置、注解进行查找),生成处理器以及处理器拦截器(如果有则生成)一并返回给DispatcherServletDispatcherServlet调用HandlerAdapter处理器适配器HandlerAdapter经过适配调原创 2021-05-07 11:17:35 · 120 阅读 · 2 评论 -
MyBatis--相关类的介绍
文章目录sqlSessionFactory与SqlSession动态代理MapperProxyExcutorsql的执行过程StatementHandlersqlSessionFactory与SqlSession从表面上看,我们都是通过SqlSession去执行sql语句的。SqlSession对应着一次数据库的会话,由于数据库会话不是永久的,因此SqlSession的生命周期也不是永久的,每次访问数据库时都需要创建它(当然不是说在SqlSession里只能执行一次sql,可以执行多次,当一旦关闭了S原创 2021-04-30 13:50:07 · 167 阅读 · 1 评论 -
2021-04-11 MyBatis运行流程-04
文章目录查询实现具体操作源码分析查询实现具体操作源码分析调用代理对象mapper的.getEmpById方法:Employee employee = mapper.getEmpById(1);因为mapper是一个InvocationHandler,在执行目标方法之前会先执行invoke方法: @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {原创 2021-04-15 13:32:46 · 71 阅读 · 0 评论 -
MyBatis--总体框架设计
文章目录MyBatis架构接口层--和数据库交互的方式使用传统的MyBatis提供的API使用Mapper接口数据处理层参数映射和动态SQL语句生成SQL语句的执行以及封装查询结果集成List框架支撑层引导层主要构件及其相互关系MyBatis架构MyBatis框架整体设计如下:接口层–和数据库交互的方式MyBatis和数据库的交互有两种方式:使用传统的MyBatis提供的API使用Mapper接口使用传统的MyBatis提供的API这是传统的传递Statement Id和查询参数给Sq原创 2021-04-29 16:05:07 · 358 阅读 · 0 评论 -
高并发(七)--AQS详解
文章目录AQS介绍核心思想AQS的作用AQS对资源的共享方式AQS底层使用了模板方法模式AQS数据结构AQS源码分析类的继承关系类的属性类的构造方法类的核心方法`acquire`方法`addWriter`方法`acquireQueue`方法`release`方法AQS总结AQS介绍AQS是一个用来构建锁和同步器的框架,全称为AbstractQueuedSynchronized,它是在java.util.concurrent.locks下面的类,该类是同步工具的一个基础类,很多类都是通过创建自己的内部类S原创 2021-04-28 21:32:11 · 243 阅读 · 0 评论 -
Java代码的执行流程
文章目录Java语言的跨平台性Java代码的执行流程半编译半解释型语言Java语言的跨平台性Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器,这台虚拟的机器在任何平台上都提供给编译程序一个共同的接口。编译程序只面向虚拟机,生成虚拟机能够理解的代码(字节码,扩展名为.class的文件,它不面向任何特定的机器,只面向虚拟机),然后由解释器来将虚拟机代码转换为特定系统的机器码执行。每一种平台的解释器是不同的,但是实现的虚拟机是相同的。Java源程序经过编译器编译后编程字节码,原创 2021-04-28 11:05:18 · 1656 阅读 · 1 评论 -
高并发(六)--ConcurrentHashMap 源码解析
文章目录一. `HashMap`、`HashTable`与`ConcurrentHashMap`的区别JDK1.7中的`ConcurrentHashMap`概述成员变量并发度(Concurrency Level)初始化`put`方法的实现`get`方法的实现`size`方法的实现JDK1.8 `ConcurrentHashMap`讲解`ConcurrentHashMap`相关属性介绍类中相关的节点类:`Node`、`TreeNode`、`TreeBin`、`ForwardingNode`与初始化构造函数初始原创 2021-04-26 09:19:23 · 368 阅读 · 0 评论 -
高并发(五)--CAS介绍
文章目录悲观锁与乐观锁悲观锁乐观锁原子操作类CAS源码解析unsafejava8对于原子操作类的优化悲观锁与乐观锁悲观锁如果是mysql数据库,利用for update关键字+事务。这样的效果就是当A线程走到for update的时候,会把指定的记录上锁,然后B线程过来,就只能等待,A线程修改完数据之后,提交事务,锁就被释放了,这个时候B线程就可以继续做自己的事情了。悲观锁往往是互斥的,这么做是相当影响性能的。乐观锁在数据表中加一个版本号的字段:version,这个字段不需要程序员手动维护,是数据原创 2021-04-23 20:40:21 · 441 阅读 · 2 评论 -
高并发(四)--Synchronized及其实现原理
文章目录一.Synchronized的基本使用二. synchronized原理三. 运行结果的解释一.Synchronized的基本使用Synchronized是解决并发问题的一种最常用的方法,也是最简单的一种方法。它的主要作用有三个:确保线程互斥的访问同步代码保证共享变量的修改能够及时可见有效解决重排序问题总有有三种用法:修饰普通方法修饰静态方法修饰代码块代码举例:没有同步的情况:package com.paddx.test.concurrent;public c原创 2021-04-21 19:30:45 · 189 阅读 · 0 评论 -
高并发(三)--volatile的使用及其原理
文章目录一、`volatile`的作用二、`volatile`的作用防止重排序实现可见性保证原子性三. `volatile`的原理可见性的实现有序性的实现内存屏障四. 总结一、volatile的作用通常我们通过synchronized关键字来解决可见性、有序性以及原子性问题,但是synchronized是一个比较重量级的操作,对系统的性能有比较大的影响,所以如果有其他解决方案的话,我们通常会避免使用synchronized来解决问题。而volatile关键字就是java中提供的另外一种解决可见性和有序原创 2021-04-21 16:52:02 · 281 阅读 · 0 评论 -
高并发(二)--核心理论
文章目录死锁、活锁与饥饿并发级别阻塞非阻塞两个并行定律共享性互斥性原子性可见性有序性Happened-Before规则死锁、活锁与饥饿starvation:饥饿是指某一个或多个线程因为某种原因无法获得所需要的资源,导致一直无法执行。deadlock:是一种静态现象,指两个或两个以上的进程(或线程)在执行的过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,他们将无法推进下去。livelock:是一种动态现象,任务执行者没有被阻塞,由于某些条件一直没有被满足,导致一直重复尝试,失败原创 2021-04-21 15:08:34 · 119 阅读 · 0 评论 -
高并发(一)--线程的相关基础知识
文章目录一 线程与进程的区别两者定义两者区别进一步理解二. 线程的状态1. 初始状态2. 运行状态2.1 就绪状态2.2 运行中状态3. 阻塞状态4. 等待状态5. 超时等待状态6. 终止状态同步队列状态等待队列三. 几种方法的比较四. 线程的基本操作新建线程线程中断suspend和resumeyield()与join()守护线程线程的优先级同步与异步一 线程与进程的区别两者定义进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个原创 2021-04-21 12:03:23 · 98 阅读 · 0 评论 -
2021-04-17垃圾回收器
文章目录七种典型的垃圾回收器经典收集器与垃圾分代之间的关系如何查看默认的垃圾回收器Serial回收器ParNew回收器Parallel Scavenge回收器CMS回收器G1回收器总结ZGC垃圾收集器的组合关系七种典型的垃圾回收器串行回收器:Serial、Serial Old并行回收器:ParNew、Parallel Scavenge、Parallel Old并发回收器:CMS、G1经典收集器与垃圾分代之间的关系新生代收集器:Serial、ParNew、Parallel Scavenge老年代原创 2021-04-18 14:30:31 · 89 阅读 · 0 评论 -
2021-04-17JVM垃圾回收相关算法
文章目录垃圾标记阶段引用计数算法可达性分析算法(根搜索算法、追踪性垃圾收集)垃圾清除阶段标记-清除算法(Mark-Sweep)复制算法标记-压缩算法(Mark-Compact)方法对比分代收集算法增量收集算法分区算法垃圾标记阶段引用计数算法对每个对象保存一个整型的引用计数器属性,用于记录对象被引用的情况。对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1;当引用失效的时候,引用计数器就减1。只要对象A的引用计数器的值为0,即表示对象A不可能再被使用,可进行回收。优点:实现简单,垃圾原创 2021-04-17 17:41:48 · 106 阅读 · 0 评论 -
2021-04-16JVM--创建对象的步骤
文章目录创建对象的步骤判断对象对应的类是否加载、链接、初始化为对象分配内存处理并发安全问题初始化分配到空间设置对象的对象头执行`init`方法进行初始化创建对象的步骤判断对象对应的类是否加载、链接、初始化虚拟机遇到一条new指令,首先去检查这个指令的参数能否在Metaspace的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化。(即判断类元信息是否存在)。如果没有,那么在双亲委派模式下,使用当前类加载器以ClassLoader+包名+类名为Key进行查找对应的.原创 2021-04-16 13:55:37 · 262 阅读 · 0 评论 -
2021-04-15堆空间中的参数设置
主要参数设置方法查看所有的参数的默认初始值:-XX:PrintFlagsInitial查看所有参数的最终值(可能会存在修改,不再是初始值):-XX:+PrintFlagsFinal具体查看某个参数的指令:jps:查看当前运行中的进程jinfo -flag SurvivorRation 进程id初始堆空间内存(默认为物理内存的1/64):-Xms最大堆空间内存(默认为物理内存的1/4):-Xmx设置新生代的大小(初始值以及最大值):-Xmn配置新生代和老年代在堆结构的占原创 2021-04-15 13:49:33 · 87 阅读 · 0 评论 -
2021-04-13JVM--虚拟机栈
文章目录虚拟机栈的介绍虚拟机栈的作用栈的特点设置栈的大小栈的内部结构栈运行原理栈帧的内部结构虚拟机栈的介绍由于跨平台的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧,对应着一次次的Java调用(java方法)。是线程私有的。栈是运行时的单位,堆是存储的单位:栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据的存储问题,即数据怎么放,放在哪里。栈也可以放数据,局部变量(基本类原创 2021-04-14 19:33:56 · 83 阅读 · 0 评论