小编Jak*_*ake的帖子

什么是RMI TCP连接

我正在用java创建一个桌面应用程序,并且正在做一些内存优化.这让我遇到了在JVM中运行的两个线程,两个线程都命名为:

RMI TCP连接

他们都非常有助于堆增长(从我的角度来看)

现在我不太了解,但TCP听起来像是一些互联网的东西.从我在谷歌上找到的,它与互联网上的序列化/反序列化有关.

但我的应用程序不需要互联网,所以我想知道两件事:

  1. 它们是什么以及它们在我的JVM中做了什么?
  2. 我可以以某种方式摆脱它们吗?

在此输入图像描述

我的工具是"Java visualVM".虽然我已经想到这两个线程是由于使用这个工具而产生的,在这种情况下我会觉得有点愚蠢.

java memory heap optimization java-threads

14
推荐指数
1
解决办法
1万
查看次数

java中的volatile关键字真的与缓存有关吗?

从我读过的内容来看,java 中的“volatile”关键字确保线程始终获取特定指针的最新值,通常通过直接从/向内存读取/写入以避免缓存不一致。

但为什么需要这样做呢?据我所知,这已经在硬件级别上完成了。如果我从我的系统架构类中没有记错的话,更新内存位置的处理器核心会向其他处理器的缓存发送无效信号,迫使它们在需要时从内存中获取这些行。或者,如果情况相反——如果处理器获取内存,它将强制其他缓存的缓存(但未写入)行首先刷新到内存中。

我唯一的理论是,尽管我已经阅读了所有解释,但这实际上与缓存完全无关。它与 JVM 中的数据可以驻留在两个地方有关 - 线程的本地堆栈和堆。并且 Java 线程可以将其堆栈用作一种缓存。我会买那个,但这也意味着对驻留在堆上的数据使用 volatile 是无用的,因为它由所有线程共享并遵守硬件实现的一致性?

例如:

public final int[] is = new int[10];
Run Code Online (Sandbox Code Playgroud)

访问 is 的数据将始终导致获得最新的数据,因为数据驻留在堆上。然而,指针是一个原语,可能会成为堆栈问题的受害者,但由于它是最终的,我们没有这个问题。

我的假设正确吗?

编辑:据我所知,这不是重复的。所谓的重复线程是那些误导性的答案之一,它说它与缓存一致性有关。我的问题不是 volatile 用于什么,也不是如何使用它。它正在测试一种理论,并且进行更深入的测试。

java caching volatile

1
推荐指数
1
解决办法
807
查看次数

标签 统计

java ×2

caching ×1

heap ×1

java-threads ×1

memory ×1

optimization ×1

volatile ×1