首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

测试和优化Java应用程序的内存使用

使用 Spring PetClinic 进行实验 我使用 Spring PetClinic 应用程序来收集本文的测试结果。源代码可在 GitHub 上获得,其中包括 JMeter 测试脚本。...关于 JMeter Spring PetClinic 项目包含一个 JMeter 测试。...UI 中,单击文件 > 打开,然后选择文件 spring-petclinic/src/test/jmeter/petclinic_test_plan.jmx。...使用 Zulu 的结果 当我们使用 Zulu(OpenJDK 的一个版本)生成 GC 日志时,我们在日志文件中获得与大多数其他发行版相同的数据。...对于一般大小调整,Zing 的 Live Set 图表也很重要,因为它显示了活动对象的数量,例如,不包括未引用的对象,也称为垃圾。 结论 垃圾收集器日志提供了检查应用程序需要多少内存的正确指标。

9910

Spring Data JDBC、引用和聚合

之前的博客文章中,我、描述了如何设置和使用 Spring Data JDBC。...它有一个对象,称为聚合根,它是唯一允许接触或引用聚合内部的对象。聚合根是传递给存储库以持久化聚合的内容。 这带来了一个问题:Spring Data JDBC 如何确定哪些是聚合的一部分,哪些不是?...答案很简单:您可以通过遵循非瞬态引用从聚合根访问的所有内容都是聚合的一部分。 考虑到这一点, 的行为是OrderRepository完全合理的。 OrderItem实例是聚合的一部分,因此会被删除。 ...它还编纂了最终一致性的一个版本,其中“最终”与事务的结束相关联。这也允许引用从不存在的聚合,只要它只在事务期间发生。这对于避免大量基础设施代码只是为了满足外键和非空约束可能很有用。...另请注意,作者集是一个私有字段,实例的AuthorRef实例化发生在私有方法中。所以聚合之外的任何东西都不能直接访问它。Spring Data JDBC 绝不要求这样做,但 DDD 鼓励这样做。

