首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深入理解synchronized

---- synchronized,相信学过java都知道它,但是面试一被问到这个,又总是答不出多少东西来。下面就将synchronized知识点列举出来,深入理解(要深入它,才能征服它)。...线程A调用同步实例方法,线程B可以同时调用同步静态方法?为什么? 我们先用代码看结果,再解释为什么。...可以String字符串来做锁对象? 可以,但没必要。代码块锁对象其实可以是任意对象,不过一般都用class或者this,并不建议string做锁对象,因为string很容易造成死锁。...因为JVM中有个常量池,比如你定义两个字符串: String str1 = "haha"; String str2 = "haha"; 这里明明是两个字符串,但其实是同一个对象,因为这样赋值String...同步方法:执行上述javap指令查看同步方法,可以发现并没有monitorenter和monitorexit指令,但是在方法开头个名为ACC_SYNCHRONIZEDflag标识,同步方法就是通过这个标识来控制同步操作

37510

JVM | 从加载到JVM内存结构

这个Class对象会包含指向元空间中元信息引用。文字还是过于抽象,画了一张图,你看:图片这里几个让人混淆地方,来为你解释一下:两个Class图中有两处Building.class。...方法区也可以进行垃圾回收。但是,完全卸载是一件苛刻事情,你还记得在第一篇文章中说AppClassLoader?...当然,如果你想要卸载,可以第二篇文章中自定义加载器。---文中重要部分解析初始化和未初始化在前面强调:什么时候会进行初始化阶段,什么会只进行加载和链接。知道这两个差异什么呢?...直接内存VSJVM内存在之前为你提到:ByteBuffer.allocateDirect() 方法,它可以使用直接内存。直接内存有什么好处?...这两种内存差距就在于堆内存多出了数据从内核缓冲区复制到Java堆内存中缓冲区步骤。---关于intern()方法在上面说到,String类型静态变量会被放到堆字符串常量池中。

18740
您找到你想要的搜索结果了吗?
是的
没有找到

【100 种语言速成】第 6 节:TclTk

是不是不小心放成了 Ruby 代码?不,绝对没有。#!指向完整路径行是由于 OSX brew 问题,如果你在不同系统上运行它,你将需要不同系统。#也用于评论。 变量 #!...Tcl 许多看起来像控制结构东西,但在某种程度上,它们只是传递包含代码此类字符串。...{ }没有定义一个块,它只是我们传递一个字符串。if, else, proc,return而不是关键字 - 它们只是命令。 所以这个糟糕代码做同样事情: #!...: 让我们回顾一下: 我们将计数器保存在全局变量中 counter 我们程序 plus_one 并且 minus_one 递增和递减计数器,因为变量默认是本地,我们需要明确告诉它global...Tcl/Tk 实际上只是作为一种历史产物感兴趣,而不是作为一种任何人都可能认真用于新软件语言。 什至很难说它对其他语言和 GUI 系统多大影响。

2.5K40

趣谈GC技术,解密垃圾回收玄学理论(一)

line 1, 什么问题?...问题2:这里实际上申请了1024个byte空间, 如果系统没有这么多空闲空间,什么问题? 答:直接报错, 这个时候要调查一下是不是存在内存泄漏。...试想一下,如果后面还用aMem访问0x1234会有什么问题? GC意义 有人可能会说:上面6个问题完全可以避免, 只要能保证malloc和free对就行啦。...这个互相引用产生了环状引用, 引用计数器一致保持在1, Object无法被回收,造成了内存泄漏。可能你会问:不就是一个环,两个Object?这一点泄漏不是大问题,谁写代码不泄漏点内存。...(目前一种优化方法就是利用编译器优化技术,减少Reference Counting引入计数问题,但也无法完全避免)。

44320

Java面试题及答案整理( 2022最新版,持续更新)

我们在编写方法就是对实现细节一种封装;我们编写一个就是对数据和数据操作封装。...17、加载为什么要使用双亲委派模式,有没有什么场景是打破了这个模式? 18、Hibernate中Sessionload和get方法区别是什么?...使用它又什么风险? 30、Java死锁以及如何避免? 31、String 属于基础数据类型? 32、如何实现对象克隆? 33、Java最顶级是哪个? 34、如何通过反射创建对象?...38、你能写出一个正则表达式来判断一个字符串是否是一个数字? 39、运行时栈帧包含哪些结构? 40、什么是Java程序?应用程序和小程序何不同?...每种方法实现原理是什么?Java 中 List 遍历最佳实践是什么? 57、String str=”i”与 String str=new String(“i”)一样

85510

Ruby学习笔记

模块可以在中引入,这样模块方法就会成为方法。可以使用这个小技巧来实现Ruby多重继承。 Ruby方法(函数)      Ruby方法区分为实例方法方法、函数性方法。...String 字符串,是程序开发中非常常见一种数据类型。...Ruby中,新建字符方式:      1、直接使用"或者'新建      2、String.new新建      3、使用%Q和%q方式新建 因为都是继承自Object,所以和Array一样,...正则表达式是为了进行较为复杂字符串匹配而出现Ruby中,创建正则表达式对象几种方法://、Regexp.new()、%r等。 Ruby中正则表达式字符与其他语言中正则表达式保持一致。...String提供了sub、gsub、scan三个方法可以接收正则表达式对象。 IO IO是每个程序语言必不可少部分,通常IO三个,标准输入、标准输出、错误输出。

