Mark

JVM系列之:对象的锁状态和同步

微笑、不失礼 提交于 2020-08-05 01:04:23
简介 锁和同步是java多线程编程中非常常见的使用场景。为了锁定多线程共享的对象,Java需要提供一定的机制来实现共享对象的锁定,从而保证一次只有一个线程能够作用于共享对象。当第二个线程进入同一个区域的时候,必须等待第一个线程解锁该对象。 JVM是怎么做到的呢?为了实现这个功能,java对象又需要具备什么样的结构呢?快来一起看看吧。 java对象头 Java的锁状态其实可以分为三种,分别是偏向锁,轻量级锁和重量级锁。 在Java HotSpot VM中,每个对象前面都有一个class指针和一个Mark Word。 Mark Word存储了哈希值以及分代年龄和标记位等,通过这些值的变化,JVM可以实现对java对象的不同程度的锁定。 还记得我们之前分享java对象的那张图吗? javaObject对象的对象头大小根据你使用的是32位还是64位的虚拟机的不同,稍有变化。这里我们使用的是64位的虚拟机为例。 Object的对象头,分为两部分,第一部分是Mark Word,用来存储对象的运行时数据比如:hashcode,GC分代年龄,锁状态,持有锁信息,偏向锁的thread ID等等。 在64位的虚拟机中,Mark Word是64bits,如果是在32位的虚拟机中Mark Word是32bits。 第二部分就是Klass Word,Klass Word是一个类型指针,指向class的元数据

一分钟了解HTML 与 CSS(乐字节,乐字节java,乐字节架构)

对着背影说爱祢 提交于 2020-08-04 14:22:15
HTML 与 CSS(1) 如果你想成为一名优秀的java架构师,看这里 → 乐字节免费公开课(腾讯课堂) 如需要跟多资料请点击右侧 → 这是一条不归路,有秃头风险,请慎重选择! HTML ​ HTML( HyperText Markup Language )就是超文本标记 语言 。"超文本"就是表示页面内可以包含非文字元素,如:图片、链接、音乐等等。 ​ 它是一种建立网页文件的语言,通过标记式的指令(Tag),将影像、声音、图片、文字等链接显示出来。这种标记性语言是因特网上网页的主要语言。 ​ HTML 网页文件可以使用记事本、写字板、HBuilder、Sublime 等编辑工具来编写,以 .htm 或 .html 为文件后缀名保存。将 HTML 网页文件用浏览器打开显示,若测试没有问题则可以放到服务器(Server)上,对外发布信息。 基础语法 标签 ​ HTML 标记是由"<"和">"所括住的指令标记,用于向浏览器发送标记指令。 ​ 主要分为:单标记指令、双标记指令(由"<起始标记>"+内容+"</结束标记>"构成)。 ​ HTML语言使用标志对的方法编写文件,既简单又方便。它通常使用"<标志名>内容</标志名>"来表示标志的开始和结束,因此在HTML文档中这样的标志对都必须是成对使用的。 ​ 为了便于理解,将HTML标记语言大致分为:基本标记、格式标记、文本标记、图像标记

bash脚本批量处理文件(一)

微笑、不失礼 提交于 2020-08-04 14:18:55
Bash脚本2.0 #!/bin/bash output_root_dir="0723weixin" data_root_dir="D:/data/"$output_root_dir config_dir="config" # speckle_name="SPEACKLEIMAGE.bmp" # ir_name="IRIMAGE.bmp" # rgb_name="RGBIMAGE.jpg" # config_name="config" speckle_name="speckle.bmp" ir_name="ir.bmp" rgb_name="rgb.jpg" config_name="config" dir=$(ls -l $data_root_dir |awk '/^d/ {print $NF}') for subdir in $dir do if [ "$subdir" != "$config_dir" ];then #echo $subdir dir1=$(ls -l $data_root_dir/$subdir |awk '/^d/ {print $NF}') for subdir1 in $dir1 do #echo $data_root_dir/$subdir/$subdir1 for((index=1;index<=10 ;index++)) do file_ir=$

美国首个新冠疫苗3期临床启动,Moderna招募3万名志愿者

