小编Car*_*ira的帖子

Java中的synchronized构造是否在内部(以某种方式)使用硬件原语CAS操作?

我有一个很难理解什么是硬件支持synchronized声明和相关的notify(),notifyAll()wait()方法,目前所有的Java对象.

我已阅读并知道如何使用此构造,但我一直认为它们直接映射到硬件基元.

当我进一步深入研究有关并发性的书籍时,我只阅读了由硬件直接提供的比较和交换(CAS)操作.

似乎这些构造是由JVM本身创建/维护的.如果我的读数正确,则每个对象都包含一些状态,其中包含有关访问它的线程的信息.这用于定义该对象的监视器并协调多个线程对该对象的访问.
但如果是这种情况,这个状态本身如何通过并发访问来管理?它一定要管理,对吗?是CAS吗?

如果是CAS,那意味着只有一种真正的同步形式CAS.所有其他都是衍生品.那么,为什么是这台显示器构建与关联synchronized,notify(),notifyAll(),wait()开发给出的方法是,原子变量(即CAS)是在性能方面更好,也无等待?

我知道用户类的原子变量只出现在Java 5.0之后,但在此之前,Java已经监视/内部锁.他们是如何实施的?

java concurrency synchronization scala java-memory-model

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

无法在 Github 注册表中安装 npm 包

我已经向 GitHub npm 注册表发布了一个包。根据下面的屏幕截图,当我登录到 GitHub 时,我可以看到该包。

截图 1 在此处输入图片说明

截图 2 在此处输入图片说明

在本地,不同的包将前者作为依赖项。因此我有我的package.json

"dependencies": {
    "<@scope>/<package_name>": "1.2.0",
...
Run Code Online (Sandbox Code Playgroud)

根据文档,我还有一个与 authToken.npmrc位于同一目录中的文件package.json。此 authToken 具有所有必要的权限 ( delete:packages, read:packages, repo, write:packages)

//npm.pkg.github.com/:_authToken=<my_auth_token>
registry=https://npm.pkg.github.com/OWNER
Run Code Online (Sandbox Code Playgroud)

最后,我有package.json以下两个条目。尽管我认为这些是将包发布到 github 注册表所必需的,但不能安装它们,这是当前的问题。

  "publishConfig": {
    "registry": "https://npm.pkg.github.com/"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/<OWNER>/<REPO>.git"
  }
Run Code Online (Sandbox Code Playgroud)

因此,当我尝试安装软件包时遇到的错误是:

npm ERR! code E404
npm ERR! 404 Not Found: <@scope>/<package_name>@1.2.0
Run Code Online (Sandbox Code Playgroud)

当我试图通过一些有用的日志了解发生了什么时: With npm install @<scope>/<package_name>@1.2.0 --loglevels verbose,我看到:

....
npm http fetch GET 200 https://npm.pkg.github.com/OWNER/@<scope>%2f<package_name>
npm http fetch …
Run Code Online (Sandbox Code Playgroud)

github npm github-package-registry

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

Java Flight Recorder - 连续滚动记录

问题

如何将滚动记录保存到磁盘中,并具有最长期限

语境

当我的服务器出现问题时,我希望能够转储前几个小时的分析信息并对其进行分析,以了解出了什么问题。

  1. 因为我不知道事情什么时候会变得糟糕,所以 JDK 应该不断地将事件保存到磁盘。
  2. 由于服务器不经常重新启动,为了避免文件无限增长,我需要设置某种上限(年龄或大小)。

因此,换句话说,我希望 JDK 将录音连续保存到磁盘,但删除较旧的文件/录音,以使总量保持在某个阈值(年龄或大小)以下。

为此,我有以下版本选项Oracle JDK 1.8.0_144

-XX:+UnlockCommercialFeatures
-XX:+FlightRecorder
-XX:StartFlightRecording
   name=<foo-bar>
-XX:FlightRecorderOptions
   defaultrecording=true   // what does this do even?
   disk=true
   maxage=1h // this is what I thought would solve my problem! 
   repository=<path-to-where-I-want-the-recording>
   maxchunksize=5M
Run Code Online (Sandbox Code Playgroud)

我本以为该设置maxage=1h只会在磁盘上保留最后 1 小时的录制内容。但不是!已经过去 1 天了,文件没有被限制。

与此同时,这maxchunksize似乎起作用了。各种.jfr文件大约有5M。其中有很多这样的文件,因为没有强制执行年龄上限。

我究竟做错了什么?

java jvm jvm-hotspot jmc jfr

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

下划线类型的推断

[我无法用较少的冗长来解释问题.问题的核心是编译器推断出一个下划线(_)类型.特别是[_ >: SomeType <: SomeOtherType].关于何时,如何以及为何可能,我一无所知

作为一个scala练习,我试图编码给定大小的元素向量.
作为必要的步骤,我开始复制现有的自然数编码:

sealed trait Natural extends Product with Serializable {
  def +(that: Natural): Natural
}

case object Zero extends Natural {
  override def +(that: Natural): Natural = that
}

final case class Suc[N <: Natural](n: N) extends Natural {
  override def +(that: Natural): Natural = Suc(n + that)
}
Run Code Online (Sandbox Code Playgroud)

我相信下面的图表是对类型关系的忠实描绘:
在此输入图像描述 然后,我试图模拟由元素上的类型和大小上的另一个类型参数化的向量.为了解释这个问题,我假设了一个int的向量,并且只参数化了向量的大小:

import shapeless.=:!=  

sealed trait Vector[+Size <: Natural] extends Product with Serializable {
  def head: Int
  def tail: Vector[Natural]

  def plus[OtherSize …
Run Code Online (Sandbox Code Playgroud)

types scala type-inference shapeless

5
推荐指数
0
解决办法
102
查看次数

Java Flight Recorder - 异步 I/O 支持

JFR 支持异步 I/O 吗?

我正在使用 Java Flight Recorder(在 HotSpot 1.8.0_144 上)+ Mission Control 来分析应用程序。

File IO任务控制的选项卡上,我看到的“活动”比我预期的要少几个数量级,而且我知道这些活动实际上正在发生。
我实际看到的 IO“活动”似乎对应于同步文件 IO,但我不确定这是否只是巧合,或者是我的 JFR 配置错误。

我确实在一个较小的示例上尝试过此操作(见下文),感觉好像没有报告文件异步事件。

报告同步文件 IO 事件

val inputStream = new FileInputStream("/home/cmhteixeira/Desktop/output.txt")
val outputStream = new FileOutputStream("/home/cmhteixeira/Desktop/output-copy.txt")

inputStream.transferTo(outputStream)
Run Code Online (Sandbox Code Playgroud)

不报告异步文件 IO 事件

RxIo(下面使用)是一个声称使用文件异步 IO 的库。

import org.javaync.io.AsyncFiles
import java.nio.file.Paths

val inputStream = Paths.get("/home/cmhteixeira/Desktop/output.txt")
val outputStream = Paths.get("/home/cmhteixeira/Desktop/output-copy.txt")

AsyncFiles
  .readAllBytes(inputStream)
  .thenCompose(bytes => AsyncFiles.writeBytes(outputStream, bytes))
  .thenAcceptAsync(index => println("done")/* invoked on completion */)
Run Code Online (Sandbox Code Playgroud)

在上述两种情况下,当通过 Java Mission Control 吃午餐时File IO Threshold被设置为0 …

java jvm jmc jfr

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