
java
文章平均质量分 88
RachelHwang
鹏城百晓生
展开
-
JDK 21 — JDK 21发布及多项新特性!
通过有效地调用外部函数(即 JVM 外部的代码),并通过安全地访问外部内存(即不受 JVM 管理的内存),API 使 Java 程序能够调用本机库并处理本机数据,而不会出现 JNI 的脆弱性和危险性。虚拟线程可以运行平台线程可以运行的任何代码。学生们不用使用单独的 Java 方言,就可以为单类程序编写精简的声明,然后随着技能的发展,无缝地扩展程序,使用更高级的功能。该 JEP 提议引入 “一个新的接口族,用于表示集合的概念,这些集合的元素按照预定义的序列或顺序排列,它们是作为集合的结构属性。原创 2023-09-25 08:00:00 · 2674 阅读 · 0 评论 -
SAML协议 — 理解SAML2 协议和联合身份验证流程
SAML 2.0 是许多身份验证提供商(Identity Provider, IdP)使用的一种开放标准。使用身份提供商可实现联合单点登录(Federated Single Sign-on, SSO)原创 2023-05-18 18:00:51 · 6808 阅读 · 0 评论 -
Aexlor — 快速构建java OA业务应用框架
1、Aexlor概述Axelor Open Suite 一款 法国开源的OA 项目框架 : Axelor Open Suite 关注业务流程,减少了开发的复杂度,帮助我们快速构建应用。它是一款 MVC 框架,需要我们写很少量的 java 代码,因为它的 models,views, actions 都是在 xml 文件中定义的,框架会自动帮我们生成各部分的代码,大大提高了开发效率,只有少量的业务代码需要我们开发。功能已 “app” 的形式存在,支持安装和卸载操作。框架的文档特别丰富,并且讲的特别详细,是个原创 2021-07-17 16:39:07 · 1602 阅读 · 0 评论 -
系统设计 — CQRS应用架构模式解析
1、CQRS架构上面图中包含有很多的概念,先列举一下所涉及的概念:Command Bus(命令总线):在 Command Handler 之前,可以看作是 Command 发布者。Command Handler(命令处理器):处理来自 Command Bus 分发的请求,可以看作是 Command 订阅者、处理者。Event Bus(事件总线):一般在 Command Handler 完成之后,可以看作是 Event 发布者。Event Handler(事件处理器):处理来自 Event Bu原创 2020-11-25 00:17:11 · 811 阅读 · 1 评论 -
spring — spring中事件监听机制源码解析(五)
关于spring相关文章回顾:一、spring中Bean的初始化过程二、spring中bean的生命周期三、spring中AOP技术解析四、spring中的事件驱动机制解析一、Spring中事件驱动三大对象spring事件ApplicationEvent继承自EventObject,Spring提供了ApplicationEventPublisher接口作为事件发布者(ApplicationContext接口继承了该接口,担当着事件发布者的角色)。Spring提供了ApplicationEv原创 2020-11-23 13:05:58 · 398 阅读 · 1 评论 -
spring — spring中的事件驱动机制解析(四)
1、JAVA中的事件驱动机制JDK不仅提供了Observable类、Observer接口支持观察者模式,而且也提供了EventObject、EventListener接口来支持事件监听模式。这些类都属于java.util包下。1.1 观察者模式(JDK1.0 Observable和Observer)被观察者Observable,相当于事件源和事件,执行逻辑时通知observer即可触发oberver的update,同时可传被观察者和参数:addObserver/deleteObserver/not原创 2020-11-20 00:40:08 · 535 阅读 · 2 评论 -
springcloud — 微服务熔断治理之断路器Hystrix解析(二)
Hystrix是一个限流、降级容错框架,它能很好的保护我们的接口、应用。这很大程度上得益于它提供了fallback机制:回退(也叫降级)。本文主要讲述了Hystrix的fallback的主要特性和核心点:Hystrix的fallback回退/降级逻辑Hystrix触发fallback降级逻辑的5种情况Hystrix抛出HystrixBadRequestException异常不熔断1、Hystrix的fallback回退/降级逻辑xxxCommand系列正常的执行逻辑、以及出现异常的回退逻辑均在原创 2020-11-11 18:24:24 · 1956 阅读 · 0 评论 -
Reactor — 基于异步数据流实现Reactive响应式编程
1、概述Reactor 是Reactive Programming规范的一个具体实现(rxjava也是规范的一个实现),可以概括为:响应式编程是一种涉及数据流和变化传播的异步编程范例。这意味着可以通过所采用的编程语言轻松地表达静态(例如阵列)或动态(例如事件发射器)数据流。2、JDK8 Stream2.1 jdk8 Streamjdk stream总纲:Java 8 Stream 旨在有效地处理数据流(包括原始类型),这些数据流可以在没有延迟或很少延迟的情况下访问。它是基于拉的,只能使用一次,缺原创 2020-11-04 00:22:28 · 2041 阅读 · 0 评论 -
springcloud — 微服务远程调用组件之Feign
1、spring cloud feign概述在前面的文章中,负载均衡组件ribbon介绍中,可以发现当我们通过RestTemplate调用其它服务的API时,所需要的参数须在请求的URL中进行拼接,如果参数少的话或许我们还可以忍受,一旦有多个参数或者调用多个API时,代码上就显得比较冗余了。为了克服这些不足,Spring Cloud提供了声明式调用组件—Feign。Feign是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单。Feign提供了HTTP请求的模板,原创 2020-10-27 01:04:51 · 548 阅读 · 0 评论 -
springcloud — 微服务注册与发现之consul组件治理能力
1、consul概述Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置,与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等)。使用起来也较为简单。Consul 优势:使用 Raft 算法来保证一致性, 比复杂的 Paxos 算法更直接. 相比较而言, zookeeper 采用的是 Paxos,原创 2020-10-23 00:02:24 · 432 阅读 · 1 评论 -
springcloud — 微服务网关治理及熔断限流处理之spring cloud gateway
1、SpringCloud Gateway概述SpringCloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关。作为Netflix Zuul的替代者,Spring Cloud Gateway是一款非常实用的微服务网关,在Spring Cloud微服务架构体系中发挥非常大的作用,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。SpringCloud原创 2020-10-21 01:22:14 · 2250 阅读 · 1 评论 -
springboot — 基于springboot实现最新swagger3.0 API注册管理
1、swagger介绍对于 Rest API 来说很重要的一部分内容就是文档,Swagger 为我们提供了一套通过代码和注解自动生成文档的方法,这一点对于保证 API 文档的及时性将有很大的帮助。Swagger API 注册功能基于 OpenApi Specification 3.0 规范注册 API 元数据信息。 用户在查看 API 接口的同时,可查看到 API 出入参数据结构信息。OAS本身是一个API规范,它用于描述一整套API接口,包括一个接口是哪种请求方式、哪些参数、哪些header等,都会原创 2020-10-20 18:53:15 · 926 阅读 · 0 评论 -
springboot — 基于springboot实现定时任务
基于springboot实现定时任务springboot 框架本身的定时任务比较简单,在启动类中使用 @EnableScheduling 注解开启定时任务,会自动扫描,相当于一个开关,把这个开关开完之后,那么只要在相应的任务类中做相应的任务,那么就会被 spring boot 容器扫描到,扫描到后,根据任务定义的时间会自动运行。先搭建好Spring Boot微服务,加上这个注解 @EnableScheduling :@SpringBootApplication@EnableCaching // 启用原创 2020-10-19 10:28:14 · 287 阅读 · 0 评论 -
springcloud — 微服务熔断处理之断路器Resilience4j
断路器Resilience4j1、使用场景在现在的微服务应用中,服务间依赖性强,经常会出现一些故障,而一些故障会直接或者间接的拖垮其它的服务,造成服务器雪崩,系统就会死掉。我们需要解决的是,当某一个微服务发生蔓延当时候,不能发生故障蔓延,整个系统还能以其它某种方式正常运行。此时这里我们会涉及到几个微服务治理的概念:服务熔断当下游的服务因为某种原因导致服务不可用或响应过慢时,上游服务为了保证自己整体服务的可用性,不再继续调用目标服务,直接返回。当下游服务恢复后,上游服务会恢复调用。服务容错原创 2020-10-14 00:46:02 · 2637 阅读 · 0 评论 -
RPC — 微服务之gRPC框架技术解析
概述:gRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。RPC(remote procedure call 远程过程调用)框架实际是提供了一套机制,使得应用程序之间可以进行通信,而且也遵从server/client模型。 与许多 RPC 系统类似,gRPC 也是基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个 gRPC 服务器来处理客户端调用。在客户端拥有一个存根能够像服务端一样的方法。gR原创 2020-10-11 01:30:17 · 867 阅读 · 0 评论 -
JAVA多线程问题 — 基于Executor自定义线程池内的延迟和周期性任务
基于 Executor自定义线程池内的延迟和周期性任务基于 Executor自定义线程池内的延迟和周期性任务,它通过 ScheduledThreadPoolExecutor 类来实现,并允许运行以下这两种任务:Delayed 任务:延迟运行一个任务Executor框架提供ThreadPoolExecutor类,使用池中的线程来执行Callable和Runnable任务,这样可以避免所有线程的创建操作。当你提交一个任务给执行者,会根据执行者的配置尽快执行它。在有些使用情况下,当你对尽快执行任务不感觉兴原创 2020-10-10 00:18:53 · 981 阅读 · 0 评论 -
JAVA多线程问题 — 实现一个基于优先级的传输队列
实现一个基于优先级的传输队列Java 7 API 提供几种与并发应用相关的数据类型。重点介绍以下2种数据类型:LinkedTransferQueue:这个数据类型支持那些有生产者和消费者结构的程序。 在那些应用,你有一个或者多个数据生产者,一个或多个数据消费者和一个被生产者和消费者共享的数据类型。生产者把数据放入数据结构内,然后消费者从数据结构内提取数据。如果数据结构为空,消费者会被阻塞直到有数据可以消费。如果数据结构满了,生产者就会被阻塞直到有空位来放数据。PriorityBlockingQueu原创 2020-10-08 16:00:18 · 379 阅读 · 0 评论 -
JAVA多线程问题 — 资源队列AbstractQueuedSynchronizer原理解析
一、AQS使用场景上篇文章写了显式锁中,ReentrantLock 的公平锁和非公平锁中,其有以下三个内部类:static abstract class Sync extends AbstractQueuedSynchronizer {}final static class NonfairSync extends Sync { }final static class FairSync extends Sync { }内部类 Sync 继承自我们的 AQS 并重写了部分方法,NonfairSy原创 2020-09-16 15:42:12 · 305 阅读 · 0 评论 -
JAVA多线程问题 — 显式锁(Lock与重入锁ReentrantLock)
显式锁在Java 5.0之前,在协调对共享对象的访问时可以使用的机制只有synchronized和volatile。Java 5.0 增加了一种新的机制:ReentrantLock.它并不是一种替代内置加锁的方法,而是当内置加锁机制不适用时,作为一种可选择的高级功能。1、Lock 与 ReentranLockJava并发包中的显式锁接口和类位于包java.util.concurrent.locks下,主要接口和类有:锁接口Lock,主要实现类是ReentrantLock读写锁接口ReadWrit原创 2020-09-11 13:07:30 · 322 阅读 · 0 评论 -
JAVA多线程问题 — 任务执行Future机制与CompletionService
1、异步任务CallableExecutor框架使用Runnable作为基本的任务表示形式,但是Runnable有一定的局限性:不能返回一个值或抛出一个受检查的异常。实际中很多任务都是存在延迟的,如执行数据库查询、从网络上获取资源或执行复杂计算先进,对于这样的任务,Callable是一种更好的抽象:它认为入口(call)将返回一个值并可能抛出一个异常。callable用法和runnable一样,只不过调用的是call方法,该方法有一个泛型返回值类型,你可以任意指定。@FunctionalInterfa原创 2020-08-31 00:33:56 · 758 阅读 · 0 评论 -
JAVA多线程问题 — Executor与线程执行
1. Executor简述我们知道线程池就是线程的集合,线程池集中管理线程,以实现线程的重用,降低资源消耗,提高响应速度等。线程用于执行异步任务,单个的线程既是工作单元也是执行机制,从JDK1.5开始,为了把工作单元与执行机制分离开,Executor框架诞生了,他是一个用于统一创建与运行的接口。Executor框架实现的就是线程池的功能。线程池可以通过池看出来是一个资源集,任何池的作用都大同小异,主要是用来减少资源创建、初始化的系统开销。线程池是一种重复利用线程的技术,线程池的主要机制就是保留一定的线原创 2020-08-30 02:22:25 · 661 阅读 · 0 评论 -
mysql — 分库分表常用方案以及痛点问题
为什么要进行分库分表?当数据库的数据量过大,大到一定的程度,我们就可以进行分库分表。那么基于什么原则,什么方法进行拆分,这就是本篇所要讲的。分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成 ,将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。分库分表是什么?随着公司的业务快速发展,数据库中的数据量猛增,访问性能也变慢了,优化迫在眉睫。分析下问题出现哪里呢?关系型数据本身就比较容易形成系统瓶颈,单原创 2020-08-08 00:46:17 · 629 阅读 · 0 评论 -
JAVA集合 — HashMap与ConcurrentHashMap原理解析(二)
一、HashMapHashMap基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。值得注意的是HashMap不是线程安全的,如果想要线程安全的HashMap,可以通过Collections类的静态方法synchronizedMap获得线程安全的HashMap。Map map = Collections.原创 2020-08-04 00:13:30 · 184 阅读 · 0 评论 -
redis — RDB与AOF持久化机制(七)
redis持久化redis是一个内存数据库,数据保存在内存中,但是我们都知道内存的数据变化是很快的,也容易发生丢失。Redis还为我们提供了持久化的机制,分别是RDB(Redis DataBase)和AOF(Append Only File)。默认情况下,RDB开启,AOF关闭。一、RDBRDB持久化功能可以将服务器包含的所有数据库数据以二进制文件的形式保存到硬盘中,创建RDB类型的文件,默认为dump.rdb。服务器再次启动时会载入RDB文件,根据RDB文件的内容、还原服务器原有的数据库数据。既原创 2020-08-03 00:04:49 · 203 阅读 · 0 评论 -
JUC — ExecutorService线程必备优化手段
ExecutorService已经成为Java并发编程中常用的基础库,几乎所有用到线程 任务等执行都要委托给ExecutorService处理,下面介绍ExecutorService在开发中的优化手段:1.为线程池和线程取名当我们在调试程序从JVM线程中导出Dump时,会出现pool-N-thread-M这样的提示,这是缺省的线程池名称,其中N代表池的序列号,每次你创建一个新的线程池,这个N数字就增加1;而M是这个线程池中的线程顺序。举例, pool-2-thread-3 表示在第二个线程池中的第三个线原创 2020-07-30 13:10:39 · 649 阅读 · 1 评论 -
Reactor — NIO原理以及Reactor模式
一、JAVA NIONIO主要有三大核心部分:Channel(通道),Buffer(缓冲区), Selector。传统IO基于字节流和字符流进行操作,而NIO基于Channel和Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择区)用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个线程可以监听多个数据通道。NIO和传统IO(一下简称IO)之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从原创 2020-07-27 16:49:26 · 1112 阅读 · 0 评论 -
Zookeeper — zookeeper的概念和基础(一)
zookeeperzookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如分布式消息同步和协调机制、服务器节点动态上下线、统一配置管理、负载均衡、集群管理,分布式锁等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。1、数据结构ZooKeeper数据模型的结构与Unix文件系统很类似,整体上可以看作是一棵树,每个节点称做一个ZNode。很显然zook原创 2020-07-26 22:13:59 · 163 阅读 · 0 评论 -
spring — spring中Bean的初始化过程(一)
1、IOC 依赖注入IoC(Inverse of Control:控制反转)是一种设计思想,就是 将原本在程序中手动创建对象的控制权,交由Spring框架来管理。 IoC 在其他语言中也有应用,并非 Spring 特有。 IoC 容器是 Spring 用来实现 IoC 的载体, IoC 容器实际上就是个Map(key,value),Map 中存放的是各种对象。2、Spring BeansSpring beans 是那些形成Spring应用的主干的java对象。它们被Spring IOC容器初始化,装配原创 2020-07-21 00:47:51 · 2572 阅读 · 0 评论 -
spring — spring中AOP技术解析(三)
Spring AOP 相关面试题:描述一下Spring AOP?在Spring AOP中关注点(concern)和横切关注点(cross-cutting concern)有什么不同?AOP有哪些可用的实现?Spring中有哪些不同的通知类型(advice types)?Spring AOP 代理是什么?引介(Introduction)是什么?连接点(Joint Point)和切入点(Point Cut)是什么?织入(Weaving)是什么?AOP概念AOP(Aspect-Orient原创 2020-07-20 20:47:29 · 349 阅读 · 0 评论 -
JAVA多线程问题 — volatile
先了解有关volatile 常考面试题:1)Java 中能创建 volatile 数组吗?答案:能,只不过只是一个指向数组的引用,而不是整个数组,如果改变了引用指向的数组,将会受到volatile的保护,但是如果多个线程同时改变数组的元素,volatile关键字就不能起到保护的作用。2)volatile 能使得一个非原子操作变成原子操作吗?答案:能,一个典型的例子是在类中有一个 long 类型的成员变量。如果你知道该成员变量会被多个线程访问,如计数器、价格等,你最好是将其设置为 volati原创 2020-07-17 02:01:12 · 565 阅读 · 0 评论 -
springcloud — 微服务网关之spring cloud zuul
API网关API 网关(API Gateway)主要负责服务请求路由、组合及协议转换。API网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。通常,网关也是提供REST/HTTP的访问API。服务端通过API-GW注册和管原创 2020-07-15 12:45:23 · 360 阅读 · 0 评论 -
JVM — 虚拟机字节码执行引擎(八)
引用在 Java 虚拟机规范中制定了虚拟机字节码执行引擎的概念模型,这个概念模型称为各种虚拟机执行引擎的统一外观(Facade)。在不同的虚拟机实现里面,执行引擎在执行 Java 代码的时候可能会有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择,也可能两者兼备,甚至还可能会包含几个不同级别的编译器执行引擎。但从外观上看起来,所有的 Java 虚拟机的执行引擎都是一致的:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。一、运行时栈帧栈帧(Stack原创 2020-07-14 01:18:50 · 178 阅读 · 0 评论 -
JVM — 虚拟机类加载机制(七)
1、类加载机制虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。2、类加载的时机类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中验证、准备、解析3个部分统称为连接原创 2020-07-09 00:26:37 · 120 阅读 · 0 评论 -
JVM —JVM性能监控与故障处理工具(六)
1、jps:虚拟机进程状况工具列出当前机器上正在运行的虚拟机进程-p :仅仅显示VM 标示,不显示jar,class, main参数等信息.-m:输出主函数传入的参数. 下的hello 就是在执行程序时从命令行输入的参数-l: 输出应用程序主类完整package名称或jar完整名称.-v: 列出jvm参数, -Xms20m -Xmx50m是启动程序指定的jvm参数jps -v:进程打印jstat -gc 14096 250 20:打印进程gcjstat -gccause 14096 250原创 2020-07-07 23:38:33 · 138 阅读 · 0 评论 -
JVM — 内存分配与回收策略(五)
引言JVM中,目前使用的内配管理是分代方式,即把内存分成新生代、老生代和永久代。这里我们讲的分代管理机制是针对线程共享的内存区域,主要是堆,也包括方法区。Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决两个问题:给对象分配内存以及回收分配给对象的内存1.对象优先在Eden分配在大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够的空间进行分配时,虚拟机将发起一次Minor GC。如下代码中,尝试分配3个2MB大小和1个4MB大小的对象。在运行通过-Xms20M、-Xm原创 2020-07-07 21:37:22 · 495 阅读 · 0 评论 -
redis — 分布式环境下Redis防重复提交方案(六)
1、何为重复提交重复提交是在第一次请求已经在进行处理或处理成功的情况下,人为的进行多次操作,导致不满足幂等要求的服务多次改变状态。2、何为幂等幂等是其任意多次执行所产生的影响均与一次执行的影响相同(不用担心重复执行会对系统造成改变)。更多的情况是第一次请求不知道结果(比如超时)或者失败的异常情况下,发起多次请求,目的是多次确认第一次请求成功,却不会因多次请求而出现多次的状态变化。i...原创 2020-07-06 23:55:07 · 4376 阅读 · 0 评论 -
redis — Redis分布式锁之Redlock(五)
1、引言说到Redis分布式锁大部分人都会想到:setnx+lua,或者知道set key value px milliseconds nx。这种实现方式有3大要点(也是面试概率非常高的地方):set命令要用set key value px milliseconds nx;value要具有唯一性;释放锁时要验证value值,不能误解锁;事实上这类琐最大的缺点就是它加锁时只作用在一个Redis节点上,即使Redis通过sentinel保证高可用,如果这个master节点由于某些原因发生了主从切换原创 2020-07-04 22:42:25 · 470 阅读 · 0 评论 -
JVM — 虚拟机垃圾收集器(四)
垃圾收集器从上图可以看出堆内存的分为新生代、老年代和永久代。新生代又被进一步分为:Eden 区+Survior1 区+Survior2 区。值得注意的是,在 JDK 1.8中移除整个永久代,取而代之的是一个叫元空间(Metaspace)的区域(永久代使用的是JVM的堆内存空间,而元空间使用的是物理内存,直接受到本机的物理内存限制)。1、 新生代收集器1.1、Serial收集器Serial 收集器是最基本、发展历史最悠久的收集器,曾经(在JDK1.3.1之前)是虚拟机新生代收集的唯一选择,使用复制算原创 2020-07-03 23:02:07 · 271 阅读 · 0 评论 -
JVM — 虚拟机垃圾回收与垃圾收集算法(三)
1、Java虚拟机垃圾回收垃圾回收,或称垃圾收集(Garbage Collection,GC)是指自动管理回收不再被引用的内存数据。GC是垃圾收集的意思(Gabage Collection),Java提供的GC功能可以自动也只能自动地回收堆内存中不再使用的对象,释放资源(目的),Java语言没有提供释放已分配内存的显式操作方法(gc方法只是通知,不是立即执行)。对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。垃圾回收是一种动态存储管理技术,它自动地释放不再被程序引原创 2020-07-03 22:59:19 · 179 阅读 · 0 评论 -
JVM — JAVA堆中对象的创建(二)
一、对象的创建 在语言层面上,常仅仅是一个new关键字而已,而在虚拟机中,又是怎样的呢?类加载:虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。内存分配:类加载通过后,接着就为新对象分配内存。对象所需内存的大小在类加载完成后便可完全确定。 &原创 2020-07-01 22:59:28 · 224 阅读 · 0 评论