1.1K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    从应用感知能力谈 Tanzu Application Platform 的约定服务

    在解答您的疑惑之前,我们先一起来看一个普遍的场景,假设需要在 Kubernetes 集群中启动一个 Nginx 的服务,我们会怎么做,如下所示应该是解题思路之一吧?...·   如果在外部发布,应该创建一个 Ingress  资源对象。 ·   容器中的应用程序已经以 root 用户启动。 ·   没有设置资源限制,因此存在无限 CPU /  内存使用的风险。...Convention Service 在 TAP Cartographer 软件供应链中的位置,如下所示,在完成 CI 流程后,供应链会进行平台装配的工作,并通过启动 PodIntent 的资源对象将约定注入至配置文件中...这确保最终运行的 pod 在实时更新会话期间不会缩小到 0。...Boot Convention 将应用于 PodTemplateSpec 对象: ·   spring-boot Spring Boot Convention 在 PodTemplateSpec 中添加一个标签

    79710

    Spring Data JDBC参考文档

    跨聚合的引用不能保证在任何时候都是一致的。他们保证最终会变得一致。 每个聚合都有一个聚合根,它是聚合的实体之一。聚合仅通过该聚合根上的方法进行操作。这些是前面提到的原子变化。...对象创建 Spring Data 会自动尝试检测要用于具体化该类型对象的持久实体的构造函数。解析算法的工作原理如下: 如果只有一个构造函数,则使用它。...之后,所有尚未由构造函数填充的非瞬态属性都在实体实例上设置。...为此,我们使用以下算法: 如果属性是不可变的但公开了一个with…方法(见下文),我们使用该with…方法创建一个具有新属性值的新实体实例。...该类公开了一个withId(…)用于设置标识符的方法,例如,当一个实例插入到数据存储中并生成一个标识符时。调用withId(…)创建一个新Person对象。

    1.4K30

    Flowable工作流入门

    大家好,又见面了,我是你们的朋友全栈君。...这些是包含流程实例,用户任务,变量,作业等的运行时数据的运行时表。Flowable仅在流程实例执行期间存储运行时数据,并在流程实例结束时删除记录。这使运行时表保持小而快。...HistoryService: 暴露了可流动的引擎收集的所有历史数据例如流程实例启动时间,执行哪些任务,完成任务所需的时间,每个流程实例中遵循的路径,等等。此服务主要公开查询功能以访问此数据。...每个变量都存储在ACT_RU_VARIABLE数据库表的一行中。 所有startProcessInstanceXXX方法都有一个可选参数,用于在创建和启动流程实例时提供变量。...例子: 假设Fetch Data服务任务调用一些远程服务(例如,使用REST)。我们还假设需要一些配置参数,并且在启动流程实例时需要提供这些参数。

    2K10

    Spring Boot 3.2 和 Spring Framework 6.1添加对 Java 21、虚拟线程和 CRaC 的支持

    在生产环境中,这是一个无关紧要的考量因素,因为大多数的 Java 应用程序已经在 Linux 上运行。...CRaC 在 60 秒的基准测试中胜出,从 896 请求 / 秒开始,到 1500 请求 / 秒结束。目前,没有超过 60 秒范围的数据。...Spring 的文档中有详细的描述。 OpenJDK JVM 会在每次启动时计算可用类及其成员的列表。OpenJDK 的 CDS 特性会将这些信息保存在一个文件中,并在以后运行时进行加载。...他测量了在 Spring PetClinic 中组合使用 Spring AOT 和 CDS 所缩短的启动时间。...只有 Spring Boot 2.7 作为最后一个 2.x 版本,获得了额外 6 个月的免费和商业支持,对免费支持也随着 Spring Boot 3.2 的发布而结束,对 2.7 的商业支持将持续到 2025

    43110

    2022 java高级面试题及答案

    ),而解析阶段则不一定(它在某些情况下可以在初始化阶段之后再开始,这是为了支持java语言的运行时绑定) 在以下几种情况下,会对未初始化的类进行初始化: 创建类的实例 对类进行反射调用的时候,如果类没有进行过初始化...这里的根集一般包括java堆中引用的对象,方法区常量池的引用对象。 总之,jvm在做垃圾回收的时候,会检查堆中的所有对象是否会被这些根集对象引用,不能够被引用的对象就会被垃圾收集器回收。...说一下springIOC IOC控制反转也叫依赖注入,我理解的是它就是一个生产和管理bean的一个容器,你自己不需要通过new去生成对象而是通过spring bean的工厂来生成所需要的对象。...原理 将对象交给容器管理,你只需要在spring配置文件中配置对应的bean以及设置相关的属性,让spring容器来生成类的实例对象以及管理对象。...“方面”的代码 Spring的Scope有以下几种,通过@Scope注解来实现: (1)Singleton:一个Spring容器中只有一个Bean的实例,此为Spring的默认配置,全容器共享一个实例。

    3.6K21

    SqlAlchemy 2.0 中文文档(二十五)

    如果给定的Connection在事务中开始但没有保存点,则使用"rollback_only"。...这是因为对象可能通过属性突变接收到更改事件,从而将其置于 Session.dirty 中,但最终状态与从数据库加载的状态相同,在这里没有净更改。...Session.merge()检查源实例的主键属性,并尝试将其与会话中具有相同主键的实例进行协调。如果在本地找不到,则尝试根据主键从数据库加载对象,如果找不到,则创建一个新实例。...这是因为对象可能已通过属性变化接收到更改事件,从而将其放置在 Session.dirty 中,但最终状态与从数据库加载的状态相同,在这里没有净变化。...Session.merge() 检查源实例的主键属性,并尝试将其与会话中具有相同主键的实例进行协调。如果在本地找不到,则尝试根据主键从数据库加载对象,如果找不到,则创建一个新实例。

    19910

    挑战 10 道超难 Java 面试题

    如果你不相信, 那就比较一下下面的传统双检查锁定单例和枚举单例的代码: 在 Java 中使用枚举的单例 这是我们通常声明枚举的单例的方式,它可能包含实例变量和实例方法,但为了简单起见,我没有使用任何实例方法...任何序列化该类的尝试都会因NotSerializableException而失败,但这可以通过在 Java中 为 static 设置瞬态(trancient)变量来轻松解决。...如果尝试序列化实现可序列化的类的对象,但该对象包含对不可序列化类的引用,则在运行时将引发不可序列化异常 NotSerializableException, 这就是为什么我始终将一个可序列化警报(在我的代码注释部分中...13) 在 Java 序列化期间,哪些变量未序列化? 这个问题问得不同, 但目的还是一样的, Java开发人员是否知道静态和瞬态变量的细节。...虽然可以在子类中声明一个具有相同名称和方法签名的方法,看起来可以在Java中覆盖静态方法,但实际上这是方法隐藏。

    75310

    听说这10道Java面试题90%的人都不会!!!

    如果你不相信, 那就比较一下下面的传统双检查锁定单例和枚举单例的代码: 在 Java 中使用枚举的单例 这是我们通常声明枚举的单例的方式,它可能包含实例变量和实例方法,但为了简单起见,我没有使用任何实例方法...任何序列化该类的尝试都会因NotSerializableException而失败,但这可以通过在 Java中 为 static 设置瞬态(trancient)变量来轻松解决。...如果尝试序列化实现可序列化的类的对象,但该对象包含对不可序列化类的引用,则在运行时将引发不可序列化异常 NotSerializableException, 这就是为什么我始终将一个可序列化警报(在我的代码注释部分中...13) 在 Java 序列化期间,哪些变量未序列化? 这个问题问得不同, 但目的还是一样的, Java开发人员是否知道静态和瞬态变量的细节。...虽然可以在子类中声明一个具有相同名称和方法签名的方法,看起来可以在Java中覆盖静态方法,但实际上这是方法隐藏。

    64120

    10个最难回答的Java面试题

    如果你不相信, 那就比较一下下面的传统双检查锁定单例和枚举单例的代码: 在 Java 中使用枚举的单例 这是我们通常声明枚举的单例的方式,它可能包含实例变量和实例方法,但为了简单起见,我没有使用任何实例方法...任何序列化该类的尝试都会因NotSerializableException而失败,但这可以通过在 Java中 为 static 设置瞬态(trancient)变量来轻松解决。...如果尝试序列化_实现了可序列化接口的类_的对象,但该对象包含对不可序列化类的引用,则在运行时将引发不可序列化异常 NotSerializableException, 这就是为什么我始终将一个可序列化警报...13) 在 Java 序列化期间,哪些变量未序列化? 这个问题问得不同, 但目的还是一样的, Java开发人员是否知道静态和瞬态变量的细节。...虽然可以在子类中声明一个具有相同名称和方法签名的方法,看起来可以在Java中覆盖静态方法,但实际上这是方法隐藏。

    81920

    挑战 10 道超难 Java 面试题

    如果你不相信, 那就比较一下下面的传统双检查锁定单例和枚举单例的代码: 在 Java 中使用枚举的单例 这是我们通常声明枚举的单例的方式,它可能包含实例变量和实例方法,但为了简单起见,我没有使用任何实例方法...任何序列化该类的尝试都会因NotSerializableException而失败,但这可以通过在 Java中 为 static 设置瞬态(trancient)变量来轻松解决。...如果尝试序列化实现可序列化的类的对象,但该对象包含对不可序列化类的引用,则在运行时将引发不可序列化异常 NotSerializableException, 这就是为什么我始终将一个可序列化警报(在我的代码注释部分中...13) 在 Java 序列化期间,哪些变量未序列化? 这个问题问得不同, 但目的还是一样的, Java开发人员是否知道静态和瞬态变量的细节。...虽然可以在子类中声明一个具有相同名称和方法签名的方法,看起来可以在Java中覆盖静态方法,但实际上这是方法隐藏。

    69820

    来一场Java高级的面试,看看自己啥水准

    如果你不相信, 那就比较一下下面的传统双检查锁定单例和枚举单例的代码: 在 Java 中使用枚举的单例 这是我们通常声明枚举的单例的方式,它可能包含实例变量和实例方法,但为了简单起见,我没有使用任何实例方法...任何序列化该类的尝试都会因NotSerializableException而失败,但这可以通过在 Java中 为 static 设置瞬态(trancient)变量来轻松解决。...如果尝试序列化实现可序列化的类的对象,但该对象包含对不可序列化类的引用,则在运行时将引发不可序列化异常 NotSerializableException, 这就是为什么我始终将一个可序列化警报(在我的代码注释部分中...13) 在 Java 序列化期间,哪些变量未序列化? 这个问题问得不同, 但目的还是一样的, Java开发人员是否知道静态和瞬态变量的细节。...虽然可以在子类中声明一个具有相同名称和方法签名的方法,看起来可以在Java中覆盖静态方法,但实际上这是方法隐藏。

    1K10

    史上最难10道 Java 面试题!

    如果你不相信, 那就比较一下下面的传统双检查锁定单例和枚举单例的代码: 在 Java 中使用枚举的单例 这是我们通常声明枚举的单例的方式,它可能包含实例变量和实例方法,但为了简单起见,我没有使用任何实例方法...任何序列化该类的尝试都会因NotSerializableException而失败,但这可以通过在 Java中 为 static 设置瞬态(trancient)变量来轻松解决。...如果尝试序列化实现可序列化的类的对象,但该对象包含对不可序列化类的引用,则在运行时将引发不可序列化异常 NotSerializableException, 这就是为什么我始终将一个可序列化警报(在我的代码注释部分中...13) 在 Java 序列化期间,哪些变量未序列化? 这个问题问得不同, 但目的还是一样的, Java开发人员是否知道静态和瞬态变量的细节。...虽然可以在子类中声明一个具有相同名称和方法签名的方法,看起来可以在Java中覆盖静态方法,但实际上这是方法隐藏。

    85230

    挑战10个最难回答的Java面试题(附答案)

    如果你不相信, 那就比较一下下面的传统双检查锁定单例和枚举单例的代码: 在 Java 中使用枚举的单例 这是我们通常声明枚举的单例的方式,它可能包含实例变量和实例方法,但为了简单起见,我没有使用任何实例方法...任何序列化该类的尝试都会因NotSerializableException而失败,但这可以通过在 Java中 为 static 设置瞬态(trancient)变量来轻松解决。...如果尝试序列化实现可序列化的类的对象,但该对象包含对不可序列化类的引用,则在运行时将引发不可序列化异常 NotSerializableException, 这就是为什么我始终将一个可序列化警报(在我的代码注释部分中...13) 在 Java 序列化期间,哪些变量未序列化? 这个问题问得不同, 但目的还是一样的, Java开发人员是否知道静态和瞬态变量的细节。...虽然可以在子类中声明一个具有相同名称和方法签名的方法,看起来可以在Java中覆盖静态方法,但实际上这是方法隐藏。

    1.4K40

    挑战 10 道超难 Java 面试题

    如果你不相信, 那就比较一下下面的传统双检查锁定单例和枚举单例的代码: 在 Java 中使用枚举的单例 这是我们通常声明枚举的单例的方式,它可能包含实例变量和实例方法,但为了简单起见,我没有使用任何实例方法...任何序列化该类的尝试都会因NotSerializableException而失败,但这可以通过在 Java中 为 static 设置瞬态(trancient)变量来轻松解决。...如果尝试序列化实现可序列化的类的对象,但该对象包含对不可序列化类的引用,则在运行时将引发不可序列化异常 NotSerializableException, 这就是为什么我始终将一个可序列化警报(在我的代码注释部分中...13) 在 Java 序列化期间,哪些变量未序列化? 这个问题问得不同, 但目的还是一样的, Java开发人员是否知道静态和瞬态变量的细节。...虽然可以在子类中声明一个具有相同名称和方法签名的方法,看起来可以在Java中覆盖静态方法,但实际上这是方法隐藏。

    73420

    Java 大牛看过来,挑战10道超难 Java 面试题!

    如果你不相信, 那就比较一下下面的传统双检查锁定单例和枚举单例的代码: 在 Java 中使用枚举的单例 这是我们通常声明枚举的单例的方式,它可能包含实例变量和实例方法,但为了简单起见,我没有使用任何实例方法...任何序列化该类的尝试都会因NotSerializableException而失败,但这可以通过在 Java中 为 static 设置瞬态(trancient)变量来轻松解决。...如果尝试序列化实现可序列化的类的对象,但该对象包含对不可序列化类的引用,则在运行时将引发不可序列化异常 NotSerializableException, 这就是为什么我始终将一个可序列化警报(在我的代码注释部分中...13) 在 Java 序列化期间,哪些变量未序列化? 这个问题问得不同, 但目的还是一样的, Java开发人员是否知道静态和瞬态变量的细节。...虽然可以在子类中声明一个具有相同名称和方法签名的方法,看起来可以在Java中覆盖静态方法,但实际上这是方法隐藏。

    72931

    Spring认证中国教育管理中心-Spring Data R2DBC框架教程五

    16.1.1.对象创建 Spring Data 会自动尝试检测要用于具体化该类型对象的持久实体的构造函数。解析算法的工作原理如下: 如果只有一个构造函数,则使用它。...除非实体的构造函数已经填充(即通过其构造函数参数列表消耗),标识符属性将首先填充以允许循环对象引用的解析。之后,所有尚未由构造函数填充的非瞬态属性都在实体实例上设置。...财产人口内部结构 与我们在对象构造中的优化类似,我们也使用 Spring Data 运行时生成的访问器类与实体实例进行交互。...该类公开了一个withId(…)用于设置标识符的方法,例如,当一个实例插入到数据存储中并生成一个标识符时。调用withId(…)创建一个新Person对象。...,但null在构造函数中设置为。

    1.1K10

    Flowable工作流入门看这篇就够了

    如果用过Activity的同学, 就会发现表名很多相同的, 但Flowable的表多了很多, 毕竟两者早期是同一个产品。 表的功能一般可以通过第二个词语缩写来进行区分。...这是运行时的表存储着流程变量,用户任务,变量,职责(job)等运行时的数据。flowable只存储实例执行期间的运行时数据,当流程实例结束时,将删除这些记录。这就保证了这些运行时的表小且快。...就是这些表包含着历史的相关数据,如结束的流程实例,变量,任务,等等。 3.5 ACT_GE_* 普通数据,各种情况都使用的数据。 4....在Spring Boot项目中, 这些对象都会被Spring容器管理, 可以直接引用 public class MyTestController { @Autowired private ProcessEngine...6.3 TaskService 人类用户参与操作的任务, 即我们开发的软件中"我的待办任务"等内容. 查询分派给用户或组的任务 创建独立运行(standalone)任务。

    7K40

    Spring认证中国教育管理中心-Apache Solr 的 Spring 数据教程二

    原标题:Spring认证中国教育管理中心-Apache Solr 的 Spring 数据教程二(Spring中国教育管理中心) 3.6.文件映射 尽管 SolrJ 中已经支持实体映射,但 Spring...对象创建 Spring Data 会自动尝试检测要用于具体化该类型对象的持久实体的构造函数。解析算法的工作原理如下: 如果只有一个构造函数,则使用它。...物业人口 一旦创建了实体的实例,Spring Data 就会填充该类的所有剩余持久属性。除非实体的构造函数已经填充(即通过其构造函数参数列表消耗),标识符属性将首先填充以允许循环对象引用的解析。...之后,所有尚未由构造函数填充的非瞬态属性都在实体实例上设置。...,但null在构造函数中设置为。

    1.2K20
    领券