小编Esp*_*osa的帖子

JVM如何确保新对象的内存分配的线程安全性

让我们假设这将在一个真正的并行环境中同时发生,一个VM:

// Thread 1:
  new Cat()

// Thread 2:
  new Dog()

// Thread 3:
  new Mouse()
Run Code Online (Sandbox Code Playgroud)

JVM如何确保堆上内存分配的线程安全性?

堆是所有线程的一个,它有自己的内部数据.

为简单起见,假设一个简单的压缩垃圾收集器实现,-XX:+ UseSerialGC -XX:+ UseParallelGC,带有简单的增量指针,用于标记可用空间的开始和Eden(堆)中的一个连续可用空间.

当为Cat,DogMouse实例分配堆空间时,线程之间必定存在某种同步,否则它们很容易最终覆盖彼此.这是否意味着每个运算符都隐藏在一些同步块中?这样,许多"无锁"算法实际上并不完全无锁;)

我假设内存分配是由应用程序线程本身同步进行的,而不是由另一个专用线程进行的.

我知道TLAB或线程本地分配缓冲区.它们允许线程在Eden中具有单独的存储区域以进行分配,因此不需要同步.但我不确定TLAB是否默认设置,这是一个非常模糊的HotSpot功能.注意:不要混淆TLAB和ThreadLocal变量!

我还假设,对于更复杂的垃圾收集器,如G1或非压缩垃圾收集器,必须维护更复杂的堆结构数据,如CMS的空闲块列表,因此需要更多同步.

更新:请让我澄清一下.我接受HotSpot JVM实现的答案以及有和没有活动TLAB的变体.

更新:根据我的快速测试,TLAB在我的64位JDK 7上默认设置为串行,并行和CMS垃圾收集器,但不适用于G1 GC.

java concurrency multithreading jvm new-operator

16
推荐指数
2
解决办法
1838
查看次数

如何从 Gradle 调用自定义 Java 方法

请问,在 Gradle 构建脚本中调用 Java 方法最方便的方法是什么?该方法包含我想在构建期间使用的功能;一个过于复杂的功能,无法成为脚本内的 Groovy 方法,但又不足以命令完整的自定义 Gradle 插件。

我的问题不是关于从 Gradle 运行 Java 应用程序。这将涉及分叉 JVM,并且没有简单的方法可以将输出发布回 Gradle,而我需要该输出。

最初我的代码位于 src/main/java 中,但必须尽早编译才能从 Gradle 构建脚本中调用。

然后我尝试将构建助手类移动到一个子模块项目,一个单类子模块,希望在调用主构建脚本之前构建子模块;我在那里放了:

 buildscript {
    dependencies {
       classpath 'this.project:build-helper:1.0-SNAPSHOT'
    }
 }
Run Code Online (Sandbox Code Playgroud)

build-helper子项目显然不是首先构建的,尽管作为settings.gradle第一个并且构建失败,因为依赖关系未被识别。看起来 buildscript 是在构建子模块之前评估的,在其他任何事情之前。噢!

java gradle

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

解释Notepad ++的DLL劫持是如何工作的

Notepad ++承认这个DLL劫持漏洞:https: //wikileaks.org/ciav7p1/cms/page_26968090.html 我没有从描述中得到它是如何工作的.作为Notepad ++用户,我很担心,作为开发人员,我自己也很好奇.

这里有一个通用的DLL劫持解释 - 什么是dll劫持?.有点太笼统了.

这是否意味着为了有效利用此漏洞,攻击者必须首先控制我的PC,使用不同的攻击向量,将恶意版本SciLexer.dll(?)植入DLL搜索路径?

如果攻击者已经对我的PC有这样的权力,为什么他会打扰Notepad ++.为什么不去追求更多核心库甚至系统库?

我也没有在WikiLeak文本中得到这句话的含义:对于我的生活,我无法调用此函数[Scintilla_DirectFunction(..)].如果这是该DLL中唯一导出的函数,那么唯一一个由Notepad核心调用的函数,那怎么会被调用呢?这也意味着也不会调用恶意代码.

是否被SciLexer.dll实际检测到,被CIA或其他任何人攻击,或者只是被发现的可能性?

另外Notepad ++团队在最新版本7.3.3中,在发行说明中声称他们"修复了CIA Hacking Notepad ++问题".有什么想法他们能做到吗?

security dll notepad++

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