天涯浪子 提交于 2020-08-04 09:41:58
  美国首个新冠疫苗 3 期临床启动,Moderna 疫苗可望年底推出。   这款疫苗三期临床试验将在 89 个试验点开展,规模多达 3 万人,以测试疫苗的安全性与效果,这也是获得监管批准前的最后一道障碍。   周一,Moderna 股价收盘大涨 9.15% 至 79.91 美元。      图 | Moderna 疫苗在纽约开始接种。(来源:美联社)    3 万人的 3 期试验   Moderna 称,一半的志愿者将接受相隔 28 天的两剂共 100 微克的疫苗接种,另一半则接受安慰剂接种,并且志愿者和医务人员均对接种的是疫苗还是安慰剂不知情。最终研究人员将确认这款疫苗是否能实现预防新冠病毒感染的目的。同时,研究者希望疫苗能减少重症患者和死亡病例。   美国国家过敏症和传染病研究所所长福奇说,志愿者中若是少于 150 例到 160 例感染的话,就可以判断 Moderna 疫苗有效,也就是这款疫苗保护了 60% 的志愿者。   Moderna 疫苗用的是全长的刺突(S)蛋白基因信息,用脂质纳米颗粒包裹了其 mRNA。刺突蛋白是病毒附着并进入到人体细胞的关键,所以被称为疫苗研发的靶标。   7 月 15 日,Moderna 公司新冠 mRNA 疫苗( mRNA-1273)1 期临床试验结果正式发布,这款疫苗在所有参试者体内均诱导出新冠病毒免疫反应。这款疫苗耐受性良好

npm ERR! errno 134

匆匆过客 提交于 2020-07-29 09:46:51
错误信息: FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory 1: 00F9150E 2: 015EAE42 3: 015E1BE1 4: 015E12DE 5: 015E9376 6: 01422862 7: 01423A69 npm ERR! code ELIFECYCLE npm ERR! errno 134 修改package.json "serve": "npx --max-old-space-size=2048 vue-cli-service serve", 重新启动,问题消失。 来源: oschina 链接: https://my.oschina.net/xiehou/blog/4307001

JVM 关于对象分配在堆、栈、TLAB的理解

纵饮孤独 提交于 2020-07-29 07:11:05
引言   我们知道,一般在java程序中,new的对象是分配在堆空间中的,但是实际的情况是,大部分的new对象会进入堆空间中,而并非是全部的对象,还有另外两个地方可以存储new的对象,我们称之为 栈上分配 以及 TLAB 栈上分配 为什么需要栈上分配?   在我们的应用程序中,其实有很多的对象的作用域都不会逃逸出方法外,也就是说该对象的 生命周期会随着方法的调用开始而开始,方法的调用结束而结束 ,对于这种对象,是不是该考虑将对象不在分配在堆空间中呢?   因为一旦分配在堆空间中,当方法调用结束,没有了引用指向该对象,该对象就需要被gc回收,而如果存在大量的这种情况,对gc来说无疑是一种负担。 什么是栈上分配?   因此,JVM提供了一种叫做栈上分配的概念,针对那些 作用域不会逃逸出方法的对象 ,在分配内存时不在将对象分配在堆内存中,而是将对象属性 打散后分配在栈(线程私有的,属于栈内存)上 ,这样,随着方法的调用结束,栈空间的回收就会随着将栈上分配的打散后的对象回收掉,不再给gc增加额外的无用负担,从而提升应用程序整体的性能    本质 :Java虚拟机提供的一项 优化技术    基本思想 : 将 线程私有 的对象 打散分配在栈上    优点 :     1)可以在函数调用结束后 自行销毁 对象,不需要垃圾回收器的介入,有效避免垃圾回收带来的负面影响     2)栈上 分配速度快

呼叫中心中继网关参数选型

随声附和 提交于 2020-07-29 05:01:24
奥科 利用AudioCodes VolPerfect技术实现卓越的语音质量 •按需可扩展的模块化体系架构 •丰富的数字(E1/T1/J1)和模拟(FXO/FXS)接口 •经济适用的低密度网关 •当电源或网络出现问题时,生命线功能可以转到PSTN •可以转换到PSTN以确保连接 •内置的OSN模块可用于运行第三方的应用程序 •内置的基于DSP的会议模块 Mediant 1000是AudioCodes使用最新技术的节约成本的可用于无线和有线的VoIP媒体网关。智能的封装与一个可堆叠的1U机箱中,被设计用于企业和小型运营商的TDM和IP网络的接口。得益于AudioCodes创新的分组技术,MEDIANT 1000能够快速投放市场,经济可靠的部署下一代网络。 Mediant 1000基于AudioCodes领先而出色的和姓媒体网关技术VoIPerfect架构,MEDIANT 1000可将传统的电话和PBX连接到IP网络。并提供出色的语音质量。除了作为纯媒体网关之外,Mediant 1000于多家网关、交换机、网守、代理服务器、IP话机、会话边界控制器以及防火墙有良好的互通性。 可根据业务增长升级 Mediant 10000在满足服务提供商升级的需求的同时也能满足较小场所的密度需求。简约的模块化网关具有良好的可扩展性,支持1,2,4E1/T1/J1接口,或1至24个模拟FXO/FXS接口

