Mark

Java内存泄漏分析系列之二:jstack生成的Thread Dump日志结构解析

被刻印的时光 ゝ 提交于 2021-02-20 07:38:42
原文地址:http://www.javatang.com 一个典型的thread dump文件主要由一下几个部分组成: 上图将JVM上的线程堆栈信息和线程信息做了详细的拆解。 第一部分:Full thread dump identifier 这一部分是内容最开始的部分,展示了快照文件的生成时间和JVM的版本信息。 2017-10-19 10:46:44 Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.79-b02 mixed mode): 第二部分:Java EE middleware, third party & custom application Threads 这是整个文件的核心部分,里面展示了JavaEE容器(如tomcat、resin等)、自己的程序中所使用的线程信息。这一部分详细的含义见 Java内存泄漏分析系列之四:jstack生成的Thread Dump日志线程状态分析 。 "resin-22129" daemon prio=10 tid=0x00007fbe5c34e000 nid=0x4cb1 waiting on condition [0x00007fbe4ff7c000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe

Word文档开发处理工具Aspose.Words v21.2发布!(含新功能演示)

旧街凉风 提交于 2021-02-19 12:04:55
Aspose.Words for .Net是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。2021 年2月更新来啦,.NET版Aspose.Words更新至v21.2新版本! 主要特点如下: 实现了API以操纵Font对象的主题属性。 添加了在保存时更新CreatedTime属性的选项。 使用新的CustomTimeZoneInfo选项扩展了SaveOptions。 使用新的SmartParagraphBreakReplacement选项扩展了FindReplaceOptions类。 提供了从COM应用程序中的IStream对象加载文档的功能。 >>你可以 下载 Aspose.Words for .NET v21.2测试体验。 具体更新内容 关键 概括 类别 WORDSNET-21363 支持为LINQ Reporting Engine动态添加组合框和下拉列表项 新功能 WORDSNET-6146 允许从OLE对象提取可见的纯文本 新功能 WORDSNET11848 添加保存选项以模仿MS Word行为或不模仿创建,修改和打印日期 新功能 WORDSNET-6125 添加选项以将文档中的图像导出为SVG格式的HTML 新功能 WORDSNET-10148

详细讲述python的垃圾回收机制(GC)

点点圈 提交于 2021-02-18 14:22:40
2019年即将过去,回顾2019,比较火的一句金语,你能想到啥?请看图 , 我想大家此刻的心情会是这样的 哈哈哈,借着这句金语,今天我给大家分享一下关于Python的垃圾回收机制,本着热爱分享的原则,还是囫囵吞枣地做下记录分享吧。.   首先还是做一下概述吧: 我们都知道, 在做python的语言编程中, 相较于java, c++, 我们似乎很少去考虑到去做垃圾回收,内存释放的工作, 其实是python内部已经做了相应的回收机制, 不用我们自己操心去做内存释放.但是还是有必要了解一下.可以更加深入的了解python这门优美的语言的魅力. 一、概述:   python的GC模块主要运用了“引用计数(reference counting)”来跟踪和回收垃圾。在引用计数的基础上,还可以通过标记清除(mark and sweep)解决容器( 这里的容器值指的不是docker,而是数组,字典,元组这样的对象 )对象可能产生的循环引用的问题。通过“分代回收(generation collection)”以空间换取时间来进一步提高垃圾回收的效率。 二、垃圾回收三种机制   1、引用计数   在Python中,大多数对象的生命周期都是通过对象的引用计数来管理的, 广义上讲,它也是一种垃圾回收机制,而且是一种最直观最简单的垃圾回收机制。   原理: 当一个对象被创建引用或者被复制的时候

判断java标识符