1.9K20

干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

第一部分: Java基础(此部分面试题题目来自:http://www.hollischuang.com/archives/10  答案是搜集与互联网) (为了方便,把他们分了一些是必看!...标注,一些进阶型%标注,一些需要了解?标注。) 一:继承、抽象与接口区别、访问控制(private, public, protected,默认)、多态相关!...中使用字符数组保存字符串,因为final修饰,所以string是不可变。...JAVA当中所有的都是继承于Object这个,在Object中中定义了一个equals方法这个方法初始行为是比较对象内存地 址,但在一些库当中这个方法被覆盖掉了,如String,...GC三种收集方法:标记清除、标记整理、复制算法原理与特点,分别用在什么地方,如果让你优化收集方法什么思路? 6. GC收集器哪些?CMS收集器与G1收集器特点。 7.

1.3K30

前端面试宝典 v1

它有什么特性? (1)实现js文件异步加载,避免网页失去响应; (2)管理模块之间依赖性,便于代码编写和维护。 65、谈一下JS中递归函数,并且递归简单实现阶乘?...jQuery主要用于pc端,当然对应jQuerymobile用于移动端,zepto比jQuery更加小巧,主要用于移动端 5、针对 jQuery 优化方法?...移动端点击事件延迟,时间是多久,为什么会有?怎么解决这个延时?(click 300ms 延迟,为了实现safari双击事件设计,浏览器要知道你是不是要双击操作。)...你了解我们公司?说说你认识? 因为想去阿里,所以我针对阿里说 最羡慕就是在双十一购物节,350.19亿元,每分钟支付79万笔。海量数据,居然无一漏单、无一故障。太厉害了。 17....融入自己设计理念,注重用户体验,选择合适技术 18. 你所知道页面性能优化方法那些? 压缩、合并,减少请求,代码层析优化。。。 19. 除了前端以外还了解什么其它技术么?

2.3K41

什么是元编程?

关键点就在于,那个Java字段要和CSV表头列名做对应,CSV变化了,Java字段以及解析方法都要做相应得修改才可以。...此外还有数据类型问题。) 在小区对面的田老师红烧肉吃了一份盖饭以后,张大胖立刻投入到程序编写中来,一边写一边想:这是程序来生成程序啊!...可是Bill很快给它泼了一盆冷水:“不过这种模板生成方式还是有些‘低级’,每次CSV文件变化,都需要运行一下代码生成器才可以。” “那怎么办?”...”  张大胖看过虚拟机书,知道很多字节码,但是操作它们形成符合要求,实在是难以想象。 Bill 笑道:“你可以动态语言,比如Ruby,元编程很强大,实现你这个功能简直是小菜一碟。”...张大胖说道:“嗯, 这Ruby元编程能力很强大啊,可惜是,我们项目都是Java,这动态脚本语言Ruby没法直接使用,如果是微服务,对外提供是HTTPAPI,可以学学Ruby,单独写个Ruby

86840

JVM如何从入门到放弃

