Pencarian

Rss Posts

 

 

 

Berita pada kategori ‘Sindikasi’

PHP on Azure and you in Vegas – Michelangelo van Dam

Feb 19, 2011

If you’re developing apps in PHP and you want a challenge that will get you some places, be sure to check out the PHP on Azure contest. Build an app with PHP, deploy it to Windows Azure and participate in a contest with a killer prize: an all-in trip to Las Vegas!

The rules are simple:

  • your app has to be written in PHP
  • preferably own development app
  • use as much as Windows Azure services
  • blog about overcoming this challenge (good/bad/ugly)

A jury will review your app and give you points on implementation, challenge and usage of Windows Azure technologies. But also on how you documented the process of deploying your app to Windows Azure.

Register before February 28, 2011. The contest itself runs from February 1, 2011 until May 15, 2011. If you register quickly, you can get attend a free Windows Azure training course given by Maarten “Mr. Azure” Balliauw on February 22, 2011.

Show the world your skills and participate. Full details of the contest can be found on http://phpazurecontest.com.

If you’re unsure how to start, I’m working on an example application to be deployed anywhere, including Windows Azure.

JSR 292 Goodness: Fast code coverage tool in less than 10k

Feb 12, 2011

JSR 292 introduces a new bytecode instruction invokedynamic but also several new kind of constant pool constants. Which means that most of the tools that parse bytecodes like ASM, BCEL, findbugs or EMMA will need to be updated to be java 7 compatible.
EMMA is a code coverage tool, a tool that helps developers to know if their tests cover all the code of the application. While it’s not the only code coverage tool available in Java, it’s the most popular from my personal experience.
In this blog entry, I would like to show how to write a simple code coverage tool indycov that use JSR 292 API to have a runtime overhead close to zero.

How a code coverage tool works ?

A code coverage tool records all paths taken when running the application and checks at the end if all lines of codes was recorded.
By example, if I run the code below with no argument, it will print "foo" and "bar" and the code coverage tool will say that the else branch that prints "baz" will be not covered.

public static void main(String[] args) {
    System.out.println("foo");
    if (args.length == 0) {
      System.out.println("bar");
    } else {
      System.out.println("baz");
    }
  }

To record if an instruction was executed or not, code coverage tools add a probe which is a small amount of bytecodes that will call the runtime of the tool to say: "I have visited this instruction".
In fact, tools, only add probes where necessary, at the begining of each basic block of the control flow. A basic block is a collection of instructions without any jump (return, thow, if, break etc).
By example, the code above has 4 basic blocks: the once printing "foo", the one printing "bar", the one printing "baz" and the one containing the return at the end of the method.

So a code coverge tool is a tool that find basic blocks and add probes at the begining of each one.

Using JSR 292 API to implement a code coverage tool.

Finding basic block is easy with bytecode that come from 1.6 or 1.7 compiler because the compiler is required to add stack maps
in the bytecode flow. Stack maps are used to verify the bytecode in linear time and are inserted at the join points of the control flow.
So finding basic block in a 1.7 compatible bytecode can be done in one pass thanks to the stack maps info inserted by the compiler.

All existing code coverage tools have an impact on the performance of the application because the code of the probe is executed each time you call a basic block even if it should be executed once.
If you are a regular reader of this blog, you already know how to create a probe that will be executed once. The trick is use use invokedynamic, to record the visit in the bootstrap method and
to use a target method handle that is equivalent to no-op. So subsequent call will not execute any code.

