本地线程

JVM

为君一笑 提交于 2019-12-07 21:38:30
一、JVM一些基本概念 1、JVM和普通虚拟机 JVM:Java Virtual Machine,程序自己独立的运行环境;堆栈、寄存器、字节码指令;可以运行多种语言:Java、Scala、Grovvy; 普通虚拟机:能完整提供虚拟主机的PC,必须安装操作系统,以CPU指令运行。例如VMWare、Visual Box 2、JVM/JDK/JRE关系 JVM :(Java Virtual Machine),只认识 class文件,它能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。所以说,jvm 是 Java 能够跨平台的核心。 JRE :(Java Runtime Environment),Java 运行时环境。它主要包含 jvm 的标准实现和 Java 的一些基本类库。JRE = JVM + Java 类库。 JDK :(Java Development Kit),Java 开发工具包。jdk 是整个 Java 开发的核心,它集成了 jre 和一些好用的小工具。例如:javac.exe,java.exe,jar.exe 等。 显然,这三者的关系是:一层层的嵌套关系 JDK>JRE>JVM 3、JVM产品有哪些 HotSpot、Jrockit、J9 4、为什么会出现JVM Java程序编译后的文件是*.class文件,*

开发自动化系列-工具集(二)系统性能监控工具

∥☆過路亽.° 提交于 2019-12-07 13:02:48
摘 要 孔子云:工欲善其事,必先利其器。作为开发人员,我们致力于为最终用户实现工作流程自动化;然而,许多开发人员却疏忽了将自己的开发流程自动化。企业级应用系统涉及到开发、测试、部署、实施等一系列开发流程,在整个软件开发过程中我们如何借助工具、方法和模式使过程简单自动化,减少一些低效繁琐的开发工作量。 本系列试图使用一系列的工具介绍帮助大家在日常工作中减轻繁杂低效的开发工作,借助于现有的一系列工具提升大家的开发效率,使大家日常工作做到事半功倍。 在 Java 程序的开发过程中,不可避免地会遇到内存使用、性能瓶颈等问题。 Java Profiler 工具能帮助开发人员快速、有效地定位这些问题,因此成为了 Java 开发过程中的一个重要工具 。 本文作为该系列的第二章,介绍Java EE应用的系统性能监控工具JProfiler,JProfiler 可以通过时时的监控系统的内存使用情况,随时监视垃圾回收,线程运行状况等手段,从而很好的监视 JVM 运行情况及其性能。 通过介绍这个工具的使用,帮助开发人员发现系统应用的性能瓶颈,提升系统运行性能。 一、 JProfiler 是什么? JProfiler 是一个全功能的 Java 剖析工具( profiler ),专用于分析 J2SE 和 J2EE 应用程序。它把 CPU 、执行绪和内存的剖析组合在一个强大的应用中。 JProfiler

JVM

大兔子大兔子 提交于 2019-12-07 12:52:28
一、JVM一些基本概念 1、JVM和普通虚拟机 JVM:Java Virtual Machine,程序自己独立的运行环境;堆栈、寄存器、字节码指令;可以运行多种语言:Java、Scala、Grovvy; 普通虚拟机:能完整提供虚拟主机的PC,必须安装操作系统,以CPU指令运行。例如VMWare、Visual Box 2、JVM/JDK/JRE关系 JVM :(Java Virtual Machine),只认识 class文件,它能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。所以说,jvm 是 Java 能够跨平台的核心。 JRE :(Java Runtime Environment),Java 运行时环境。它主要包含 jvm 的标准实现和 Java 的一些基本类库。JRE = JVM + Java 类库。 JDK :(Java Development Kit),Java 开发工具包。jdk 是整个 Java 开发的核心,它集成了 jre 和一些好用的小工具。例如:javac.exe,java.exe,jar.exe 等。 显然,这三者的关系是:一层层的嵌套关系 JDK>JRE>JVM 3、JVM产品有哪些 HotSpot、Jrockit、J9 4、为什么会出现JVM Java程序编译后的文件是*.class文件,*

hibernate.current_session_context_class属性配置