学习JVM目的也很简单: 能够知道JVM是什么,为我们干了什么,具体是怎么干。能够理解到一些初学时不懂东西 在面试时候谈资 能装逼 ?...二、多次执行循环体 使用热点探测来检测是否为热点代码,热点探测两种方式: 采样 计数器 目前HotSpot使用计数器方式,它为每个方法准备了两计数器方法调用计数器(Invocation...但在学习途中,已经发现了很好文章去讲解垃圾回收了。...6、加载为什么要使用双亲委派模式,有没有什么场景是打破了这个模式?...2.6加载为什么要使用双亲委派模式,有没有什么场景是打破了这个模式? 双亲委托模型重要用途是为了解决载入过程中安全性问题。

1.1K00

2019年Java面试题基础系列228道(1),快看看哪些你还不会?

70、写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现次数。 71、如何用 Java 代码列出一个目录下所有的文件?...64、Java 中,Comparator 与 Comparable 什么不同? 66、在 Java 程序中,三个 socket,需要多少个线程来处理?...我们在编写方法就是对实现细节一种封装;我们编写一个就是对数据和数据操作封装。...String str = new String("hello"); 上面的语句中变量 str 放在栈上, new 创建出来字符串对象放在堆上,而”hello”这个字面量是放在方法。...补充:我们为编写重写 hashCode 方法时,可能会看到如下所示代码,其实我们不太理解为什么要使用这样乘法运算来产生哈希码(散列码),而且为什么这个数是个素数,为什么通常选择 31 这个数?

1.1K00

JVM优化Java代码时都做了什么

比如我一条 instanceof 指令,在编译之前执行过程中,测试对象一直是同一个,那么即时编译器可以假设编译之后执行过程中还会是这一个,并且根据这个直接返回 instanceof 结果...今天要讲重点是JVM 运行时优化,在通常情况下,编译器和解释器是共同起作用,具体流程可以参考下面的示意图 JVM 会根据统计信息,动态决定什么方法被编译,什么方法解释执行,即使是已经编译过代码...锁优化 Intrinsic 机制,或者叫作内建方法,就是针对特别重要基础方法,JDK 团队直接提供定制实现,利用汇编或者编译器中间表达方式编写,然后 JVM 会直接在运行时进行替换。...这么做理由很多,例如,不同体系结构 CPU 在指令等层面存在着差异,定制才能充分发挥出硬件能力。我们日常使用典型字符串操作、数组拷贝等基础方法,Hotspot 都提供了内建实现。...第二,哪些手段可以探查这些优化具体发生情况呢? 专栏中已经陆陆续续介绍了一些,来简单总结一下并补充部分细节。 打印编译发生细节。 输出更多编译细节。

1.5K00

面试必问之JVM篇

学习JVM目的也很简单: 能够知道JVM是什么,为我们干了什么,具体是怎么干。能够理解到一些初学时不懂东西 在面试时候谈资 能装逼 ?...二、多次执行循环体 使用热点探测来检测是否为热点代码,热点探测两种方式: 采样 计数器 目前HotSpot使用计数器方式,它为每个方法准备了两计数器方法调用计数器(Invocation  ...但在学习途中,已经发现了很好文章去讲解垃圾回收了。...6、加载为什么要使用双亲委派模式,有没有什么场景是打破了这个模式?...2.6加载为什么要使用双亲委派模式,有没有什么场景是打破了这个模式? 双亲委托模型重要用途是为了解决载入过程中安全性问题。

92450

Java | 深入理解String、StringBuilder 和 StringBuffer

字符串是恒定,一旦创建出来就不会被修改,怎么理解这句话?我们可以看下 String 源码声明 ? 告诉你看到了什么?...我们先把答案贴出来,以防心急同学想急于看到结果,他们答案是 false true true false 和你预想一样?为什么会这样呢?我们先来看一下 intern 方法官方解释 ?...本地方法栈: 本地方法栈也是线程私有的数据区,本地方法栈存储区域主要是 Java 中使用 native 关键字修饰方法所存储区域 程序计数器:程序计数器也是线程私有的数据区,这部分区域用于存储线程指令地址...a 不会变,因为常量池中已经了 ab ,所以 c 不会再创建一个 ab 字符串,这是编译器做优化,为了提高效率。...String 首先来看一下 String 在继承树什么位置、实现了什么接口、父是谁,这是源码分析几大重要因素。

1.8K31

2018年伊始,系统编程语言Rust为何令程序员感到兴奋?

就像:正在用Rust语言编写一个Ruby分析器,它只通过访问其PID、内存映射以及从进程读取内存能力,可以从任意Ruby程序中提取Ruby堆栈跟踪。它已经可以工作了!...和 关于Rust方法一直是围绕折衷徘徊,正如在这个博客上讨论各块所体现那样: 喜欢这种方法(“要使它更容易使用,而不会牺牲可靠性或性能”),他们真的已经交付了。 但!...但编译器并没有告知如何解决这个问题,也没有给出任何有关做什么明确线索。 但!!!...可以在程序里.clone()搜索每个地方 ,并对它们进行审计—这个函数是否被调用了很多次?应该担心?刚刚查过程序中使用clone()每一个地方,在程序开始时候,只调用一次或两次。...大部分Firefox都是Rust编写,Rust大大提高了Firefox性能。 Rust是为C / C ++专家而设,他们希望更好关于未定义行为编译时间保证。

4.5K100

JVM 运行时数据区域,书中没有说清楚方法区、永久代、元空间

这里我们是几乎,技术发展至今,其实并非所有的对象实例都会分配到堆上,比如逃逸技术,这个我们后续文章再做解释~ 堆是垃圾收集器管理内存区域,因此一些资料中它也被称作 “GC 堆”(Garbage...下面来结合理解给大家解释下,觉得这个方法区是堆一个逻辑部分” 应该适用于 JDK 8 以前,而不适用 JDK 8 先来看 JDK 8 之前: 可以看到,JDK 8 之前,堆和方法区其实是连在一起...一些文章会把 class 常量池表称为静态常量池。 都是常量池,常量池表和运行时常量池啥关系?运行时常量池是干嘛呢?...以字符串常量池为例,字符String 既然作为 Java 中一个,那么它和其他对象分配一样,需要耗费高昂时间与空间代价,作为最基础最常用数据类型,大量频繁创建字符串,将会极大程度影响程序性能...为此,JVM 为了提高性能和减少内存开销,在实例化字符串常量时候进行了一些优化: 为字符串开辟了一个字符串常量池 String Pool,可以理解为缓存区 创建字符串常量时,首先检查字符串常量池中是否存在该字符

55320
领券