面试美团,面试官突然问我 Java “锁” ,我哭了

佐手、 提交于 2020-07-28 19:29:55
前言 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。 Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。下面给出本文内容的总体分类目录: 1. 乐观锁 VS 悲观锁 乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。在Java和数据库中都有此概念对应的实际应用。 先说概念。对于同一个数据的并发操作,悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。Java中,synchronized关键字和Lock的实现类都是悲观锁。 而乐观锁认为自己在使用数据时不会有别的线程修改数据,所以不会添加锁,只是在更新数据的时候去判断之前有没有别的线程更新了这个数据。如果这个数据没有被更新,当前线程将自己修改的数据成功写入。如果数据已经被其他线程更新,则根据不同的实现方式执行不同的操作(例如报错或者自动重试)。 乐观锁在Java中是通过使用无锁编程来实现,最常采用的是CAS算法,Java原子类中的递增操作就通过CAS自旋实现的。 根据从上面的概念描述我们可以发现:

初创公司风险投资:一场全垒打的比赛

流过昼夜 提交于 2020-07-28 18:48:15
   在不确定的经济条件下,风投这十年步履蹒跚,但始终未变的方向是寻找具有颠覆性的企业。   过去的十年里,风险资本迅猛增长。   在数十亿美元退出、硅谷初创企业爆炸式增长以及软银 1000 亿美元愿景基金大规模融资的推动下,全球年度资本投资从 2010 年到 2019 年增长了近 13 倍,达到 1600 亿美元。与此同时,超大轮投资(投资额在 1 亿美元以上)数量从 2016 年到 2018 年几乎增长了两倍。    图 | 过去十年全球 VC 投资额及投资数量统计(来源:CB Insights)   然而, 新冠肺炎带来的经济下行在一定程度上抑制了投资交易 。投资于种子轮公司的风投越来越少,据统计 2020 年 3 月,美国整体风投交易同比下降 22%。疫情让投资者在投资时更加挑剔,他们更倾向于把钱交给那些证明自己有足够实力经受住疫情带来的冲击,并在经济回升时可以实现增长的公司。   但其实风险投资在很多方面都可以抵御短期风险,原因很简单,风险投资是长期的。VC 并不一定要投资那些在短期之内会有巨大增长的初创公司;他们真正希望寻找到的是那些能在 10 年后成长为行业内顶尖的公司。   总体而言,风险投资的基本策略从来没有改变过。他们更愿意 将赌注押在具有突破性技术/产品或是从根本上改变一个行业的初创公司上 。   在这份报告中,我们将通过解释风险投资中的关键定义

Java系列:JVM中的OopMap(zz)

萝らか妹 提交于 2020-07-28 18:45:41
调用栈里的引用类型数据是GC的根集合(root set)的重要组成部分;找出栈上的引用是GC的根枚举(root enumeration)中不可或缺的一环。 JVM选择用什么方式会影响到GC的实现: 如果JVM选择不记录任何这种类型的数据,那么它就无法区分内存里某个位置上的数据到底应该解读为引用类型还是整型还是别的什么。这种条件下,实现出来的GC就会是“保守式GC(conservative GC)” 。在进行GC的时候,JVM开始从一些已知位置(例如说JVM栈)开始扫描内存,扫描的时候每看到一个数字就看看它“像不像是一个指向GC堆中的指针”。这里会涉及上下边界检查(GC堆的上下界是已知的)、对齐检查(通常分配空间的时候会有对齐要求,假如说是4字节对齐,那么不能被4整除的数字就肯定不是指针),之类的。然后递归的这么扫描出去。 保守式GC的好处是相对来说实现简单些,而且可以方便的用在对GC没有特别支持的编程语言里提供自动内存管理功能。Boehm-Demers-Weiser GC是保守式GC中的典型代表,可以嵌入到C或C++等语言写的程序中。 小历史故事: 微软的JScript和早期版VBScript也是用保守式GC的;微软的JVM也是。VBScript后来改回用引用计数了。而微软JVM的后代,也就是.NET里的CLR,则改用了完全准确式GC。 为了赶上在一个会议上发布消息