岁酱吖の 提交于 2019-12-07 10:53:45
此设置的作用如下: What does sessionFactory.getCurrentSession() do? First, you can call it as many times and anywhere you like, once you get hold of your SessionFactory (easy thanks to HibernateUtil). The getCurrentSession() method always returns the "current" unit of work. Remember that we switched the configuration option for this mechanism to "thread" in hibernate.cfg.xml? Hence, the scope of the current unit of work is the current Java thread that executes our application. However, this is not the full truth. A Session begins when it is first needed, when the first call to getCurrentSession() is

c#学习笔记——进程(process)与线程(thread)

孤人 提交于 2019-12-06 23:21:26
一、进程 1、进程类是指 Process 类,该类所在的命名空间是 System.Diagnostics。快捷键应用:alt+shift+f10 2、进程是操作系统资源分配的基本单位。每一个应用程序都是进程。 3、在获取当前操作系统中运行的进程时,如果要获取所有运行的进程的信息可以使用 GetProcesses() 方法 来打开电脑中的应用程序 如:qq、微信、计算器等等 4、需要注意的是,一些进程由于权限不够是无法关闭的,因此在关闭进程的代码中要做异常处理。 5、Process 类的常用属性和方法如下表所示。 属性或方法 说明 MachineName 属性,获取关联进程正在其上运行的计算机的名称 Id 属性,获取关联进程的唯一标识符 ExitTime 属性,获取关联进程退出的时间 ProcessName 属性,获取该进程的名称 StartTime 属性,获取关联进程启动的时间 Threads 属性,获取在关联进程中运行的一组线程 TotalProcessorTime 属性,获取此进程的总的处理器时间 UserProcessorTime 属性,获取此进程的用户处理器时间 Close() 方法,释放与此组件关联的所有资源 CloseMainWindow() 方法,通过向进程的主窗口发送关闭消息来关闭拥有用户界面的进程 Dispose() 方法,释放由 Component

面试:史上最全多线程面试题 - (锁&内存模型&线程)

一个人想着一个人 提交于 2019-12-06 23:14:33
多线程经典面试题60问。 历史文章: dubbo&zookeeper55道高频面试题(附加答案) SpringCloud&SpringBoot经典面试题(附加答案) 1.什么是活锁、饥饿、无锁、死锁? 死锁、活锁、饥饿是关于多线程是否活跃出现的运行阻塞障碍问题,如果线程出现 了这三种情况,即线程不再活跃,不能再正常地执行下去了。 死锁 死锁是多线程中最差的一种情况,多个线程相互占用对方的资源的锁,而又相互等 对方释放锁,此时若无外力干预,这些线程则一直处理阻塞的假死状态,形成死锁。 举个例子,A 同学抢了 B 同学的钢笔,B 同学抢了 A 同学的书,两个人都相互占 用对方的东西,都在让对方先还给自己自己再还,这样一直争执下去等待对方还而 又得不到解决,老师知道此事后就让他们相互还给对方,这样在外力的干预下他们 才解决,当然这只是个例子没有老师他们也能很好解决,计算机不像人如果发现这 种情况没有外力干预还是会一直阻塞下去的。 活锁 活锁这个概念大家应该很少有人听说或理解它的概念,而在多线程中这确实存在。 活锁恰恰与死锁相反,死锁是大家都拿不到资源都占用着对方的资源,而活锁是拿 到资源却又相互释放不执行。当多线程中出现了相互谦让,都主动将资源释放给别 的线程使用,这样这个资源在多个线程之间跳动而又得不到执行,这就是活锁。 饥饿 我们知道多线程执行中有线程优先级这个东西

hibernate.current_session_说明

狂风中的少年 提交于 2019-12-06 19:08:12
遇到过的问题: 情景1: 在使用SessionFactory的getCurrentSession方法时遇到如下错误,经过检查,原因如下: 是因为在hibernate.cfg.xml文件中忘记进行了如下设置: hibernate.current_session_context_class如果是在web容器中运行hibernate,则在hibernate.cfg.xml中加入这句话: <property name="hibernate.current_session_context_class">jta</property> 如果是在一个单独的需要进行JDBC连接的java application中运行hibernate,则这样设置: <property name="hibernate.current_session_context_class">thread</property> 情景2: 在ssh2中的sessionFactory配置文件中 应将hibernate.current_session_context_class设为org.springframework.orm.hibernate3.SpringSessionContext(默认为此值) 并应用spring管理事务。如果为<prop key="hibernate.current_session_context_class