main([Ljava/lang/String;)V
    INVOKEDYNAMIC probe ()V [fr/umlv/indycov/RT#bsm, 1]
    GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
    LDC "foo"
    INVOKEVIRTUAL java/io/PrintStream.println (Ljava/lang/String;)V
    ALOAD 0
    ARRAYLENGTH
    IFNE L0
    INVOKEDYNAMIC probe ()V [fr/umlv/indycov/RT#bsm, 2]
    GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
    LDC "bar"
    INVOKEVIRTUAL java/io/PrintStream.println (Ljava/lang/String;)V
    GOTO L1
    L0
    FRAME SAME
    INVOKEDYNAMIC probe ()V [fr/umlv/indycov/RT#bsm, 3]
    GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
    LDC "baz"
    INVOKEVIRTUAL java/io/PrintStream.println (Ljava/lang/String;)V
    L1
    FRAME SAME
    INVOKEDYNAMIC probe ()V [fr/umlv/indycov/RT#bsm, 4]
    RETURN

A no-op, is a method handle that takes nothing and return void. This method handle can be retrieved with Methodhandles.identity(void.class).
So the bootstrap method is the following. The first line records that the basic block with number ‘index’ is visited.

  public static CallSite bsm(Lookup lookup, String name, MethodType type, Object index) {
    classValue.get(lookup.lookupClass()).cover((Integer)index);
    return new ConstantCallSite(MethodHandles.identity(void.class));
  }

The code of the prototype is freely available (as attachment of this blog)  and works like an agent.
It relies on ASM 4 (still in beta) to do the bytecode transformation.

Side note: This prototype doesn’t handle exception correctly. If an exception is thrown, it will escape from the basic block without ending it.
How to modify the prototype to take care of exception is let to interrested readers.

Running the code with one argument "foo"

  java -XX:+UnlockExperimentalVMOptions -XX:+EnableInvokeDynamic -javaagent:lib/indycov.jar -cp test-classes/ TestCoverage foo

will print

  foo
  baz
  TestCoverage: no coverage for line(s) 2 to 2
  TestCoverage: no coverage for line(s) 5 to 6

line 2 is the declaration of the class, it’s because javac adds a default constructor which is not used.
lines 5 to 6 are the ones that print "bar".

If you want to play with it don’t forget to compile your sources with the debug flag on. Otherwise, the generated bytecodes will not contain mapping information between opcodes and line numbers.

Cheers,
Rémi

Attachment Size
indycov.zip 681.84 KB

Flickr: Link Your Photos Back To Your Blog – Stuart Herbert

Feb 12, 2011

I post photos to Flickr from time to time, and then write blog articles about the photos. The blog articles get written days, weeks, sometimes months in advance of when they?re scheduled to appear on my blog ? which makes it a tad difficult to add a link from a photo to all of the blog articles that mention it.

So a couple of weekends ago I knocked up a very crude script that uses the Flickr API (via phpFlickr) to work through all of the published blog posts and make sure each of my Flickr photos has links back to each blog post that mention it. I?m posting it here in the public domain. Hopefully someone will find it a useful starting point to do something similar for their own blog.

<?php

require_once(?phpflickr-3.0/phpFlickr.php?);

$flickrApiKey = ?<your Flickr API key>?;
$flickrSecret = ?<your Flickr API secret>?;
$flickrToken ?= ?<your Flickr auth token>?;

$f = new phpFlickr($flickrApiKey, $flickrSecret);
$f->setToken($flickrToken);
$f->enableCache(?fs?, ?/tmp?, 3600);

// first step ? find the first published blog post
$url = ?http://blog.stuartherbert.com/photography/?;
$rawHtml = file_get_contents($url);
preg_match(?/<h2 id=”post-([0-9]+)”>/?, $rawHtml, $matches);

$blogPosts = array();
$flickrPhotos = array();

$latestPost = $matches[1];
$nextPost = $url . ??p=? . $latestPost;

function updatePhotos($photoIndex, $flickrPhotos,

Truncated by Planet PHP, read more at the original (another 22896 bytes)

MySQL 5.5.9

Feb 11, 2011

You blink and there is a new version. I have not seen an Planet MySQL release as yet about this new version. Release Notes.
I’d like to say I installed it, but I downloaded the Linux – Generic 2.6 (x86, 64-bit), TAR file, only to find it contains 6 rpm files. #fail, I’m using Ubuntu.
You have to scroll to the bottom of the list (another stupid thing for a generic binary choice) to get Linux – Generic 2.6 (x86, 64-bit), Compressed TAR Archive. Double #fail

Why PHP Namespaces Matter – Matthew Weier O’Phinney

Feb 04, 2011

You’ve heard about PHP namespaces by now. Most likely, you’ve heard about — and
likely participated in — the
bikeshedding surrounding the selection of the namespace separator.

Regardless of your thoughts on the namespace separator, or how namespaces may or
may not work in other languages, I submit to you several reasons for why I think
namespaces in PHP are a positive addition to the language.

Continue reading “Why PHP Namespaces Matter”

Fixing MySQL with a comment in the config file

Feb 04, 2011

A customer called with an emergency issue: A server that normally runs many MySQL instances wouldn’t start them up. Not only would it not start all of them, it wouldn’t even start the first one. The multiple instances were started through the mysql_multi init script. Perhaps you already know what was wrong!

It turns out that this server’s /etc/init.d/mysql_multi wouldn’t start unless it found the text “mysqld_multi” in the /etc/my.cnf file. Not a [mysqld_multi] config file section, but the text string “mysqld_multi”. It was using this text as a proxy for “I found a [mysqld_multi] configuration section.” This was a rather brittle test, as you can imagine.
After reading the source, I determined that the my.cnf file was fine and the configuration should not be changed, and I could not understand what had changed since it was previously working. Perhaps an automated upgrade or a similar change to the system had broken it.
The fix was to place the following comment into the file.
# This comment is only necessary to make /etc/init.d/mysql_multi work OK, it greps for mysqld_multi in an ‘if’ statement
That’s the only time I can recall fixing software by putting a comment into its configuration file. Unfortunately I don’t recall what Linux distribution this was on; I just checked a recent download, and the official MySQL distribution contains a file called mysqld_multi (note the different name) that doesn’t contain this error-prone test.

Roll Your Own Cloud (from linux.conf.au 2011)

Feb 04, 2011

At linux.conf.au 2011 in Brisbane, I had the honor of co-presenting a talk on Rolling Your Own Cloud with SUSE’s Tim Serong. Take a look!

Ultimate MySQL variable and status reference list

Jan 08, 2011

I am constantly referring to the amazing MySQL manual, especially the option and variable reference table. But just as frequently, I want to look up blog posts on variables, or look for content in the Percona documentation or forums. So I present to you what is now my newest Firefox toolbar bookmark: an option and variable reference for all three sites in one!

abort_slave_event_count
blog
percona.com
manual

Aborted_clients
blog
percona.com
manual

Aborted_connects
blog
percona.com
manual

allow_suspicious_udfs
blog
percona.com
manual

ansi
blog
percona.com
manual

auto_increment_increment
blog
percona.com
manual

auto_increment_offset
blog
percona.com
manual

autocommit
blog
percona.com
manual

automatic_sp_privileges
blog
percona.com
manual

back_log
blog
percona.com
manual

basedir
blog
percona.com
manual

big_tables
blog
percona.com
manual

bind_address
blog
percona.com
manual

Binlog_cache_disk_use
blog
percona.com
manual

binlog_cache_size
blog
percona.com
manual

Binlog_cache_use
blog
percona.com
manual

binlog_direct_non_transactional_updates
blog
percona.com
manual

binlog_do_db
blog
percona.com
manual

binlog_format
blog
percona.com
manual

binlog_ignore_db
blog
percona.com
manual

binlog_row_event_max_size
blog
percona.com
manual

Binlog_stmt_cache_disk_use
blog
percona.com
manual

binlog_stmt_cache_size
blog
percona.com
manual

Binlog_stmt_cache_use
blog
percona.com
manual

bootstrap
blog
percona.com
manual

bulk_insert_buffer_size
blog
percona.com
manual

Bytes_received
blog
percona.com
manual

Bytes_sent
blog
percona.com
manual

character_set_client
blog
percona.com
manual

character_set_client_handshake
blog
percona.com
manual

character_set_connection
blog
percona.com
manual

character_set_database
blog
percona.com
manual

character_set_filesystem
blog
percona.com
manual

character_set_results
blog
percona.com
manual

character_set_server
blog
percona.com
manual

character_set_system
blog
percona.com
manual

character_sets_dir
blog
percona.com
manual

chroot
blog
percona.com
manual

collation_connection
blog
percona.com
manual

collation_database
blog
percona.com
manual

collation_server
blog
percona.com
manual

Com_admin_commands
blog
percona.com
manual

Com_alter_db
blog
percona.com
manual

Com_alter_db_upgrade
blog
percona.com
manual

Com_alter_event
blog
percona.com
manual

Com_alter_function
blog
percona.com
manual

Com_alter_procedure
blog
percona.com
manual

Com_alter_server
blog
percona.com
manual

Com_alter_table
blog
percona.com
manual

Com_alter_tablespace
blog
percona.com
manual

Com_analyze
blog
percona.com
manual

Com_assign_to_keycache
blog
percona.com
manual

Com_backup_table
blog
percona.com
manual

Com_begin
blog
percona.com
manual

Com_binlog
blog
percona.com
manual

Com_call_procedure
blog
percona.com
manual

Com_change_db
blog
percona.com
manual

Com_change_master
blog
percona.com
manual

Com_check
blog
percona.com
manual

Com_checksum
blog
percona.com
manual

Com_commit
blog
percona.com
manual

Com_create_db
blog
percona.com
manual

Com_create_event
blog
percona.com
manual

Com_create_function
blog
percona.com
manual

Com_create_index
blog
percona.com
manual

Com_create_procedure
blog
percona.com
manual

Com_create_server
blog
percona.com
manual

Com_create_table
blog
percona.com
manual

Com_create_trigger
blog
percona.com
manual

Com_create_udf
blog
percona.com
manual

Com_create_user
blog
percona.com
manual

Com_create_view
blog
percona.com
manual

Com_dealloc_sql
blog
percona.com
manual

Com_delete
blog
percona.com
manual

Com_delete_multi
blog
percona.com
manual

Com_do
blog
percona.com
manual

Com_drop_db
blog
percona.com
manual

Com_drop_event
blog
percona.com
manual

Com_drop_function
blog
percona.com
manual

Com_drop_index
blog
percona.com
manual

Com_drop_procedure
blog
percona.com
manual

Com_drop_server
blog
percona.com
manual

Com_drop_table
blog
percona.com
manual

Com_drop_trigger
blog
percona.com
manual

Com_drop_user
blog
percona.com
manual

Com_drop_view
blog
percona.com
manual

Com_empty_query
blog
percona.com
manual

Com_execute_sql
blog
percona.com
manual

Com_flush
blog
percona.com
manual

Com_grant
blog
percona.com
manual

Com_ha_close
blog
percona.com
manual

Com_ha_open
blog
percona.com
manual

Com_ha_read
blog
percona.com
manual

Com_help
blog
percona.com
manual

Com_insert
blog
percona.com
manual

Com_insert_select
blog
percona.com
manual

Com_install_plugin
blog
percona.com
manual

Com_kill
blog
percona.com
manual

Com_load
blog
percona.com
manual

Com_lock_tables
blog
percona.com
manual

Com_optimize
blog
percona.com
manual

Com_preload_keys
blog
percona.com
manual

Com_prepare_sql
blog
percona.com
manual

Com_purge
blog
percona.com
manual

Com_purge_before_date
blog
percona.com
manual

Com_release_savepoint
blog
percona.com
manual

Com_rename_table
blog
percona.com
manual

Com_rename_user
blog
percona.com
manual

Com_repair
blog
percona.com
manual

Com_replace
blog
percona.com
manual

Com_replace_select
blog
percona.com
manual

Com_reset
blog
percona.com
manual

Com_resignal
blog
percona.com
manual

Com_restore_table
blog
percona.com
manual

Com_revoke
blog
percona.com
manual

Com_revoke_all
blog
percona.com
manual

Com_rollback
blog
percona.com
manual

Com_rollback_to_savepoint
blog
percona.com
manual

Com_savepoint
blog
percona.com
manual

Com_select
blog
percona.com
manual

Com_set_option
blog
percona.com
manual

Com_show_authors
blog
percona.com
manual

Com_show_binlog_events
blog
percona.com
manual

Com_show_binlogs
blog
percona.com
manual

Com_show_charsets
blog
percona.com
manual

Com_show_collations
blog
percona.com
manual

Com_show_column_types
blog
percona.com
manual

Com_show_contributors
blog
percona.com
manual

Com_show_create_db
blog
percona.com
manual

Com_show_create_event
blog
percona.com
manual

Com_show_create_func
blog
percona.com
manual

Com_show_create_proc
blog
percona.com
manual

Com_show_create_table
blog
percona.com
manual

Com_show_create_trigger
blog
percona.com
manual

Com_show_databases
blog
percona.com
manual

Com_show_engine_logs
blog
percona.com
manual

Com_show_engine_mutex
blog
percona.com
manual

Com_show_engine_status
blog
percona.com
manual

Com_show_errors
blog
percona.com
manual

Com_show_events
blog
percona.com
manual

Com_show_fields
blog
percona.com
manual

Com_show_function_code
blog
percona.com
manual

Com_show_function_status
blog
percona.com
manual

Com_show_grants
blog
percona.com
manual

Com_show_innodb_status
blog
percona.com
manual

Com_show_keys
blog
percona.com
manual

Com_show_logs
blog
percona.com
manual

Com_show_master_status
blog
percona.com
manual

Com_show_new_master
blog
percona.com
manual

Com_show_open_tables
blog
percona.com
manual

Com_show_plugins
blog
percona.com
manual

Com_show_privileges
blog
percona.com
manual

Com_show_procedure_code
blog
percona.com
manual

Com_show_procedure_status
blog
percona.com
manual

Com_show_processlist
blog
percona.com
manual

Com_show_profile
blog
percona.com
manual

Com_show_profiles
blog
percona.com
manual

Com_show_relaylog_events
blog
percona.com
manual

Com_show_slave_hosts
blog
percona.com
manual

Com_show_slave_status
blog
percona.com
manual

Com_show_status
blog
percona.com
manual

Com_show_storage_engines
blog
percona.com
manual

Com_show_table_status
blog
percona.com
manual

Com_show_tables
blog
percona.com
manual

Com_show_triggers
blog
percona.com
manual

Com_show_variables
blog
percona.com
manual

Com_show_warnings
blog
percona.com
manual

Com_signal
blog
percona.com
manual

Com_slave_start
blog
percona.com
manual

Com_slave_stop
blog
percona.com
manual

Com_stmt_close
blog
percona.com
manual

Com_stmt_execute
blog
percona.com
manual

Com_stmt_fetch
blog
percona.com
manual

Com_stmt_prepare
blog
percona.com
manual

Com_stmt_reprepare
blog
percona.com
manual

Com_stmt_reset
blog
percona.com
manual

Com_stmt_send_long_data
blog
percona.com
manual

Com_truncate
blog
percona.com
manual

Com_uninstall_plugin
blog
percona.com
manual

Com_unlock_tables
blog
percona.com
manual

Com_update
blog
percona.com
manual

Com_update_multi
blog
percona.com
manual

Com_xa_commit
blog
percona.com
manual

Com_xa_end
blog
percona.com
manual

Com_xa_prepare
blog
percona.com
manual

Com_xa_recover
blog
percona.com
manual

Com_xa_rollback
blog
percona.com
manual

Com_xa_start
blog
percona.com
manual

completion_type
blog
percona.com
manual

Compression
blog
percona.com
manual

concurrent_insert
blog
percona.com
manual

connect_timeout
blog
percona.com
manual

Connections
blog
percona.com
manual

console
blog
percona.com
manual

core_file
blog
percona.com
manual

Created_tmp_disk_tables
blog
percona.com
manual

Created_tmp_files
blog
percona.com
manual

Created_tmp_tables
blog
percona.com
manual

datadir
blog
percona.com
manual

date_format
blog
percona.com
manual

datetime_format
blog
percona.com
manual

debug
blog
percona.com
manual

debug_sync
blog
percona.com
manual

debug_sync_timeout
blog
percona.com
manual

default_storage_engine
blog
percona.com
manual

default_time_zone
blog
percona.com
manual

default_week_format
blog
percona.com
manual

defaults_extra_file
blog
percona.com
manual

defaults_file
blog
percona.com
manual

defaults_group_suffix
blog
percona.com
manual

delay_key_write
blog
percona.com
manual

Delayed_errors
blog
percona.com
manual

delayed_insert_limit
blog
percona.com
manual

Delayed_insert_threads
blog
percona.com
manual

delayed_insert_timeout
blog
percona.com
manual

delayed_queue_size
blog
percona.com
manual

Delayed_writes
blog
percona.com
manual

des_key_file
blog
percona.com
manual

disconnect_slave_event_count
blog
percona.com
manual

div_precision_increment
blog
percona.com
manual

enable_locking
blog
percona.com
manual

enable_named_pipe
blog
percona.com
manual

enable_pstack
blog
percona.com
manual

engine_condition_pushdown
blog
percona.com
manual

error_count
blog
percona.com
manual

event_scheduler
blog
percona.com
manual

exit_info
blog
percona.com
manual

expire_logs_days
blog
percona.com
manual

external_locking
blog
percona.com
manual

external_user
blog
percona.com
manual

federated
blog
percona.com
manual

flush
blog
percona.com
manual

Flush_commands
blog
percona.com
manual

flush_time
blog
percona.com
manual

foreign_key_checks
blog
percona.com
manual

ft_boolean_syntax
blog
percona.com
manual

ft_max_word_len
blog
percona.com
manual

ft_min_word_len
blog
percona.com
manual

ft_query_expansion_limit
blog
percona.com
manual

ft_stopword_file
blog
percona.com
manual

gdb
blog
percona.com
manual

general_log
blog
percona.com
manual

general_log_file
blog
percona.com
manual

group_concat_max_len
blog
percona.com
manual

Handler_commit
blog
percona.com
manual

Handler_delete
blog
percona.com
manual

Handler_prepare
blog
percona.com
manual

Handler_read_first
blog
percona.com
manual

Handler_read_key
blog
percona.com
manual

Handler_read_last
blog
percona.com
manual

Handler_read_next
blog
percona.com
manual

Handler_read_prev
blog
percona.com
manual

Handler_read_rnd
blog
percona.com
manual

Handler_read_rnd_next
blog
percona.com
manual

Handler_rollback
blog
percona.com
manual

Handler_savepoint
blog
percona.com
manual

Handler_savepoint_rollback
blog
percona.com
manual

Handler_update
blog
percona.com
manual

Handler_write
blog
percona.com
manual

have_compress
blog
percona.com
manual

have_crypt
blog
percona.com
manual

have_csv
blog
percona.com
manual

have_dynamic_loading
blog
percona.com
manual

have_geometry
blog
percona.com
manual

have_innodb
blog
percona.com
manual

have_openssl
blog
percona.com
manual

have_partitioning
blog
percona.com
manual

have_profiling
blog
percona.com
manual

have_query_cache
blog
percona.com
manual

have_rtree_keys
blog
percona.com
manual

have_ssl
blog
percona.com
manual

have_symlink
blog
percona.com
manual

help
blog
percona.com
manual

hostname
blog
percona.com
manual

identity
blog
percona.com
manual

ignore_builtin_innodb
blog
percona.com
manual

init_connect
blog
percona.com
manual

init_file
blog
percona.com
manual

init_slave
blog
percona.com
manual

innodb
blog
percona.com
manual

innodb_adaptive_flushing
blog
percona.com
manual

innodb_adaptive_hash_index
blog
percona.com
manual

innodb_additional_mem_pool_size
blog
percona.com
manual

innodb_autoextend_increment
blog
percona.com
manual

innodb_autoinc_lock_mode
blog
percona.com
manual

innodb_buffer_pool_instances
blog
percona.com
manual

Innodb_buffer_pool_pages_data
blog
percona.com
manual

Innodb_buffer_pool_pages_dirty
blog
percona.com
manual

Innodb_buffer_pool_pages_flushed
blog
percona.com
manual

Innodb_buffer_pool_pages_free
blog
percona.com
manual

Innodb_buffer_pool_pages_latched
blog
percona.com
manual

Innodb_buffer_pool_pages_misc
blog
percona.com
manual

Innodb_buffer_pool_pages_total
blog
percona.com
manual

Innodb_buffer_pool_read_ahead
blog
percona.com
manual

Innodb_buffer_pool_read_ahead_evicted
blog
percona.com
manual

Innodb_buffer_pool_read_requests
blog
percona.com
manual

Innodb_buffer_pool_reads
blog
percona.com
manual

innodb_buffer_pool_size
blog
percona.com
manual

Innodb_buffer_pool_wait_free
blog
percona.com
manual

Innodb_buffer_pool_write_requests
blog
percona.com
manual

innodb_change_buffering
blog
percona.com
manual

innodb_checksums
blog
percona.com
manual

innodb_commit_concurrency
blog
percona.com
manual

innodb_concurrency_tickets
blog
percona.com
manual

innodb_data_file_path
blog
percona.com
manual

Innodb_data_fsyncs
blog
percona.com
manual

innodb_data_home_dir
blog
percona.com
manual

Innodb_data_pending_fsyncs
blog
percona.com
manual

Innodb_data_pending_reads
blog
percona.com
manual

Innodb_data_pending_writes
blog
percona.com
manual

Innodb_data_read
blog
percona.com
manual

Innodb_data_reads
blog
percona.com
manual

Innodb_data_writes
blog
percona.com
manual

Innodb_data_written
blog
percona.com
manual

Innodb_dblwr_pages_written
blog
percona.com
manual

Innodb_dblwr_writes
blog
percona.com
manual

innodb_doublewrite
blog
percona.com
manual

innodb_fast_shutdown
blog
percona.com
manual

innodb_file_format
blog
percona.com
manual

innodb_file_format_check
blog
percona.com
manual

innodb_file_format_max
blog
percona.com
manual

innodb_file_per_table
blog
percona.com
manual

innodb_flush_log_at_trx_commit
blog
percona.com
manual

innodb_flush_method
blog
percona.com
manual

innodb_force_recovery
blog
percona.com
manual

Innodb_have_atomic_builtins
blog
percona.com
manual

innodb_io_capacity
blog
percona.com
manual

innodb_lock_wait_timeout
blog
percona.com
manual

innodb_locks_unsafe_for_binlog
blog
percona.com
manual

innodb_log_buffer_size
blog
percona.com
manual

innodb_log_file_size
blog
percona.com
manual

innodb_log_files_in_group
blog
percona.com
manual

innodb_log_group_home_dir
blog
percona.com
manual

Innodb_log_waits
blog
percona.com
manual

Innodb_log_write_requests
blog
percona.com
manual

Innodb_log_writes
blog
percona.com
manual

innodb_max_dirty_pages_pct
blog
percona.com
manual

innodb_max_purge_lag
blog
percona.com
manual

innodb_mirrored_log_groups
blog
percona.com
manual

innodb_old_blocks_pct
blog
percona.com
manual

innodb_old_blocks_time
blog
percona.com
manual

innodb_open_files
blog
percona.com
manual

Innodb_os_log_fsyncs
blog
percona.com
manual

Innodb_os_log_pending_fsyncs
blog
percona.com
manual

Innodb_os_log_pending_writes
blog
percona.com
manual

Innodb_os_log_written
blog
percona.com
manual

Innodb_page_size
blog
percona.com
manual

Innodb_pages_created
blog
percona.com
manual

Innodb_pages_read
blog
percona.com
manual

Innodb_pages_written
blog
percona.com
manual

innodb_purge_batch_size
blog
percona.com
manual

innodb_purge_threads
blog
percona.com
manual

innodb_read_ahead_threshold
blog
percona.com
manual

innodb_read_io_threads
blog
percona.com
manual

innodb_replication_delay
blog
percona.com
manual

innodb_rollback_on_timeout
blog
percona.com
manual

Innodb_row_lock_current_waits
blog
percona.com
manual

Innodb_row_lock_time
blog
percona.com
manual

Innodb_row_lock_time_avg
blog
percona.com
manual

Innodb_row_lock_time_max
blog
percona.com
manual

Innodb_row_lock_waits
blog
percona.com
manual

Innodb_rows_deleted
blog
percona.com
manual

Innodb_rows_inserted
blog
percona.com
manual

Innodb_rows_read
blog
percona.com
manual

Innodb_rows_updated
blog
percona.com
manual

innodb_spin_wait_delay
blog
percona.com
manual

innodb_stats_on_metadata
blog
percona.com
manual

innodb_stats_sample_pages
blog
percona.com
manual

innodb_status_file
blog
percona.com
manual

innodb_strict_mode
blog
percona.com
manual

innodb_support_xa
blog
percona.com
manual

innodb_sync_spin_loops
blog
percona.com
manual

innodb_table_locks
blog
percona.com
manual

innodb_thread_concurrency
blog
percona.com
manual

innodb_thread_sleep_delay
blog
percona.com
manual

Innodb_truncated_status_writes
blog
percona.com
manual

innodb_use_native_aio
blog
percona.com
manual

innodb_use_sys_malloc
blog
percona.com
manual

innodb_version
blog
percona.com
manual

innodb_write_io_threads
blog
percona.com
manual

insert_id
blog
percona.com
manual

interactive_timeout
blog
percona.com
manual

join_buffer_size
blog
percona.com
manual

keep_files_on_create
blog
percona.com
manual

Key_blocks_not_flushed
blog
percona.com
manual

Key_blocks_unused
blog
percona.com
manual

Key_blocks_used
blog
percona.com
manual

key_buffer_size
blog
percona.com
manual

key_cache_age_threshold
blog
percona.com
manual

key_cache_block_size
blog
percona.com
manual

key_cache_division_limit
blog
percona.com
manual

Key_read_requests
blog
percona.com
manual

Key_reads
blog
percona.com
manual

Key_write_requests
blog
percona.com
manual

Key_writes
blog
percona.com
manual

language
blog
percona.com
manual

large_files_support
blog
percona.com
manual

large_page_size
blog
percona.com
manual

large_pages
blog
percona.com
manual

last_insert_id
blog
percona.com
manual

Last_query_cost
blog
percona.com
manual

lc_messages
blog
percona.com
manual

lc_messages_dir
blog
percona.com
manual

lc_time_names
blog
percona.com
manual

license
blog
percona.com
manual

local_infile
blog
percona.com
manual

local_infile
blog
percona.com
manual

lock_wait_timeout
blog
percona.com
manual

locked_in_memory
blog
percona.com
manual

log
blog
percona.com
manual

log_bin
blog
percona.com
manual

log_bin
blog
percona.com
manual

log_bin_index
blog
percona.com
manual

log_bin_trust_function_creators
blog
percona.com
manual

log_error
blog
percona.com
manual

log_isam
blog
percona.com
manual

log_output
blog
percona.com
manual

log_queries_not_using_indexes
blog
percona.com
manual

log_short_format
blog
percona.com
manual

log_slave_updates
blog
percona.com
manual

log_slow_admin_statements
blog
percona.com
manual

log_slow_queries
blog
percona.com
manual

log_slow_slave_statements
blog
percona.com
manual

log_tc
blog
percona.com
manual

log_tc_size
blog
percona.com
manual

log_warnings
blog
percona.com
manual

long_query_time
blog
percona.com
manual

low_priority_updates
blog
percona.com
manual

lower_case_file_system
blog
percona.com
manual

lower_case_table_names
blog
percona.com
manual

master_bind
blog
percona.com
manual

master_connect_retry
blog
percona.com
manual

master_host
blog
percona.com
manual

master_info_file
blog
percona.com
manual

master_password
blog
percona.com
manual

master_port
blog
percona.com
manual

master_retry_count
blog
percona.com
manual

master_ssl
blog
percona.com
manual

master_ssl_ca
blog
percona.com
manual

master_ssl_capath
blog
percona.com
manual

master_ssl_cert
blog
percona.com
manual

master_ssl_cipher
blog
percona.com
manual

master_ssl_key
blog
percona.com
manual

master_user
blog
percona.com
manual

max_allowed_packet
blog
percona.com
manual

max_binlog_cache_size
blog
percona.com
manual

max_binlog_dump_events
blog
percona.com
manual

max_binlog_size
blog
percona.com
manual

max_binlog_stmt_cache_size
blog
percona.com
manual

max_connect_errors
blog
percona.com
manual

max_connections
blog
percona.com
manual

max_delayed_threads
blog
percona.com
manual

max_error_count
blog
percona.com
manual

max_heap_table_size
blog
percona.com
manual

max_insert_delayed_threads
blog
percona.com
manual

max_join_size
blog
percona.com
manual

max_length_for_sort_data
blog
percona.com
manual

max_prepared_stmt_count
blog
percona.com
manual

max_relay_log_size
blog
percona.com
manual

max_seeks_for_key
blog
percona.com
manual

max_sort_length
blog
percona.com
manual

max_sp_recursion_depth
blog
percona.com
manual

max_tmp_tables
blog
percona.com
manual

Max_used_connections
blog
percona.com
manual

max_user_connections
blog
percona.com
manual

max_write_lock_count
blog
percona.com
manual

memlock
blog
percona.com
manual

min_examined_row_limit
blog
percona.com
manual

myisam_block_size
blog
percona.com
manual

myisam_data_pointer_size
blog
percona.com
manual

myisam_max_sort_file_size
blog
percona.com
manual

myisam_mmap_size
blog
percona.com
manual

myisam_recover
blog
percona.com
manual

myisam_recover_options
blog
percona.com
manual

myisam_recover_options
blog
percona.com
manual

myisam_repair_threads
blog
percona.com
manual

myisam_sort_buffer_size
blog
percona.com
manual

myisam_stats_method
blog
percona.com
manual

myisam_use_mmap
blog
percona.com
manual

named_pipe
blog
percona.com
manual

net_buffer_length
blog
percona.com
manual

net_read_timeout
blog
percona.com
manual

net_retry_count
blog
percona.com
manual

net_write_timeout
blog
percona.com
manual

new
blog
percona.com
manual

no_defaults
blog
percona.com
manual

Not_flushed_delayed_rows
blog
percona.com
manual

old
blog
percona.com
manual

old_alter_table
blog
percona.com
manual

old_passwords
blog
percona.com
manual

old_style_user_limits
blog
percona.com
manual

one_thread
blog
percona.com
manual

Open_files
blog
percona.com
manual

open_files_limit
blog
percona.com
manual

Open_streams
blog
percona.com
manual

Open_table_definitions
blog
percona.com
manual

Open_tables
blog
percona.com
manual

Opened_files
blog
percona.com
manual

Opened_table_definitions
blog
percona.com
manual

Opened_tables
blog
percona.com
manual

optimizer_prune_level
blog
percona.com
manual

optimizer_search_depth
blog
percona.com
manual

optimizer_switch
blog
percona.com
manual

partition
blog
percona.com
manual

performance_schema
blog
percona.com
manual

Performance_schema_cond_classes_lost
blog
percona.com
manual

Performance_schema_cond_instances_lost
blog
percona.com
manual

performance_schema_events_waits_history_long_size
blog
percona.com
manual

performance_schema_events_waits_history_size
blog
percona.com
manual

Performance_schema_file_classes_lost
blog
percona.com
manual

Performance_schema_file_handles_lost
blog
percona.com
manual

Performance_schema_file_instances_lost
blog
percona.com
manual

Performance_schema_locker_lost
blog
percona.com
manual

performance_schema_max_cond_classes
blog
percona.com
manual

performance_schema_max_cond_instances
blog
percona.com
manual

performance_schema_max_file_classes
blog
percona.com
manual

performance_schema_max_file_handles
blog
percona.com
manual

performance_schema_max_file_instances
blog
percona.com
manual

performance_schema_max_mutex_classes
blog
percona.com
manual

performance_schema_max_mutex_instances
blog
percona.com
manual

performance_schema_max_rwlock_classes
blog
percona.com
manual

performance_schema_max_rwlock_instances
blog
percona.com
manual

performance_schema_max_table_handles
blog
percona.com
manual

performance_schema_max_table_instances
blog
percona.com
manual

performance_schema_max_thread_classes
blog
percona.com
manual

performance_schema_max_thread_instances
blog
percona.com
manual

Performance_schema_mutex_classes_lost
blog
percona.com
manual

Performance_schema_mutex_instances_lost
blog
percona.com
manual

Performance_schema_rwlock_classes_lost
blog
percona.com
manual

Performance_schema_rwlock_instances_lost
blog
percona.com
manual

Performance_schema_table_handles_lost
blog
percona.com
manual

Performance_schema_table_instances_lost
blog
percona.com
manual

Performance_schema_thread_classes_lost
blog
percona.com
manual

Performance_schema_thread_instances_lost
blog
percona.com
manual

pid_file
blog
percona.com
manual

plugin
blog
percona.com
manual

plugin_dir
blog
percona.com
manual

plugin_load
blog
percona.com
manual

port
blog
percona.com
manual

port_open_timeout
blog
percona.com
manual

preload_buffer_size
blog
percona.com
manual

Prepared_stmt_count
blog
percona.com
manual

print_defaults
blog
percona.com
manual

profiling
blog
percona.com
manual

profiling_history_size
blog
percona.com
manual

protocol_version
blog
percona.com
manual

proxy_user
blog
percona.com
manual

pseudo_thread_id
blog
percona.com
manual

Qcache_free_blocks
blog
percona.com
manual

Qcache_free_memory
blog
percona.com
manual

Qcache_hits
blog
percona.com
manual

Qcache_inserts
blog
percona.com
manual

Qcache_lowmem_prunes
blog
percona.com
manual

Qcache_not_cached
blog
percona.com
manual

Qcache_queries_in_cache
blog
percona.com
manual

Qcache_total_blocks
blog
percona.com
manual

Queries
blog
percona.com
manual

query_alloc_block_size
blog
percona.com
manual

query_cache_limit
blog
percona.com
manual

query_cache_min_res_unit
blog
percona.com
manual

query_cache_size
blog
percona.com
manual

query_cache_type
blog
percona.com
manual

query_cache_wlock_invalidate
blog
percona.com
manual

query_prealloc_size
blog
percona.com
manual

Questions
blog
percona.com
manual

rand_seed1
blog
percona.com
manual

rand_seed2
blog
percona.com
manual

range_alloc_block_size
blog
percona.com
manual

read_buffer_size
blog
percona.com
manual

read_only
blog
percona.com
manual

read_rnd_buffer_size
blog
percona.com
manual

relay_log
blog
percona.com
manual

relay_log_index
blog
percona.com
manual

relay_log_info_file
blog
percona.com
manual

relay_log_purge
blog
percona.com
manual

relay_log_recovery
blog
percona.com
manual

relay_log_space_limit
blog
percona.com
manual

replicate_do_db
blog
percona.com
manual

replicate_do_table
blog
percona.com
manual

replicate_ignore_db
blog
percona.com
manual

replicate_ignore_table
blog
percona.com
manual

replicate_rewrite_db
blog
percona.com
manual

replicate_same_server_id
blog
percona.com
manual

replicate_wild_do_table
blog
percona.com
manual

replicate_wild_ignore_table
blog
percona.com
manual

report_host
blog
percona.com
manual

report_password
blog
percona.com
manual

report_port
blog
percona.com
manual

report_user
blog
percona.com
manual

rpl_recovery_rank
blog
percona.com
manual

Rpl_semi_sync_master_clients
blog
percona.com
manual

rpl_semi_sync_master_enabled
blog
percona.com
manual

Rpl_semi_sync_master_net_avg_wait_time
blog
percona.com
manual

Rpl_semi_sync_master_net_wait_time
blog
percona.com
manual

Rpl_semi_sync_master_net_waits
blog
percona.com
manual

Rpl_semi_sync_master_no_times
blog
percona.com
manual

Rpl_semi_sync_master_no_tx
blog
percona.com
manual

Rpl_semi_sync_master_status
blog
percona.com
manual

Rpl_semi_sync_master_timefunc_failures
blog
percona.com
manual

rpl_semi_sync_master_timeout
blog
percona.com
manual

rpl_semi_sync_master_trace_level
blog
percona.com
manual

Rpl_semi_sync_master_tx_avg_wait_time
blog
percona.com
manual

Rpl_semi_sync_master_tx_wait_time
blog
percona.com
manual

Rpl_semi_sync_master_tx_waits
blog
percona.com
manual

rpl_semi_sync_master_wait_no_slave
blog
percona.com
manual

Rpl_semi_sync_master_wait_pos_backtraverse
blog
percona.com
manual

Rpl_semi_sync_master_wait_sessions
blog
percona.com
manual

Rpl_semi_sync_master_yes_tx
blog
percona.com
manual

rpl_semi_sync_slave_enabled
blog
percona.com
manual

Rpl_semi_sync_slave_status
blog
percona.com
manual

rpl_semi_sync_slave_trace_level
blog
percona.com
manual

Rpl_status
blog
percona.com
manual

safe_mode
blog
percona.com
manual

safe_show_database
blog
percona.com
manual

safe_user_create
blog
percona.com
manual

secure_auth
blog
percona.com
manual

secure_file_priv
blog
percona.com
manual

Select_full_join
blog
percona.com
manual

Select_full_range_join
blog
percona.com
manual

Select_range
blog
percona.com
manual

Select_range_check
blog
percona.com
manual

Select_scan
blog
percona.com
manual

server_id
blog
percona.com
manual

shared_memory
blog
percona.com
manual

shared_memory_base_name
blog
percona.com
manual

show_slave_auth_info
blog
percona.com
manual

skip_character_set_client_handshake
blog
percona.com
manual

skip_concurrent_insert
blog
percona.com
manual

skip_event_scheduler
blog
percona.com
manual

skip_external_locking
blog
percona.com
manual

skip_grant_tables
blog
percona.com
manual

skip_host_cache
blog
percona.com
manual

skip_locking
blog
percona.com
manual

skip_log_warnings
blog
percona.com
manual

skip_name_resolve
blog
percona.com
manual

skip_networking
blog
percona.com
manual

skip_partition
blog
percona.com
manual

skip_safemalloc
blog
percona.com
manual

skip_show_database
blog
percona.com
manual

skip_slave_start
blog
percona.com
manual

skip_ssl
blog
percona.com
manual

skip_stack_trace
blog
percona.com
manual

skip_symbolic_links
blog
percona.com
manual

skip_thread_priority
blog
percona.com
manual

slave_compressed_protocol
blog
percona.com
manual

slave_exec_mode
blog
percona.com
manual

Slave_heartbeat_period
blog
percona.com
manual

slave_load_tmpdir
blog
percona.com
manual

slave_net_timeout
blog
percona.com
manual

Slave_open_temp_tables
blog
percona.com
manual

Slave_received_heartbeats
blog
percona.com
manual

Slave_retried_transactions
blog
percona.com
manual

Slave_running
blog
percona.com
manual

slave_skip_errors
blog
percona.com
manual

slave_transaction_retries
blog
percona.com
manual

slave_type_conversions
blog
percona.com
manual

Slow_launch_threads
blog
percona.com
manual

slow_launch_time
blog
percona.com
manual

Slow_queries
blog
percona.com
manual

slow_query_log
blog
percona.com
manual

slow_query_log_file
blog
percona.com
manual

socket
blog
percona.com
manual

sort_buffer_size
blog
percona.com
manual

Sort_merge_passes
blog
percona.com
manual

Sort_range
blog
percona.com
manual

Sort_rows
blog
percona.com
manual

Sort_scan
blog
percona.com
manual

sporadic_binlog_dump_fail
blog
percona.com
manual

sql_auto_is_null
blog
percona.com
manual

sql_big_selects
blog
percona.com
manual

sql_big_tables
blog
percona.com
manual

sql_buffer_result
blog
percona.com
manual

sql_log_bin
blog
percona.com
manual

sql_log_off
blog
percona.com
manual

sql_log_update
blog
percona.com
manual

sql_low_priority_updates
blog
percona.com
manual

sql_max_join_size
blog
percona.com
manual

sql_mode
blog
percona.com
manual

sql_notes
blog
percona.com
manual

sql_quote_show_create
blog
percona.com
manual

sql_safe_updates
blog
percona.com
manual

sql_select_limit
blog
percona.com
manual

sql_slave_skip_counter
blog
percona.com
manual

sql_warnings
blog
percona.com
manual

ssl
blog
percona.com
manual

Ssl_accept_renegotiates
blog
percona.com
manual

Ssl_accepts
blog
percona.com
manual

ssl_ca
blog
percona.com
manual

Ssl_callback_cache_hits
blog
percona.com
manual

ssl_capath
blog
percona.com
manual

ssl_cert
blog
percona.com
manual

ssl_cipher
blog
percona.com
manual

Ssl_cipher
blog
percona.com
manual

Ssl_cipher_list
blog
percona.com
manual

Ssl_client_connects
blog
percona.com
manual

Ssl_connect_renegotiates
blog
percona.com
manual

Ssl_ctx_verify_depth
blog
percona.com
manual

Ssl_ctx_verify_mode
blog
percona.com
manual

Ssl_default_timeout
blog
percona.com
manual

Ssl_finished_accepts
blog
percona.com
manual

Ssl_finished_connects
blog
percona.com
manual

ssl_key
blog
percona.com
manual

Ssl_session_cache_hits
blog
percona.com
manual

Ssl_session_cache_misses
blog
percona.com
manual

Ssl_session_cache_mode
blog
percona.com
manual

Ssl_session_cache_overflows
blog
percona.com
manual

Ssl_session_cache_size
blog
percona.com
manual

Ssl_session_cache_timeouts
blog
percona.com
manual

Ssl_sessions_reused
blog
percona.com
manual

Ssl_used_session_cache_entries
blog
percona.com
manual

Ssl_verify_depth
blog
percona.com
manual

Ssl_verify_mode
blog
percona.com
manual

ssl_verify_server_cert
blog
percona.com
manual

Ssl_version
blog
percona.com
manual

standalone
blog
percona.com
manual

storage_engine
blog
percona.com
manual

symbolic_links
blog
percona.com
manual

sync_binlog
blog
percona.com
manual

sync_frm
blog
percona.com
manual

sync_master_info
blog
percona.com
manual

sync_relay_log
blog
percona.com
manual

sync_relay_log_info
blog
percona.com
manual

sysdate_is_now
blog
percona.com
manual

system_time_zone
blog
percona.com
manual

table_definition_cache
blog
percona.com
manual

table_lock_wait_timeout
blog
percona.com
manual

Table_locks_immediate
blog
percona.com
manual

Table_locks_waited
blog
percona.com
manual

table_open_cache
blog
percona.com
manual

table_type
blog
percona.com
manual

tc_heuristic_recover
blog
percona.com
manual

Tc_log_max_pages_used
blog
percona.com
manual

Tc_log_page_size
blog
percona.com
manual

Tc_log_page_waits
blog
percona.com
manual

temp_pool
blog
percona.com
manual

thread_cache_size
blog
percona.com
manual

thread_concurrency
blog
percona.com
manual

thread_handling
blog
percona.com
manual

thread_stack
blog
percona.com
manual

Threads_cached
blog
percona.com
manual

Threads_connected
blog
percona.com
manual

Threads_created
blog
percona.com
manual

Threads_running
blog
percona.com
manual

time_format
blog
percona.com
manual

time_zone
blog
percona.com
manual

timed_mutexes
blog
percona.com
manual

timestamp
blog
percona.com
manual

tmp_table_size
blog
percona.com
manual

tmpdir
blog
percona.com
manual

transaction_alloc_block_size
blog
percona.com
manual

transaction_isolation
blog
percona.com
manual

transaction_prealloc_size
blog
percona.com
manual

tx_isolation
blog
percona.com
manual

unique_checks
blog
percona.com
manual

updatable_views_with_limit
blog
percona.com
manual

Uptime
blog
percona.com
manual

Uptime_since_flush_status
blog
percona.com
manual

user
blog
percona.com
manual

verbose
blog
percona.com
manual

version
blog
percona.com
manual

version_comment
blog
percona.com
manual

version_compile_machine
blog
percona.com
manual

version_compile_os
blog
percona.com
manual

wait_timeout
blog
percona.com
manual

warning_count
blog
percona.com
manual

Entry posted by Baron Schwartz |
No comment
Add to: | | | |

Terabytes is not big data, petabytes is

Jan 07, 2011

I often wonder what’s behind the increased trend behind Hadoop and other NoSQL technologies. I realize if you’re Yahoo that such technology makes sense. I don’t get why everyone else wants to use it.
Reading Stephen O’Grady’s self-review of his predictions for 2010 for the first time gave me some insights into how such people think:

Democratization of Big Data
Consider that RedMonk, a four person analyst shop, has the technical wherewithal to attack datasets ranging from gigabytes to terabytes in size. Unless you?re making institutional money, budgets historically have not permitted this. The tools of Big Data have never been more accessible than they are today.
read more

Calling invokedynamic in Java

Jan 07, 2011

DynamicIndy

There is no way to invoke invokedynamic using the Java language. So testing invokedynamic is not that obvious if you don’t have your own dynamic language.
I’ve developed a small class DynamicIndy that uses ASM 4.0 (not an official release) to generate a static method that calls invokedynamic. These static method is after converted to a MethodHandle that can be called in Java
The code is available at the bottom of this post

How to use it ?

DynamicIndy defines a method named (judiciously :) invokedynamic that takes a name and a MethodType, a way to specify a bootstrap method (a triple class, method name, method type ) and some optional arguments for the bootstrap method.
The following code shows how to create a BigDecimal constant using invokedynamic.

This code shows how to use it:

 public class DynamicIndyTest {
  public static CallSite bsm(Lookup lookup, String name, MethodType methodType, Object arg) {
    System.out.println("construct the BigDecimal constant "+arg);
    return new ConstantCallSite(
        MethodHandles.constant(BigDecimal.class, new BigDecimal(arg.toString())));
  }

  public static void main(String[] args) throws Throwable {
    DynamicIndy dynamicIndy = new DynamicIndy();
    MethodHandle mh = dynamicIndy.invokeDynamic("_", MethodType.methodType(BigDecimal.class),
        DynamicIndyTest.class, "bsm", MethodType.methodType(CallSite.class, Lookup.class, String.class, MethodType.class, Object.class),
        "1234567890.1234567890"
        );
    System.out.println((BigDecimal)mh.invokeExact());
    System.out.println((BigDecimal)mh.invokeExact());
  }
}

If you run this code

java -XX:+UnlockExperimentalVMOptions -XX:+EnableInvokeDynamic
  -cp .:asm-all-4.0-beta1.jar DynamicIndyTest

it will print

construct the BigDecimal constant 1234567890.1234567890
1234567890.1234567890
1234567890.1234567890

As you see the bootstrap method is called once and the constant reused.

cheers,
Rémi

Attachment Size
dynamic-indy.zip 289.49 KB