Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么是对象同步开销?_Java - Fatal编程技术网

Java 什么是对象同步开销?

Java 什么是对象同步开销?,java,Java,我正在阅读一本使用Java作为工作语言的算法书籍,作者指出每个对象所需的内存包括描述每个基本实例变量和开销(以及填充)所需的内存 开销包括对对象类的引用、垃圾收集信息和同步数据。我得到了前2个,但不知道同步数据包含哪些信息 我从谷歌那里了解到,这与多线程有关,但仅此而已。那么,对象的同步数据到底是什么呢 可能是指信号量。可以使用synchronized(obj){…}锁定每个对象。如果一个方法被标记为synchronized,这甚至是隐式的。哪个线程持有同步锁很重要,因为同一线程可以多次进入同步

我正在阅读一本使用Java作为工作语言的算法书籍,作者指出每个对象所需的内存包括描述每个基本实例变量和开销(以及填充)所需的内存

开销包括对对象类的引用、垃圾收集信息和同步数据。我得到了前2个,但不知道同步数据包含哪些信息


我从谷歌那里了解到,这与多线程有关,但仅此而已。那么,对象的同步数据到底是什么呢

可能是指信号量。可以使用
synchronized(obj){…}
锁定每个对象。如果一个方法被标记为synchronized,这甚至是隐式的。哪个线程持有同步锁很重要,因为同一线程可以多次进入同步块。因此,每个对象都需要存储哪个线程锁定了它,以及(取决于它的实现方式)锁定了多少次。除非您正在实现或修改JVM,否则您永远不需要知道具体的细节。知道开销的存在,以及它的大小,应该足够了。