细说JVM内存模型

与世无争的帅哥 提交于 2019-12-06 16:13:35
细说JVM内存模型 前言 在正式学习 JVM 内存模型之前,先注意以下几个是问题: JVM 内存模型与 JAVA 内存模型不是同一个概念。JVM 内存模型是从运行时数据区的结构的角度描述的概念;而 JAVA 内存模型是从主内存和线程私有内存角度的描述。从以下两张图可以看出: ​ JAVA内存模型 ​ JVM内存模型 Java虚拟机总共由三大模块组成: 类加载器子系统 运行时数据区执行引擎 本篇我们介绍第二大模块——运行时数据区(JVM内存模型)。 其实虚拟机的这些模块并不是独立的,都是相互联系的。java 文件编译为 class 文件,通过类加载子系统加载,信息再到 JVM 托管的内存中(部分操作会与本地内存交互)的流转,再到垃圾回收等等,都是一系列的操作。 本系列的博客为了更加清晰的描述清楚功能和原理,将其分为几个章节写作。 概览 运行时数据区分为几大模块(如上图所示): 线程共享区: JAVA堆 方法区 线程私有区: JAVA栈 本地方法栈 程序计数器 本文中,我们将从以下几个方法面来分析各个区域: 功能 存储的内容 是否有内存溢出和内存泄露 是否进行垃圾回收 对应的垃圾回收算法 垃圾回收流程 性能调优 线程私有区 程序计数器 程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器

Java内存结构

南楼画角 提交于 2019-12-06 15:45:45
转载: 原文链接: https://blog.csdn.net/qq906627950/article/details/81324825 1、运行时数据区 JVM所管理的内存包括以下几个运行时数据区域,如图所示 方法区和堆为线程共享区,虚拟机栈、本地方法栈及程序计数器为线程独占区。 程序计数器 程序计数器是一块较小的空间,它可以看作是当前线程所执行的字节码的行号指示器。 如果线程执行的是java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址(可以理解为上图所示的行号),如果正在执行的是native方法,这个计数器的值为undefined。 JVM的多线程是通过线程轮流切换并分配CPU执行时间片的方式来实现的,任何一个时刻,一个CPU都只会执行一条线程中的指令。为了保证线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各线程间的程序计数器独立存储,互不影响。 此区域是唯一一个在java虚拟机规范中没有规定任何OutOfMemoryError情况的区域,因为程序计数器是由虚拟机内部维护的,不需要开发者进行操作。 虚拟机栈 每个线程有一个私有的栈,随着线程的创建而创建,生命周期与线程相同。 虚拟机栈里面存着的是一种叫“栈帧”的东西,每个方法会创建一个栈帧,栈帧中存放了局部变量表、操作数栈、动态链接、方法出口等信息。

Java内存结构

佐手、 提交于 2019-12-06 15:39:08
转载: 原文链接: https://blog.csdn.net/qq906627950/article/details/81324825 1、运行时数据区 JVM所管理的内存包括以下几个运行时数据区域,如图所示 方法区和堆为线程共享区,虚拟机栈、本地方法栈及程序计数器为线程独占区。 程序计数器 程序计数器是一块较小的空间,它可以看作是当前线程所执行的字节码的行号指示器。 如果线程执行的是java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址(可以理解为上图所示的行号),如果正在执行的是native方法,这个计数器的值为undefined。 JVM的多线程是通过线程轮流切换并分配CPU执行时间片的方式来实现的,任何一个时刻,一个CPU都只会执行一条线程中的指令。为了保证线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各线程间的程序计数器独立存储,互不影响。 此区域是唯一一个在java虚拟机规范中没有规定任何OutOfMemoryError情况的区域,因为程序计数器是由虚拟机内部维护的,不需要开发者进行操作。 虚拟机栈 每个线程有一个私有的栈,随着线程的创建而创建,生命周期与线程相同。 虚拟机栈里面存着的是一种叫“栈帧”的东西,每个方法会创建一个栈帧,栈帧中存放了局部变量表、操作数栈、动态链接、方法出口等信息。