“ 给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里的数据包括:运行日志、异常堆栈、GC日志、线程快照(threaddump/javacore文件)、堆转储快照(heapdump/hprof文件)等。经常使用适当的虚拟机监控和分析的工具可以加快我们分析数据和定位解决问题的速度,但我们在学习工具前,也应当意识到工具永远都是知识技能的一层包装,没有什么工具是“秘密武器”,学会了就能包医百病”
一、相似点 这两种同步方式有很多相似之处,它们都是加锁方式同步,而且都是阻塞式的同步,也就是说当如果一个线程获得了对象锁,进入了同步块,其他访问该同步块的线程都必须阻塞在同步块外面等待,而进行线程阻塞和唤醒的代价是比较高的(操作系统需要在用户态与内核态之间来回切换,代价很高,不过可以通过对锁优化进行改善)。 二、区别 1、区别 1)Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现; 2)synchronized在发生异常时,会自动释放线程占有的锁,
java 版本 51.0_Unsupported major.minor version 51.0(jdk版本错误)
本文是对 synchronized 关键字使用、底层原理、JDK1.6之后的底层优化以及和ReenTrantLock对比做的总结。如果没有学过 synchronized 关键字使用的话,阅读起来可能比较费力。两篇比较基础的讲解 synchronized 关键字的文章:
小白:这是一个java的关键字,用来控制并发的,被它锁住的代码同一时刻只能有一个线程访问。
1. 为什么要进行.class文件进行JDK版本的确定? 由于一个项目不只由一个人维护,可能会经过多个人的手里,对于项目比较老的,在项目交接的时候还没有项目文档(JDK编译运行的版本还不确定),所以这个时候就可以通过分析生产环境的JDK版本来确认本地开发环境;JDK的版本是向下兼容的,所有你在核对完.class的版本后就可以选择对应的JDK版本或高于当前JDK版本;还有就是由于多人的维护造成本地和生产环境还不一致,这个时候就只能进行.class文件的替换了,所以这就要求在本地开发完毕后生成和生产环境同.class的JDK版本,然后进行部分.class文件的替换。
Synchronized实现同步的方式有三种:偏向锁、轻量级锁、重量级锁。本文会从理论和代码实践两方面阐述三种锁的实现细节和原理。
程序计数器:较小的内存空间, 当前线程执行的字节码的行号指示器;各线程之间独立存储,互不影响;
目前mac上有一些软件还不支持jdk1.7,只能卸载1.7,恢复到1.6,下面二个链接是官网给出的卸载方法: http://www.java.com/zh_CN/download/help/mac_uninstall_java.xml http://docs.oracle.com/javase/7/docs/webnotes/install/mac/mac-jdk.html#uninstall 简单来讲,就是二个步骤,以管理员身份登录后: 1. finder中搜索 JavaAppletPlugin.plug
下载低版本jmeter版本4.0后,打开提示默认的jdk1.8不支持,所以需要安装jdk1.6。
进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个即是一个进程从创建、运行到消亡的过程。
1. 准备一台 ubuntu linux(比较简单,很容易在网上下载到,安装也很简单)
上篇我们讲述了如何使用VMware安装CentOS系统,接下来就看如何安装我们最为熟悉的jdk吧!安装前先看看系统上有没有安装过jdk,输入java -version,如果查询出了其他版本的jdk版本,就先删除了,笔者这里使用jdk1.6。说开始就开始,下面开始说明安装步骤吧。
在做文本挖掘的时候,会发现分词时候rJava是必须要迈过去的坎儿,所以进行了总结: 第一步:安装rJava和jdk install.packages("rJava") JDK: D:\jdk R: D:\spss 21\R-3.0.1 1.配置好java 2.配置rJava 第二步:设置环境变量 ,涉及java调用R(我的电脑右键-属性-高级设置-环境变量) CLASSPATH=D:\spss 21\R-3.0.1\library\rJava\jri; PATH=D:\spss 21\R-3.0.
在做文本挖掘的时候,会发现分词时候rJava是必须要迈过去的坎儿,所以进行了总结:
oracle官网从jdk1.7开始才有Mac版的安装包,但有的项目必须使用jdk1.6,所以必须从其他途径安装jdk1.6了。查了下发现,要想安装jdk1.6,可以直接从apple的开发者网站下安装提供的java支持包,具体下载地址 http://connect.apple.com/
系统: Ubuntu 14.04 64bit Hadoop版本: Hadoop 2.5.2 (stable) JDK版本: JDK 1.6 虚拟机及Ubuntu安装 1. 下载并安装 VMware w
我们都知道多线程应该是大部分 Java 程序员最难啃的一块骨头之一,这部分内容的难度跨度大,难实践,并且市面上的参考资料的质量也层次不齐。
系统环境及相关安装包: CentOS6.5 64位系统 tomcat6 :apache-tomcat-6.0.39.tar.gz mysql5.1.17 :rpm包 jdk1.6 :jdk-6u29-linux-x64.bin jdbc :mysql-connector-java-3.1.13-bin.jar
jmap -heap 1234 查看进程号为1234的Java程序的整个jvm内存状态
可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称(main函数所在类)以及这些进程的本地虚拟机唯一ID(Local Virtual Machine Identifier,LVMID)。其常用选项见下表;
本来使用的是jdk1.8,由于其他原因需要使用jdk1.6,在安装完jdk1.6后打开eclipse就会报错: Version 1.6.0_43 of the JVM is not suitable for this product.Version:1.7 or greater is required.
在JVM中,为了减少字符串对象的重复创建,维护了一块特殊的内存空间,这块内存就被称为字符串常量池。
“可重入锁”概念是:自己可以再次获取自己的内部锁。比如,一个线程获得了某个对象的锁,此时这个对象锁还没有释放,当其再次想要获取这个对象的锁时,还可以再获取的;如果不可锁重入的话,就会造成死锁;同一个线程每次获取锁,锁的计数器都自增1,所以要等到锁的计数器下降为0时,才能最终释放锁。
排查问题的整个过程相当耗时,这里,我就直接说定位到的问题吧。后面,我会单独写一篇详细的排查问题过程的文章!
读者可以先自行推演一下答案 ,是不是所有的JDK版本都是一样的? 还是说不同的JDK版本的答案不尽相同 ?
面试官:说说synchronized和Lock(或ReentrantLock)的区别 Java 1.5之后,对共享变量访问的协调机制除了之前的synchronized和volatile又多了一个Lock,深刻理解synchronized与Lock,并熟悉两者的应用场景对编写并发程序有着非常重要的作用 部落新添大将 话说JDK1.5之前,并发部落 synchronized 和 volatile 可谓红人,无人不知,无人不晓 当多个线程访问同一共享变量时,只需在操作该共享变量的方法上加一个synchroniz
两者都是可重入锁。“可重入锁”概念是:自己可以再次获取自己的内部锁。比如一个线程获得了某个对象的锁,此时这个对象锁还没有释放,当其再次想要获取这个对象的锁的时候还是可以获取的,如果不可锁重入的话,就会造成死锁。同一个线程每次获取锁,锁的计数器都自增1,所以要等到锁的计数器下降为0时才能释放锁。
最近,一名小伙伴跟我说:他写的程序在测试环境一点问题没有,但是发到生产环境却会频繁出现内存溢出的情况,这个问题都困扰他一周多了。于是乎,周末我便开始帮他排查各种问题。
“可重入锁” 指的是自己可以再次获取自己的内部锁。比如一个线程获得了某个对象的锁,此时这个对象锁还没有释放,当其再次想要获取这个对象的锁的时候还是可以获取的。如果不可锁重入的话,就会造成死锁。同一个线程每次获取锁,锁的计数器都自增 1,所以要等到锁的计数器下降为 0 时才能释放锁。
对于文件的IO操作应该是我们经常会使用到的,因为文件的复杂性,我们在使用File操作的时候也有很多需要注意的地方,下面我一起来看看吧。
是不是感觉莫名其妙,新定义的str2好像和str1没有半毛钱的关系,怎么会影响到有关str1的输出结果呢?其实这都是intern()方法搞的鬼!看完这篇文章,你就会明白。o(∩_∩)o
String.intern() 方法可以使得所有含相同内容的字符串都共享同一个内存对象。
由于我要使用腾讯云的短信接口,最低支持JDK1.7,我是JDK1.6,记录一下如何升级。
Java中具有通过Synchronized实现的内置锁,和ReentrantLock实现的显示锁,这两种锁各有各的好处,算是互有补充,今天就来做一个总结。
找了一个支付宝的网站尝试。https://memberprod.alipay.com/account/reg/index.htm
在java集合中,HashMap是用来存放一组键值对的数,也就是key-value形式的数据,而在jdk1.6和jdk1.8的实现有所不同。
1)配置eclipse的jdk的方法:window/preferences(偏好) /java/Compiler/Compiler compliance level:我设置的是1.6(你最好跟我一样,【新手可互略这段的解释】1)这里设置的是eclipse中所有项目的,想设置某个单独项目的compiler,可设置它的project facet中的java compiler。2)这个1.6指的是你的servlet编译成的class版本是1.6,而不是jsp编译成servelet class的版本,那个版本是什么,学jsp时再告诉大家。)。(编译和tomcat运行jre版本要一样,否则有版本major.minor错误,tomcat不是exe,它运行时,需要你的系统装有java,这里你的eclipse的tomcat运行,所需要的jdk在哪呢?window/preferences/Server/Runtime Enviornment/tomcat5.0/Edit/Jre/Installed Jres,多说一句,外置生产环境下的tomcat的jre呢?在外置tomcat安装目录的bin目录下敲:version)
锁是多线程并发问题中的重要组成,接着上一篇文章,今天就简单总结一下Java中各种锁如何分类。
JDK1.8增加了很多新特性,但不再包含access桥接驱动,因此在连接Access数据库时有所变化[和JDK1.6相比]. 一、 设置数据源(ODBC) 步骤:控制面板->系统安全->管理工具->数据源(ODBC) [针对Window 32位] 1.添加(选定Microsoft Access Driver(.mdb .accdb))完成 2.指定数据源名、选择驱动器(C、D盘),选中要连接的数据库。 网上有很多关于设置数据源(ODBC)的帖子,可以百度一下。 3.常见问题 在创建Access数据的ODBC数据源时没有Access数据源驱动器… 打开管理工具 ODBC数据源管理器里面只有SQLServer ,没有Access等其他的,这是因为Access数据源驱动器是32位的,64位不支持。 4.解决方案[针对Window 64位]:打开32位版本的ODBC管理工具 通过C:/Windows/SysWOW64/odbcad32.exe启动32位版本ODBC管理工具。(界面和设置过程和设置32位的相同)
前置条件: 1. 正确安装jdk,并配置好JAVA_HOME、PATH。(我这里安装的是jdk1.8) 2. 正确安装好eclipse。(我的eclipse版本是: Neon Release (4.6.0)) 步骤: 1. 首先去下载spring的源码 https://github.com/spring-projects/spring-framework/releases。 因为我的jdk版本是1.8,所以我这里下载的版本是4.3.2。 下载完成之后解压到本地目录。 2. spring源码的编译需要grad
我们都知道 synchronized 关键字能实现线程安全,但是你知道这背后的原理是什么吗?今天我们就来讲一讲 synchronized 实现线程同步背后的原因,以及相关的锁优化策略吧。
在前一博客《在32位Windows XP的VMWare里安装64位Ubuntu Linux/JDK1.6》的第7步:
大型网站为了解决大量的并发访问,除了在网站实现分布式负载均衡,远远不够。到了数据业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器来处理如此多的数据库连接操作,数据库必然会崩溃,特别是数据丢失的话,后果更是不堪设想。这时候,我们会考虑如何减少数据库的连接,下面就进入我们今天的主题。
本文介绍了在 Eclipse Maven 开发 Java EE 项目时,编译过程中出现的 “Dynamic Web Module 3.0 requires Java 1.6 or newer. One or more constraints have not been satisfied.” 错误的原因,并提供了解决方案。
3.jstack -l > threads.txt,导出进程的线程栈信息到文本,导出出现异常的话,加上 -F 参数。
Intellij IDEA 默认情况下,使用的jdk的版本是1.6,当第一次启动IDEA的时候,如果系统中未安装jdk,则系统会自动到苹果官网下载jdk安装文件。如果你的系统已经安装了jdk1.7或是更高的版本,同样首次打开IDEA的时候要求你安装苹果官网jdk1.6。
我是y哥的读者,已经毕业几年了,一直在做业务开发,最近想要跳槽,自然就会读读y哥写的对线面试官系列,毕竟现在面试都得搞八股文啊。 花了一个晚上读了两个章节,分别是《Java基础》和《Java并发》,读完来吐槽一波 《Java基础》这个章节现在就4篇文章,说实话不太够看。其中《注解》《泛型》《反射和动态代理》都没什么好说的,都是以线上真实应用的角度介绍这些知识点,没什么八股文的内容,所以我一看就懂了。毕竟做了这么久的业务开发,这些多多少少都知道,应用场景也是符合线上所讲的。 唯一之前没注意到的就是在《注解》文
领取专属 10元无门槛券
手把手带您无忧上云