十年热恋 提交于 2021-02-17 20:37:00
1 package com.jdk7.chapter5; 2 3 public class JavaIdentifier { 4 5 /** 6 * 使用Character.isJavaIdentifierPart判断字符是否属于java标识符 7 it is a letter 8 it is a currency symbol (such as '$') 9 it is a connecting punctuation character (such as '_') 10 it is a digit 11 it is a numeric letter (such as a Roman numeral character) 12 it is a combining mark 13 it is a non-spacing mark 14 '\u005Cu0000' through '\u005Cu0008' 15 '\u005Cu000E' through '\u005Cu001B' 16 '\u005Cu007F' through '\u005Cu009F' 17 * @param str 18 * @return 19 */ 20 public static boolean isJavaIdentifier(String str){ 21 if (str== null ||

ES6 系列之 Babel 将 Generator 编译成了什么样子

依然范特西╮ 提交于 2021-02-17 03:45:27
摘要: ## 前言 本文就是简单介绍下 Generator 语法编译后的代码。 ## Generator ```js function* helloWorldGenerator() { yield 'hello'; yield 'world'; return 'ending'; } ``` 我们打印下执行的结果: ```js var hw = hel 前言 本文就是简单介绍下 Generator 语法编译后的代码。 Generator function* helloWorldGenerator() { yield 'hello'; yield 'world'; return 'ending'; } 我们打印下执行的结果: var hw = helloWorldGenerator(); console.log(hw.next()); // {value: "hello", done: false} console.log(hw.next()); // {value: "world", done: false} console.log(hw.next()); // {value: "ending", done: true} console.log(hw.next()); // {value: undefined, done: true} Babel 具体的执行过程就不说了,我们直接在

Pytest权威教程21-API参考-04-钩子(Hooks)

爱⌒轻易说出口 提交于 2021-02-16 16:26:02
[toc] 返回: Pytest权威教程 钩子(Hooks) 参考: 编写插件。 引用可由conftest.py文件实现的所有Hook方法。 引导时的Hook方法 引导时的Hook方法要求尽早注册插件(内部和setuptools插件)。 pytest_load_initial_conftests( early_config , parser , args ): 在命令行选项解析之前实现初始conftest文件的加载。 注意:不会为 conftest.py 文件调用此Hook方法,仅适用于setuptools插件。 参数: early_config ( _pytest.config.Config ) - pytest配置对象 args ( list *]*) - 在命令行上传递的参数列表 解析器 ( _pytest.config.Parser ) - 添加命令行选项 pytest_cmdline_preparse( config , args ): ( 不推荐 )在选项解析之前修改命令行参数。 此钩子被认为已弃用,将在未来的pytest版本中删除。考虑 pytest_load_initial_conftests() 改用。 注意:不会为 conftest.py 文件调用此Hook方法,仅适用于setuptools插件。 参数: config ( _pytest.config

深入探讨Hotspot虚拟机在Java堆中对象创建、布局和访问的过程

≯℡__Kan透↙ 提交于 2021-02-16 16:23:40
在我们了解了JVM的运行时数据区划分后,我们需要进一步了解JVM内存中数据进一步的细节,例如对象是如何创建的,如何布局,及如何访问这些对象。接下来会从3个部分来探讨下Java堆中对象的创建及其访问过程。 对象的创建 检查 ,JVM收到 new 指令,首先去检查是否能在常量池中定位到一个 class 的符号引用,并检查这个引用代表的 class 是否被加载、解析和初始化过,如果没有则执行类加载过程。 分配内存 ,类加载通过后,JVM会为这个 class 分配内存。分配内存有两种方式,一种叫 指针碰撞 ,一种叫 空闲列表 指针碰撞 :假设heap是绝对连续规整的,空闲的内存和已使用的内存各在一边,中间放置一个指针作为分界点的指示器,分配内存时只需要把指针挪向空闲内存的那边即可。 空闲列表 :如果heap不是规整的,空闲内存和已使用的内存交错分布,JVM会维护一个列表,记录哪些内存时可用的,分配内存是从列表里找一块足够存放对象的内存分配给它。 选择哪种分配方式由JVM所采用的垃圾收集器是否带有压缩整理的功能决定,因此在使用 Serial 、 ParNew 等带有Compact过程的收集器时,系统采用的分配算法是指针碰撞,而使用 CMS 这种基于Mark-Sweep算法的收集器时,通常采用空闲列表。 在分配内存过程中可能由于并发引起线程不安全的问题,JVM有两种解决方案,一、采用CAS

Pytest学习之use fixtures

两盒软妹~` 提交于 2021-02-16 13:23:11
'''当用例需要调用fixture时,前面讲到可以直接在用例里加fixture参数,如果一个测试class都需要用到fixture,每个用例都去传参,会比较麻烦,这个时候, 可以在class外面加usefixtures装饰器,让整个class都调用fixture''' ''' 调用fixture的三种方法 1.函数或类里面方法直接传fixture的函数名称 2.使用装饰器@pyets.mark.usefixtures()修饰 3.autouse=True自动使用 ''' '''用例传fixture参数 方法一:先定义start功能 用例全部传start参数,调用该功能 ''' import time import pytest @pytest.fixture(scope="function") def start(request): print("\n-----开始执行function-----") def test_a(start): print("-----用例a执行-----") class Test_aaa(): def test_o1(self,start): print("----用例01---------") def test_02(self,start): print("----用例02---------") if __name__ == '__main__':

WPF的xaml中特殊字符表示

只谈情不闲聊 提交于 2021-02-16 11:08:20
原文: WPF的xaml中特殊字符表示 直接看表,描述很清晰 字符 转义字符 备注 & (ampersand) & 这个没什么特别的,几乎所有的地方都需要使用转义字符 > (greater-than character) > 在属性(Attribute values)中必须进行转义,在内容(Content)中 如果没有<在>符号的前面,可以不进行转义,直接使用> < (less-than character) < 在属性(Attribute values)中必须进行转义,在内容(Content)中 如果没有>在<符号的后面,可以不进行转义,直接使用< " (straight quotation mark) " 在属性(Attribute Values)中必须进行转义,在内容(Content)中可以直接使用,而不进行转义。需要注意的是如果属性使用'来定义属性,那么"可以直接使用如 Text='test"test"test',反之如果是用”来定义属性,那么'可以直接使用而不需要转义字符,如Text="test'test" ' (single straight quotation mark) &apos; 同上 (numeric character mappings) &# [integer] ; or &#x [hex] ; 可以和字符集合映射,如d(10进制)或者ÿ(16进制) 回车

synchronized 锁的升级

倾然丶 夕夏残阳落幕 提交于 2021-02-15 14:01:22
synchronized 的基本认识 在多线程并发编程中 synchronized 一直是元老级角色,很 多人都会称呼它为重量级锁。但是,随着 Java SE 1.6 对 synchronized 进行了各种优化之后,有些情况下它就并不 那么重,Java SE 1.6 中为了减少获得锁和释放锁带来的性 能消耗而引入的偏向锁和轻量级锁。 synchronized 有三种方式来加锁, 1. 修饰实例方法,作用于当前实例加锁,进入同步代码前 要获得当前实例的锁 2. 静态方法,作用于当前类对象加锁,进入同步代码前要 获得当前类对象的锁 3. 修饰代码块,指定加锁对象,对给定对象加锁,进入同 步代码库前要获得给定对象的锁。 // 修饰实例方法, 锁作用域是this public synchronized void SyncMethod1() { } // 修饰实例方法2,锁作用域是this.lock public void SyncMethod2() { synchronized ( this .lock) { } } // 修饰实例方法3, 锁作用域是this对象 public synchronized void SyncMethod3() { synchronized ( this ) { } } // 静态方法 锁作用域是整个class public static