Merge jdk7u14-b17 into jdk7u14-b18
diff --git a/.hgtags-top-repo b/.hgtags-top-repo
index 4278f92..a4e2f7a 100644
--- a/.hgtags-top-repo
+++ b/.hgtags-top-repo
@@ -267,3 +267,4 @@
0c2b2dae93e7a720bbcc2e13a1913a2264335554 jdk7u17-b01
8e49ff2feda30801d7826ca1778eb7b901a7089c jdk7u17-b02
210f464368dba0fc4f8d239654fa7432ad2ed31f jdk7u14-b16
+f07712232642fc30dcf7c433ff890e7247b5fd0b jdk7u14-b17
diff --git a/corba/.hgtags b/corba/.hgtags
index 9232726..93a262b 100644
--- a/corba/.hgtags
+++ b/corba/.hgtags
@@ -267,3 +267,4 @@
94e8b9b0e0ef1685e2f2fcc886e08a42a85c8e03 jdk7u17-b01
e82d31e1f1189ae6f02d6855f0cd78074599b2e1 jdk7u17-b02
38282b734daefcbb8155b7d7ef9664130330ed14 jdk7u14-b16
+8b1d77697ca4d2a9c29d67fd2ff03aded9b06012 jdk7u14-b17
diff --git a/corba/src/share/classes/com/sun/corba/se/impl/corba/TypeCodeImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/corba/TypeCodeImpl.java
index c9b6e55..7e926dd 100644
--- a/corba/src/share/classes/com/sun/corba/se/impl/corba/TypeCodeImpl.java
+++ b/corba/src/share/classes/com/sun/corba/se/impl/corba/TypeCodeImpl.java
@@ -2189,10 +2189,7 @@
if (labelIndex == _unionLabels.length) {
// check if label has not been found
- if (_defaultIndex == -1)
- // throw exception if default was not expected
- throw wrapper.unexpectedUnionDefault() ;
- else
+ if (_defaultIndex != -1)
// must be of the default branch type
_memberTypes[_defaultIndex].copy(src, dst);
}
diff --git a/hotspot/.hgtags b/hotspot/.hgtags
index 9b79f72..e71151e 100644
--- a/hotspot/.hgtags
+++ b/hotspot/.hgtags
@@ -457,3 +457,5 @@
be21f8a4d42c03cafde4f616fd80ece791ba2f21 hs24-b35
10e0043bda0878dbc85f3f280157eab592b47c91 jdk7u14-b16
7416b0a84e3c5b0eea46affb71cc36cc729c040c hs24-b36
+61822da2b149bd272b5e7b727c142635f1d52d5c jdk7u14-b17
+c5c01d4cd7d9a5141e0945a5811c76267da0df13 hs24-b37
diff --git a/hotspot/make/hotspot_version b/hotspot/make/hotspot_version
index 3b64256..75c02d9 100644
--- a/hotspot/make/hotspot_version
+++ b/hotspot/make/hotspot_version
@@ -35,7 +35,7 @@
HS_MAJOR_VER=24
HS_MINOR_VER=0
-HS_BUILD_NUMBER=36
+HS_BUILD_NUMBER=37
JDK_MAJOR_VER=1
JDK_MINOR_VER=7
diff --git a/hotspot/src/os/bsd/vm/os_bsd.cpp b/hotspot/src/os/bsd/vm/os_bsd.cpp
index 0ca316e..71c2676 100644
--- a/hotspot/src/os/bsd/vm/os_bsd.cpp
+++ b/hotspot/src/os/bsd/vm/os_bsd.cpp
@@ -55,6 +55,7 @@
#include "runtime/threadCritical.hpp"
#include "runtime/timer.hpp"
#include "services/attachListener.hpp"
+#include "services/memTracker.hpp"
#include "services/runtimeService.hpp"
#include "thread_bsd.inline.hpp"
#include "utilities/decoder.hpp"
@@ -3315,13 +3316,25 @@
return NULL;
}
+ // The memory is committed
+ address pc = CALLER_PC;
+ MemTracker::record_virtual_memory_reserve((address)addr, bytes, pc);
+ MemTracker::record_virtual_memory_commit((address)addr, bytes, pc);
+
return addr;
}
bool os::release_memory_special(char* base, size_t bytes) {
// detaching the SHM segment will also delete it, see reserve_memory_special()
int rslt = shmdt(base);
- return rslt == 0;
+ if (rslt == 0) {
+ MemTracker::record_virtual_memory_uncommit((address)base, bytes);
+ MemTracker::record_virtual_memory_release((address)base, bytes);
+ return true;
+ } else {
+ return false;
+ }
+
}
size_t os::large_page_size() {
diff --git a/hotspot/src/os/linux/vm/os_linux.cpp b/hotspot/src/os/linux/vm/os_linux.cpp
index 5776bf7..6c946d0 100644
--- a/hotspot/src/os/linux/vm/os_linux.cpp
+++ b/hotspot/src/os/linux/vm/os_linux.cpp
@@ -55,6 +55,7 @@
#include "runtime/threadCritical.hpp"
#include "runtime/timer.hpp"
#include "services/attachListener.hpp"
+#include "services/memTracker.hpp"
#include "services/runtimeService.hpp"
#include "thread_linux.inline.hpp"
#include "utilities/decoder.hpp"
@@ -3116,13 +3117,24 @@
numa_make_global(addr, bytes);
}
+ // The memory is committed
+ address pc = CALLER_PC;
+ MemTracker::record_virtual_memory_reserve((address)addr, bytes, pc);
+ MemTracker::record_virtual_memory_commit((address)addr, bytes, pc);
+
return addr;
}
bool os::release_memory_special(char* base, size_t bytes) {
// detaching the SHM segment will also delete it, see reserve_memory_special()
int rslt = shmdt(base);
- return rslt == 0;
+ if (rslt == 0) {
+ MemTracker::record_virtual_memory_uncommit((address)base, bytes);
+ MemTracker::record_virtual_memory_release((address)base, bytes);
+ return true;
+ } else {
+ return false;
+ }
}
size_t os::large_page_size() {
diff --git a/hotspot/src/os/solaris/vm/os_solaris.cpp b/hotspot/src/os/solaris/vm/os_solaris.cpp
index f737895..64acfa2 100644
--- a/hotspot/src/os/solaris/vm/os_solaris.cpp
+++ b/hotspot/src/os/solaris/vm/os_solaris.cpp
@@ -3426,13 +3426,25 @@
if ((retAddr != NULL) && UseNUMAInterleaving) {
numa_make_global(retAddr, size);
}
+
+ // The memory is committed
+ address pc = CALLER_PC;
+ MemTracker::record_virtual_memory_reserve((address)retAddr, size, pc);
+ MemTracker::record_virtual_memory_commit((address)retAddr, size, pc);
+
return retAddr;
}
bool os::release_memory_special(char* base, size_t bytes) {
// detaching the SHM segment will also delete it, see reserve_memory_special()
int rslt = shmdt(base);
- return rslt == 0;
+ if (rslt == 0) {
+ MemTracker::record_virtual_memory_uncommit((address)base, bytes);
+ MemTracker::record_virtual_memory_release((address)base, bytes);
+ return true;
+ } else {
+ return false;
+ }
}
size_t os::large_page_size() {
diff --git a/hotspot/src/os/windows/vm/os_windows.cpp b/hotspot/src/os/windows/vm/os_windows.cpp
index 3e9f2cd..5a00053 100644
--- a/hotspot/src/os/windows/vm/os_windows.cpp
+++ b/hotspot/src/os/windows/vm/os_windows.cpp
@@ -58,6 +58,7 @@
#include "runtime/threadCritical.hpp"
#include "runtime/timer.hpp"
#include "services/attachListener.hpp"
+#include "services/memTracker.hpp"
#include "services/runtimeService.hpp"
#include "thread_windows.inline.hpp"
#include "utilities/decoder.hpp"
@@ -2808,7 +2809,7 @@
PAGE_READWRITE);
// If reservation failed, return NULL
if (p_buf == NULL) return NULL;
-
+ MemTracker::record_virtual_memory_reserve((address)p_buf, size_of_reserve, CALLER_PC);
os::release_memory(p_buf, bytes + chunk_size);
// we still need to round up to a page boundary (in case we are using large pages)
@@ -2870,6 +2871,11 @@
if (next_alloc_addr > p_buf) {
// Some memory was committed so release it.
size_t bytes_to_release = bytes - bytes_remaining;
+ // NMT has yet to record any individual blocks, so it
+ // need to create a dummy 'reserve' record to match
+ // the release.
+ MemTracker::record_virtual_memory_reserve((address)p_buf,
+ bytes_to_release, CALLER_PC);
os::release_memory(p_buf, bytes_to_release);
}
#ifdef ASSERT
@@ -2881,10 +2887,19 @@
#endif
return NULL;
}
+
bytes_remaining -= bytes_to_rq;
next_alloc_addr += bytes_to_rq;
count++;
}
+ // Although the memory is allocated individually, it is returned as one.
+ // NMT records it as one block.
+ address pc = CALLER_PC;
+ MemTracker::record_virtual_memory_reserve((address)p_buf, bytes, pc);
+ if ((flags & MEM_COMMIT) != 0) {
+ MemTracker::record_virtual_memory_commit((address)p_buf, bytes, pc);
+ }
+
// made it this far, success
return p_buf;
}
@@ -3071,11 +3086,20 @@
// normal policy just allocate it all at once
DWORD flag = MEM_RESERVE | MEM_COMMIT | MEM_LARGE_PAGES;
char * res = (char *)VirtualAlloc(NULL, bytes, flag, prot);
+ if (res != NULL) {
+ address pc = CALLER_PC;
+ MemTracker::record_virtual_memory_reserve((address)res, bytes, pc);
+ MemTracker::record_virtual_memory_commit((address)res, bytes, pc);
+ }
+
return res;
}
}
bool os::release_memory_special(char* base, size_t bytes) {
+ assert(base != NULL, "Sanity check");
+ // Memory allocated via reserve_memory_special() is committed
+ MemTracker::record_virtual_memory_uncommit((address)base, bytes);
return release_memory(base, bytes);
}
diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
index d3c93b7..a75615a 100644
--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
+++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
@@ -5903,6 +5903,8 @@
&cmsKeepAliveClosure, false /* !preclean */);
{
GCTraceTime t("weak refs processing", PrintGCDetails, false, _gc_timer_cm);
+
+ ReferenceProcessorStats stats;
if (rp->processing_is_mt()) {
// Set the degree of MT here. If the discovery is done MT, there
// may have been a different number of threads doing the discovery
@@ -5921,18 +5923,20 @@
}
rp->set_active_mt_degree(active_workers);
CMSRefProcTaskExecutor task_executor(*this);
- rp->process_discovered_references(&_is_alive_closure,
+ stats = rp->process_discovered_references(&_is_alive_closure,
&cmsKeepAliveClosure,
&cmsDrainMarkingStackClosure,
&task_executor,
_gc_timer_cm);
} else {
- rp->process_discovered_references(&_is_alive_closure,
+ stats = rp->process_discovered_references(&_is_alive_closure,
&cmsKeepAliveClosure,
&cmsDrainMarkingStackClosure,
NULL,
_gc_timer_cm);
}
+ _gc_tracer_cm->report_gc_reference_stats(stats);
+
verify_work_stacks_empty();
}
diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp
index 05a2cb6..31c2a3f 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp
@@ -37,6 +37,7 @@
#include "gc_implementation/g1/heapRegionSeq.inline.hpp"
#include "gc_implementation/shared/vmGCOperations.hpp"
#include "gc_implementation/shared/gcTimer.hpp"
+#include "gc_implementation/shared/gcTrace.hpp"
#include "gc_implementation/shared/gcTraceTime.hpp"
#include "memory/genOopClosures.inline.hpp"
#include "memory/referencePolicy.hpp"
@@ -2325,6 +2326,7 @@
G1CMRefProcTaskExecutor par_task_executor(g1h, this,
g1h->workers(), active_workers);
+ ReferenceProcessorStats stats;
if (rp->processing_is_mt()) {
// Set the degree of MT here. If the discovery is done MT, there
// may have been a different number of threads doing the discovery
@@ -2333,7 +2335,7 @@
// balance_all_queues() and balance_queues()).
rp->set_active_mt_degree(active_workers);
- rp->process_discovered_references(&g1_is_alive,
+ stats = rp->process_discovered_references(&g1_is_alive,
&g1_keep_alive,
&g1_drain_mark_stack,
&par_task_executor,
@@ -2343,13 +2345,15 @@
// will set the has_overflown flag if we overflow the global marking
// stack.
} else {
- rp->process_discovered_references(&g1_is_alive,
+ stats = rp->process_discovered_references(&g1_is_alive,
&g1_keep_alive,
&g1_drain_mark_stack,
NULL,
g1h->gc_timer_cm());
}
+ g1h->gc_tracer_cm()->report_gc_reference_stats(stats);
+
assert(_markStack.overflow() || _markStack.isEmpty(),
"mark stack should be empty (unless it overflowed)");
if (_markStack.overflow()) {
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
index df06f05..50112bd 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
@@ -5584,22 +5584,28 @@
// Setup the soft refs policy...
rp->setup_policy(false);
+ ReferenceProcessorStats stats;
if (!rp->processing_is_mt()) {
// Serial reference processing...
- rp->process_discovered_references(&is_alive,
- &keep_alive,
- &drain_queue,
- NULL,
- _gc_timer_stw);
+ stats = rp->process_discovered_references(&is_alive,
+ &keep_alive,
+ &drain_queue,
+ NULL,
+ _gc_timer_stw);
} else {
// Parallel reference processing
assert(rp->num_q() == no_of_gc_workers, "sanity");
assert(no_of_gc_workers <= rp->max_num_q(), "sanity");
G1STWRefProcTaskExecutor par_task_executor(this, workers(), _task_queues, no_of_gc_workers);
- rp->process_discovered_references(&is_alive, &keep_alive, &drain_queue, &par_task_executor, _gc_timer_stw);
+ stats = rp->process_discovered_references(&is_alive,
+ &keep_alive,
+ &drain_queue,
+ &par_task_executor,
+ _gc_timer_stw);
}
+ _gc_tracer_stw->report_gc_reference_stats(stats);
// We have completed copying any necessary live referent objects
// (that were not copied during the actual pause) so we can
// retire any active alloc buffers
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp
index 01cbb98..36dfedf 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp
@@ -1178,6 +1178,7 @@
ReferenceProcessor* ref_processor_cm() const { return _ref_processor_cm; }
ConcurrentGCTimer* gc_timer_cm() const { return _gc_timer_cm; }
+ G1OldTracer* gc_tracer_cm() const { return _gc_tracer_cm; }
virtual size_t capacity() const;
virtual size_t used() const;
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp
index 0214a5e..1768cd8 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp
@@ -148,11 +148,13 @@
assert(rp == G1CollectedHeap::heap()->ref_processor_stw(), "Sanity");
rp->setup_policy(clear_all_softrefs);
- rp->process_discovered_references(&GenMarkSweep::is_alive,
- &GenMarkSweep::keep_alive,
- &GenMarkSweep::follow_stack_closure,
- NULL,
- gc_timer());
+ const ReferenceProcessorStats& stats =
+ rp->process_discovered_references(&GenMarkSweep::is_alive,
+ &GenMarkSweep::keep_alive,
+ &GenMarkSweep::follow_stack_closure,
+ NULL,
+ gc_timer());
+ gc_tracer()->report_gc_reference_stats(stats);
// Follow system dictionary roots and unload classes
bool purged_class = SystemDictionary::do_unloading(&GenMarkSweep::is_alive);
diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp
index 4713cfa..e302ad0 100644
--- a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp
+++ b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp
@@ -33,6 +33,7 @@
#include "gc_implementation/shared/gcTimer.hpp"
#include "gc_implementation/shared/gcTrace.hpp"
#include "gc_implementation/shared/gcTraceTime.hpp"
+#include "gc_implementation/shared/promotionFailedInfo.hpp"
#include "gc_implementation/shared/spaceDecorator.hpp"
#include "memory/defNewGeneration.inline.hpp"
#include "memory/genCollectedHeap.hpp"
@@ -79,7 +80,6 @@
work_queue_set_, &term_),
_is_alive_closure(gen_), _scan_weak_ref_closure(gen_, this),
_keep_alive_closure(&_scan_weak_ref_closure),
- _promotion_failure_size(0),
_strong_roots_time(0.0), _term_time(0.0)
{
#if TASKQUEUE_STATS
@@ -283,13 +283,10 @@
}
}
-void ParScanThreadState::print_and_clear_promotion_failure_size() {
- if (_promotion_failure_size != 0) {
- if (PrintPromotionFailure) {
- gclog_or_tty->print(" (%d: promotion failure size = " SIZE_FORMAT ") ",
- _thread_num, _promotion_failure_size);
- }
- _promotion_failure_size = 0;
+void ParScanThreadState::print_promotion_failure_size() {
+ if (_promotion_failed_info.promotion_failed() && PrintPromotionFailure) {
+ gclog_or_tty->print(" (%d: promotion failure size = " SIZE_FORMAT ") ",
+ _thread_num, _promotion_failed_info.first_size());
}
}
@@ -309,6 +306,7 @@
inline ParScanThreadState& thread_state(int i);
+ void trace_promotion_failed(YoungGCTracer& gc_tracer);
void reset(int active_workers, bool promotion_failed);
void flush();
@@ -357,13 +355,21 @@
return ((ParScanThreadState*)_data)[i];
}
+void ParScanThreadStateSet::trace_promotion_failed(YoungGCTracer& gc_tracer) {
+ for (int i = 0; i < length(); ++i) {
+ if (thread_state(i).promotion_failed()) {
+ gc_tracer.report_promotion_failed(thread_state(i).promotion_failed_info());
+ thread_state(i).promotion_failed_info().reset();
+ }
+ }
+}
void ParScanThreadStateSet::reset(int active_threads, bool promotion_failed)
{
_term.reset_for_reuse(active_threads);
if (promotion_failed) {
for (int i = 0; i < length(); ++i) {
- thread_state(i).print_and_clear_promotion_failure_size();
+ thread_state(i).print_promotion_failure_size();
}
}
}
@@ -874,6 +880,8 @@
}
+// A Generation that does parallel young-gen collection.
+
bool ParNewGeneration::_avoid_promotion_undo = false;
void ParNewGeneration::adjust_desired_tenuring_threshold() {
@@ -882,7 +890,30 @@
age_table()->compute_tenuring_threshold(to()->capacity()/HeapWordSize);
}
-// A Generation that does parallel young-gen collection.
+void ParNewGeneration::handle_promotion_failed(GenCollectedHeap* gch, ParScanThreadStateSet& thread_state_set, ParNewTracer& gc_tracer) {
+ assert(_promo_failure_scan_stack.is_empty(), "post condition");
+ _promo_failure_scan_stack.clear(true); // Clear cached segments.
+
+ remove_forwarding_pointers();
+ if (PrintGCDetails) {
+ gclog_or_tty->print(" (promotion failed)");
+ }
+ // All the spaces are in play for mark-sweep.
+ swap_spaces(); // Make life simpler for CMS || rescan; see 6483690.
+ from()->set_next_compaction_space(to());
+ gch->set_incremental_collection_failed();
+ // Inform the next generation that a promotion failure occurred.
+ _next_gen->promotion_failure_occurred();
+
+ // Trace promotion failure in the parallel GC threads
+ thread_state_set.trace_promotion_failed(gc_tracer);
+ // Single threaded code may have reported promotion failure to the global state
+ if (_promotion_failed_info.promotion_failed()) {
+ gc_tracer.report_promotion_failed(_promotion_failed_info);
+ }
+ // Reset the PromotionFailureALot counters.
+ NOT_PRODUCT(Universe::heap()->reset_promotion_should_fail();)
+}
void ParNewGeneration::collect(bool full,
bool clear_all_soft_refs,
@@ -914,7 +945,7 @@
set_avoid_promotion_undo(true);
}
- // If the next generation is too full to accomodate worst-case promotion
+ // If the next generation is too full to accommodate worst-case promotion
// from this generation, pass on collection; let the next generation
// do it.
if (!collection_attempt_is_safe()) {
@@ -987,19 +1018,21 @@
rp->setup_policy(clear_all_soft_refs);
// Can the mt_degree be set later (at run_task() time would be best)?
rp->set_active_mt_degree(active_workers);
+ ReferenceProcessorStats stats;
if (rp->processing_is_mt()) {
ParNewRefProcTaskExecutor task_executor(*this, thread_state_set);
- rp->process_discovered_references(&is_alive, &keep_alive,
- &evacuate_followers, &task_executor,
- _gc_timer);
+ stats = rp->process_discovered_references(&is_alive, &keep_alive,
+ &evacuate_followers, &task_executor,
+ _gc_timer);
} else {
thread_state_set.flush();
gch->set_par_threads(0); // 0 ==> non-parallel.
gch->save_marks();
- rp->process_discovered_references(&is_alive, &keep_alive,
- &evacuate_followers, NULL,
- _gc_timer);
+ stats = rp->process_discovered_references(&is_alive, &keep_alive,
+ &evacuate_followers, NULL,
+ _gc_timer);
}
+ gc_tracer.report_gc_reference_stats(stats);
if (!promotion_failed()) {
// Swap the survivor spaces.
eden()->clear(SpaceDecorator::Mangle);
@@ -1022,22 +1055,7 @@
assert(to()->is_empty(), "to space should be empty now");
} else {
- assert(_promo_failure_scan_stack.is_empty(), "post condition");
- _promo_failure_scan_stack.clear(true); // Clear cached segments.
-
- remove_forwarding_pointers();
- if (PrintGCDetails) {
- gclog_or_tty->print(" (promotion failed)");
- }
- // All the spaces are in play for mark-sweep.
- swap_spaces(); // Make life simpler for CMS || rescan; see 6483690.
- from()->set_next_compaction_space(to());
- gch->set_incremental_collection_failed();
- // Inform the next generation that a promotion failure occurred.
- _next_gen->promotion_failure_occurred();
-
- // Reset the PromotionFailureALot counters.
- NOT_PRODUCT(Universe::heap()->reset_promotion_should_fail();)
+ handle_promotion_failed(gch, thread_state_set, gc_tracer);
}
// set new iteration safe limit for the survivor spaces
from()->set_concurrent_iteration_safe_limit(from()->top());
@@ -1193,8 +1211,7 @@
new_obj = old;
preserve_mark_if_necessary(old, m);
- // Log the size of the maiden promotion failure
- par_scan_state->log_promotion_failure(sz);
+ par_scan_state->register_promotion_failure(sz);
}
old->forward_to(new_obj);
@@ -1309,8 +1326,7 @@
failed_to_promote = true;
preserve_mark_if_necessary(old, m);
- // Log the size of the maiden promotion failure
- par_scan_state->log_promotion_failure(sz);
+ par_scan_state->register_promotion_failure(sz);
}
} else {
// Is in to-space; do copying ourselves.
diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp
index b8a2d1e..537a6f7 100644
--- a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp
+++ b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp
@@ -25,7 +25,9 @@
#ifndef SHARE_VM_GC_IMPLEMENTATION_PARNEW_PARNEWGENERATION_HPP
#define SHARE_VM_GC_IMPLEMENTATION_PARNEW_PARNEWGENERATION_HPP
+#include "gc_implementation/shared/gcTrace.hpp"
#include "gc_implementation/shared/parGCAllocBuffer.hpp"
+#include "gc_implementation/shared/promotionFailedInfo.hpp"
#include "memory/defNewGeneration.hpp"
#include "utilities/taskqueue.hpp"
@@ -105,7 +107,7 @@
#endif // TASKQUEUE_STATS
// Stats for promotion failure
- size_t _promotion_failure_size;
+ PromotionFailedInfo _promotion_failed_info;
// Timing numbers.
double _start;
@@ -180,13 +182,16 @@
void undo_alloc_in_to_space(HeapWord* obj, size_t word_sz);
// Promotion failure stats
- size_t promotion_failure_size() { return promotion_failure_size(); }
- void log_promotion_failure(size_t sz) {
- if (_promotion_failure_size == 0) {
- _promotion_failure_size = sz;
- }
+ void register_promotion_failure(size_t sz) {
+ _promotion_failed_info.register_promotion_failed(sz);
}
- void print_and_clear_promotion_failure_size();
+ PromotionFailedInfo& promotion_failed_info() {
+ return _promotion_failed_info;
+ }
+ bool promotion_failed() {
+ return _promotion_failed_info.promotion_failed();
+ }
+ void print_promotion_failure_size();
#if TASKQUEUE_STATS
TaskQueueStats & taskqueue_stats() const { return _work_queue->stats; }
@@ -337,6 +342,8 @@
// word being overwritten with a self-forwarding-pointer.
void preserve_mark_if_necessary(oop obj, markOop m);
+ void handle_promotion_failed(GenCollectedHeap* gch, ParScanThreadStateSet& thread_state_set, ParNewTracer& gc_tracer);
+
protected:
bool _survivor_overflow;
diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp
index 247e8a8..39997ff 100644
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp
@@ -538,8 +538,10 @@
// Process reference objects found during marking
{
ref_processor()->setup_policy(clear_all_softrefs);
- ref_processor()->process_discovered_references(
- is_alive_closure(), mark_and_push_closure(), follow_stack_closure(), NULL, _gc_timer);
+ const ReferenceProcessorStats& stats =
+ ref_processor()->process_discovered_references(
+ is_alive_closure(), mark_and_push_closure(), follow_stack_closure(), NULL, _gc_timer);
+ gc_tracer()->report_gc_reference_stats(stats);
}
// Follow system dictionary roots and unload classes
diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp
index 005765f..cb2ca3b 100644
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp
@@ -2086,7 +2086,7 @@
bool marked_for_unloading = false;
marking_start.update();
- marking_phase(vmthread_cm, maximum_heap_compaction, &_gc_tracer);
+ marking_phase(vmthread_cm, maximum_heap_compaction);
#ifndef PRODUCT
if (TraceParallelOldGCMarkingPhase) {
@@ -2361,9 +2361,7 @@
return ParallelScavengeHeap::gc_task_manager();
}
-void PSParallelCompact::marking_phase(ParCompactionManager* cm,
- bool maximum_heap_compaction,
- ParallelOldTracer *gc_tracer) {
+void PSParallelCompact::marking_phase(ParCompactionManager* cm, bool maximum_heap_compaction) {
// Recursively traverse all live objects and mark them
GCTraceTime tm("marking phase", print_phases(), true, &_gc_timer);
@@ -2407,18 +2405,19 @@
{
GCTraceTime tm_r("reference processing", print_phases(), true, &_gc_timer);
+ ReferenceProcessorStats stats;
if (ref_processor()->processing_is_mt()) {
RefProcTaskExecutor task_executor;
- ref_processor()->process_discovered_references(
+ stats = ref_processor()->process_discovered_references(
is_alive_closure(), &mark_and_push_closure, &follow_stack_closure,
&task_executor, &_gc_timer);
} else {
- ref_processor()->process_discovered_references(
+ stats = ref_processor()->process_discovered_references(
is_alive_closure(), &mark_and_push_closure, &follow_stack_closure, NULL,
&_gc_timer);
}
- gc_tracer->report_gc_reference_processing(ref_processor()->collect_statistics());
+ _gc_tracer.report_gc_reference_stats(stats);
}
GCTraceTime tm_c("class unloading", print_phases(), true, &_gc_timer);
diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp
index c7916cf..51d2019 100644
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp
@@ -890,9 +890,7 @@
static void post_compact();
// Mark live objects
- static void marking_phase(ParCompactionManager* cm,
- bool maximum_heap_compaction,
- ParallelOldTracer *gc_tracer);
+ static void marking_phase(ParCompactionManager* cm, bool maximum_heap_compaction);
static void follow_weak_klass_links();
static void follow_mdo_weak_refs();
diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp
index 8c75ddc..d159763 100644
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp
@@ -27,8 +27,8 @@
#include "gc_implementation/parallelScavenge/psOldGen.hpp"
#include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp"
#include "gc_implementation/parallelScavenge/psScavenge.inline.hpp"
+#include "gc_implementation/shared/gcTrace.hpp"
#include "gc_implementation/shared/mutableSpace.hpp"
-#include "gc_implementation/shared/promotionFailedInfo.hpp"
#include "memory/memRegion.hpp"
#include "oops/oop.inline.hpp"
#include "oops/oop.psgc.inline.hpp"
@@ -87,24 +87,20 @@
}
}
-PromotionFailedInfo PSPromotionManager::post_scavenge() {
- size_t promotion_failed_size = 0;
- uint promotion_failed_count = 0;
- PromotionFailedInfo pfi;
+bool PSPromotionManager::post_scavenge(YoungGCTracer& gc_tracer) {
+ bool promotion_failure_occurred = false;
TASKQUEUE_STATS_ONLY(if (PrintGCDetails && ParallelGCVerbose) print_stats());
for (uint i = 0; i < ParallelGCThreads + 1; i++) {
PSPromotionManager* manager = manager_array(i);
assert(manager->claimed_stack_depth()->is_empty(), "should be empty");
if (manager->_promotion_failed_info.promotion_failed()) {
- promotion_failed_size += manager->_promotion_failed_info.promotion_failed_size();
- promotion_failed_count += manager->_promotion_failed_info.promotion_failed_count();
+ gc_tracer.report_promotion_failed(manager->_promotion_failed_info);
+ promotion_failure_occurred = true;
}
manager->flush_labs();
}
-
- pfi.set_promotion_failed(promotion_failed_size, promotion_failed_count);
- return pfi;
+ return promotion_failure_occurred;
}
#if TASKQUEUE_STATS
diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp
index 0d75bef..a1e96eb 100644
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp
@@ -26,6 +26,7 @@
#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPROMOTIONMANAGER_HPP
#include "gc_implementation/parallelScavenge/psPromotionLAB.hpp"
+#include "gc_implementation/shared/gcTrace.hpp"
#include "gc_implementation/shared/promotionFailedInfo.hpp"
#include "memory/allocation.hpp"
#include "utilities/taskqueue.hpp"
@@ -152,7 +153,7 @@
static void initialize();
static void pre_scavenge();
- static PromotionFailedInfo post_scavenge();
+ static bool post_scavenge(YoungGCTracer& gc_tracer);
static PSPromotionManager* gc_thread_promotion_manager(int index);
static PSPromotionManager* vm_thread_promotion_manager();
diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp
index 4b9cb0f..7132160 100644
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp
@@ -332,7 +332,6 @@
{
ResourceMark rm;
HandleMark hm;
- PromotionFailedInfo promotion_failed_info;
gclog_or_tty->date_stamp(PrintGC && PrintGCDateStamps);
TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty);
@@ -449,17 +448,18 @@
reference_processor()->set_active_mt_degree(active_workers);
PSKeepAliveClosure keep_alive(promotion_manager);
PSEvacuateFollowersClosure evac_followers(promotion_manager);
+ ReferenceProcessorStats stats;
if (reference_processor()->processing_is_mt()) {
PSRefProcTaskExecutor task_executor;
- reference_processor()->process_discovered_references(
+ stats = reference_processor()->process_discovered_references(
&_is_alive_closure, &keep_alive, &evac_followers, &task_executor,
&_gc_timer);
} else {
- reference_processor()->process_discovered_references(
+ stats = reference_processor()->process_discovered_references(
&_is_alive_closure, &keep_alive, &evac_followers, NULL, &_gc_timer);
}
- _gc_tracer.report_gc_reference_processing(reference_processor()->collect_statistics());
+ _gc_tracer.report_gc_reference_stats(stats);
// Enqueue reference objects discovered during scavenge.
if (reference_processor()->processing_is_mt()) {
@@ -480,12 +480,8 @@
}
// Finally, flush the promotion_manager's labs, and deallocate its stacks.
- promotion_failed_info = PSPromotionManager::post_scavenge();
-
- promotion_failure_occurred = promotion_failed_info.promotion_failed();
+ promotion_failure_occurred = PSPromotionManager::post_scavenge(_gc_tracer);
if (promotion_failure_occurred) {
- _gc_tracer.report_promotion_failed(promotion_failed_info.promotion_failed_size(),
- promotion_failed_info.promotion_failed_count());
clean_up_failed_promotion();
if (PrintGC) {
gclog_or_tty->print("--");
@@ -499,8 +495,6 @@
if (!promotion_failure_occurred) {
// Swap the survivor spaces.
-
-
young_gen->eden_space()->clear(SpaceDecorator::Mangle);
young_gen->from_space()->clear(SpaceDecorator::Mangle);
young_gen->swap_spaces();
diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcTrace.cpp b/hotspot/src/share/vm/gc_implementation/shared/gcTrace.cpp
index 87f19e7..c3d08b5 100644
--- a/hotspot/src/share/vm/gc_implementation/shared/gcTrace.cpp
+++ b/hotspot/src/share/vm/gc_implementation/shared/gcTrace.cpp
@@ -26,6 +26,7 @@
#include "gc_implementation/shared/gcHeapSummary.hpp"
#include "gc_implementation/shared/gcTimer.hpp"
#include "gc_implementation/shared/gcTrace.hpp"
+#include "gc_implementation/shared/promotionFailedInfo.hpp"
#include "memory/referenceProcessorStats.hpp"
#include "utilities/globalDefinitions.hpp"
@@ -75,13 +76,13 @@
_shared_gc_info.set_id(SharedGCInfo::UNSET_GCID);
}
-void GCTracer::report_gc_reference_processing(const ReferenceProcessorStats& rps) const {
+void GCTracer::report_gc_reference_stats(const ReferenceProcessorStats& rps) const {
assert_set_gc_id();
- send_reference_processing_event(REF_SOFT, rps.soft_count());
- send_reference_processing_event(REF_WEAK, rps.weak_count());
- send_reference_processing_event(REF_FINAL, rps.final_count());
- send_reference_processing_event(REF_PHANTOM, rps.phantom_count());
+ send_reference_stats_event(REF_SOFT, rps.soft_count());
+ send_reference_stats_event(REF_WEAK, rps.weak_count());
+ send_reference_stats_event(REF_FINAL, rps.final_count());
+ send_reference_stats_event(REF_PHANTOM, rps.phantom_count());
}
void GCTracer::report_gc_heap_summary(GCWhen::Type when, const GCHeapSummary& heap_summary, const PermGenSummary& perm_gen_summary) const {
@@ -98,11 +99,10 @@
send_young_gc_event();
}
-void YoungGCTracer::report_promotion_failed(size_t size, uint count) {
+void YoungGCTracer::report_promotion_failed(const PromotionFailedInfo& pf_info) {
assert_set_gc_id();
- young_gc_info().register_promotion_failed();
- send_promotion_failed_event(size, count);
+ send_promotion_failed_event(pf_info);
}
diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcTrace.hpp b/hotspot/src/share/vm/gc_implementation/shared/gcTrace.hpp
index 2ef1a34..c02d538 100644
--- a/hotspot/src/share/vm/gc_implementation/shared/gcTrace.hpp
+++ b/hotspot/src/share/vm/gc_implementation/shared/gcTrace.hpp
@@ -28,6 +28,7 @@
#include "gc_interface/gcCause.hpp"
#include "gc_interface/gcName.hpp"
#include "gc_implementation/shared/gcWhen.hpp"
+#include "gc_implementation/shared/promotionFailedInfo.hpp"
#include "memory/allocation.hpp"
#include "memory/referenceType.hpp"
#ifndef SERIALGC
@@ -93,16 +94,6 @@
void* dense_prefix() const { return _dense_prefix; }
};
-class YoungGCInfo VALUE_OBJ_CLASS_SPEC {
- bool _promotion_failed;
- public:
- YoungGCInfo() : _promotion_failed(false) {}
- void register_promotion_failed() {
- _promotion_failed = true;
- }
- bool promotion_failed() const { return _promotion_failed; }
-};
-
#ifndef SERIALGC
class G1YoungGCInfo VALUE_OBJ_CLASS_SPEC {
@@ -125,7 +116,7 @@
void report_gc_start(GCCause::Cause cause, jlong timestamp);
void report_gc_end(jlong timestamp, TimePartitions* time_partitions);
void report_gc_heap_summary(GCWhen::Type when, const GCHeapSummary& heap_summary, const PermGenSummary& perm_gen_summary) const;
- void report_gc_reference_processing(const ReferenceProcessorStats& rp) const;
+ void report_gc_reference_stats(const ReferenceProcessorStats& rp) const;
bool has_reported_gc_start() const;
@@ -138,26 +129,23 @@
void send_garbage_collection_event() const;
void send_gc_heap_summary_event(GCWhen::Type when, const GCHeapSummary& heap_summary) const;
void send_perm_gen_summary_event(GCWhen::Type when, const PermGenSummary& perm_gen_summary) const;
- void send_reference_processing_event(ReferenceType type, size_t count) const;
+ void send_reference_stats_event(ReferenceType type, size_t count) const;
void send_phase_events(TimePartitions* time_partitions) const;
};
class YoungGCTracer : public GCTracer {
- YoungGCInfo _young_gc_info;
-
protected:
YoungGCTracer(GCName name) : GCTracer(name) {}
- virtual YoungGCInfo& young_gc_info() { return _young_gc_info; }
public:
- virtual void report_promotion_failed(size_t size, uint count);
+ virtual void report_promotion_failed(const PromotionFailedInfo& pf_info);
protected:
virtual void report_gc_end_impl(jlong timestamp, TimePartitions* time_partitions);
private:
void send_young_gc_event() const;
- void send_promotion_failed_event(size_t size, uint count) const;
+ void send_promotion_failed_event(const PromotionFailedInfo& pf_info) const;
};
class OldGCTracer : public GCTracer {
diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcTraceSend.cpp b/hotspot/src/share/vm/gc_implementation/shared/gcTraceSend.cpp
index b91a3e4..1c751ba 100644
--- a/hotspot/src/share/vm/gc_implementation/shared/gcTraceSend.cpp
+++ b/hotspot/src/share/vm/gc_implementation/shared/gcTraceSend.cpp
@@ -27,6 +27,7 @@
#include "gc_implementation/shared/gcTimer.hpp"
#include "gc_implementation/shared/gcTrace.hpp"
#include "gc_implementation/shared/gcWhen.hpp"
+#include "gc_implementation/shared/promotionFailedInfo.hpp"
#include "trace/tracing.hpp"
#ifndef SERIALGC
#include "gc_implementation/g1/g1YCTypes.hpp"
@@ -50,8 +51,8 @@
}
}
-void GCTracer::send_reference_processing_event(ReferenceType type, size_t count) const {
- EventGCReferenceProcessing e;
+void GCTracer::send_reference_stats_event(ReferenceType type, size_t count) const {
+ EventGCReferenceStatistics e;
if (e.should_commit()) {
e.set_gcId(_shared_gc_info.id());
e.set_type((u1)type);
@@ -75,7 +76,6 @@
EventGCYoungGarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(_shared_gc_info.id());
- e.set_promotionFailed(_young_gc_info.promotion_failed());
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
@@ -92,12 +92,15 @@
}
}
-void YoungGCTracer::send_promotion_failed_event(size_t size, uint count) const {
+void YoungGCTracer::send_promotion_failed_event(const PromotionFailedInfo& pf_info) const {
EventPromotionFailed e;
if (e.should_commit()) {
e.set_gcId(_shared_gc_info.id());
- e.set_objectCount(count);
- e.set_totalSize(size);
+ e.set_objectCount(pf_info.promotion_failed_count());
+ e.set_firstSize(pf_info.first_size());
+ e.set_smallestSize(pf_info.smallest_size());
+ e.set_totalSize(pf_info.total_size());
+ e.set_thread(pf_info.thread()->thread_id());
e.commit();
}
}
diff --git a/hotspot/src/share/vm/gc_implementation/shared/promotionFailedInfo.hpp b/hotspot/src/share/vm/gc_implementation/shared/promotionFailedInfo.hpp
index 95b3293..09870f8 100644
--- a/hotspot/src/share/vm/gc_implementation/shared/promotionFailedInfo.hpp
+++ b/hotspot/src/share/vm/gc_implementation/shared/promotionFailedInfo.hpp
@@ -25,34 +25,46 @@
#ifndef SHARE_VM_GC_IMPLEMENTATION_SHARED_PROMOTIONFAILEDINFO_HPP
#define SHARE_VM_GC_IMPLEMENTATION_SHARED_PROMOTIONFAILEDINFO_HPP
+#include "runtime/thread.hpp"
#include "utilities/globalDefinitions.hpp"
class PromotionFailedInfo VALUE_OBJ_CLASS_SPEC {
- uint _promotion_failed_count;
- size_t _promotion_failed_size;
+ size_t _first_size;
+ size_t _smallest_size;
+ size_t _total_size;
+ uint _count;
+ OSThread* _thread;
+
public:
- PromotionFailedInfo() : _promotion_failed_count(0), _promotion_failed_size(0) {}
+ PromotionFailedInfo() : _first_size(0), _smallest_size(0), _total_size(0), _count(0), _thread(NULL) {}
void register_promotion_failed(size_t size) {
- _promotion_failed_size += size;
- _promotion_failed_count++;
- }
-
- void set_promotion_failed(size_t size, uint count) {
- _promotion_failed_size = size;
- _promotion_failed_count = count;
+ if (_first_size == 0) {
+ _first_size = size;
+ _smallest_size = size;
+ _thread = Thread::current()->osthread();
+ } else if (size < _smallest_size) {
+ _smallest_size = size;
+ }
+ _total_size += size;
+ _count++;
+ assert(_thread == Thread::current()->osthread(), "The PromotionFailedInfo should be thread local.");
}
void reset() {
- _promotion_failed_size = 0;
- _promotion_failed_count = 0;
+ _first_size = 0;
+ _smallest_size = 0;
+ _total_size = 0;
+ _count = 0;
+ _thread = NULL;
}
- bool promotion_failed() const { return _promotion_failed_size > 0; }
- size_t promotion_failed_size() const { return _promotion_failed_size; }
- uint promotion_failed_count() const { return _promotion_failed_count; }
+ bool promotion_failed() const { return _count != 0; }
+ size_t first_size() const { return _first_size; }
+ size_t smallest_size() const { return _smallest_size; }
+ size_t total_size() const { return _total_size; }
+ uint promotion_failed_count() const { return _count; }
+ OSThread* thread() const { return _thread; }
};
-
#endif /* SHARE_VM_GC_IMPLEMENTATION_SHARED_PROMOTIONFAILEDINFO_HPP */
-
diff --git a/hotspot/src/share/vm/memory/defNewGeneration.cpp b/hotspot/src/share/vm/memory/defNewGeneration.cpp
index 0703d5a..3d7f860 100644
--- a/hotspot/src/share/vm/memory/defNewGeneration.cpp
+++ b/hotspot/src/share/vm/memory/defNewGeneration.cpp
@@ -546,7 +546,7 @@
assert(_next_gen != NULL,
"This must be the youngest gen, and not the only gen");
- // If the next generation is too full to accomodate promotion
+ // If the next generation is too full to accommodate promotion
// from this generation, pass on collection; let the next generation
// do it.
if (!collection_attempt_is_safe()) {
@@ -610,9 +610,11 @@
FastKeepAliveClosure keep_alive(this, &scan_weak_ref);
ReferenceProcessor* rp = ref_processor();
rp->setup_policy(clear_all_soft_refs);
- rp->process_discovered_references(&is_alive, &keep_alive, &evacuate_followers,
- NULL, _gc_timer);
- if (!promotion_failed()) {
+ const ReferenceProcessorStats& stats =
+ rp->process_discovered_references(&is_alive, &keep_alive, &evacuate_followers,
+ NULL, _gc_timer);
+ gc_tracer.report_gc_reference_stats(stats);
+ if (!_promotion_failed) {
// Swap the survivor spaces.
eden()->clear(SpaceDecorator::Mangle);
from()->clear(SpaceDecorator::Mangle);
@@ -661,6 +663,7 @@
// Inform the next generation that a promotion failure occurred.
_next_gen->promotion_failure_occurred();
+ gc_tracer.report_promotion_failed(_promotion_failed_info);
// Reset the PromotionFailureALot counters.
NOT_PRODUCT(Universe::heap()->reset_promotion_should_fail();)
@@ -670,7 +673,7 @@
to()->set_concurrent_iteration_safe_limit(to()->top());
SpecializationStats::print();
- // We need to use a monotonically non-deccreasing time in ms
+ // We need to use a monotonically non-decreasing time in ms
// or we will see time-warp warnings and os::javaTimeMillis()
// does not guarantee monotonicity.
jlong now = os::javaTimeNanos() / NANOSECS_PER_MILLISEC;
@@ -692,6 +695,7 @@
void DefNewGeneration::init_assuming_no_promotion_failure() {
_promotion_failed = false;
+ _promotion_failed_info.reset();
from()->set_next_compaction_space(NULL);
}
@@ -713,7 +717,7 @@
}
void DefNewGeneration::preserve_mark(oop obj, markOop m) {
- assert(promotion_failed() && m->must_be_preserved_for_promotion_failure(obj),
+ assert(_promotion_failed && m->must_be_preserved_for_promotion_failure(obj),
"Oversaving!");
_objs_with_preserved_marks.push(obj);
_preserved_marks_of_objs.push(m);
@@ -731,6 +735,7 @@
old->size());
}
_promotion_failed = true;
+ _promotion_failed_info.register_promotion_failed(old->size());
preserve_mark_if_necessary(old, old->mark());
// forward to self
old->forward_to(old);
diff --git a/hotspot/src/share/vm/memory/defNewGeneration.hpp b/hotspot/src/share/vm/memory/defNewGeneration.hpp
index aacbd66..4044f83 100644
--- a/hotspot/src/share/vm/memory/defNewGeneration.hpp
+++ b/hotspot/src/share/vm/memory/defNewGeneration.hpp
@@ -28,6 +28,7 @@
#include "gc_implementation/shared/ageTable.hpp"
#include "gc_implementation/shared/cSpaceCounters.hpp"
#include "gc_implementation/shared/generationCounters.hpp"
+#include "gc_implementation/shared/promotionFailedInfo.hpp"
#include "memory/generation.inline.hpp"
#include "utilities/stack.hpp"
@@ -47,15 +48,17 @@
int _tenuring_threshold; // Tenuring threshold for next collection.
ageTable _age_table;
// Size of object to pretenure in words; command line provides bytes
- size_t _pretenure_size_threshold_words;
+ size_t _pretenure_size_threshold_words;
ageTable* age_table() { return &_age_table; }
+
// Initialize state to optimistically assume no promotion failure will
// happen.
void init_assuming_no_promotion_failure();
// True iff a promotion has failed in the current collection.
bool _promotion_failed;
bool promotion_failed() { return _promotion_failed; }
+ PromotionFailedInfo _promotion_failed_info;
// Handling promotion failure. A young generation collection
// can fail if a live object cannot be copied out of its
diff --git a/hotspot/src/share/vm/memory/genMarkSweep.cpp b/hotspot/src/share/vm/memory/genMarkSweep.cpp
index 50a8ce0..0a08cba 100644
--- a/hotspot/src/share/vm/memory/genMarkSweep.cpp
+++ b/hotspot/src/share/vm/memory/genMarkSweep.cpp
@@ -291,8 +291,10 @@
// Process reference objects found during marking
{
ref_processor()->setup_policy(clear_all_softrefs);
- ref_processor()->process_discovered_references(
- &is_alive, &keep_alive, &follow_stack_closure, NULL, _gc_timer);
+ const ReferenceProcessorStats& stats =
+ ref_processor()->process_discovered_references(
+ &is_alive, &keep_alive, &follow_stack_closure, NULL, _gc_timer);
+ gc_tracer()->report_gc_reference_stats(stats);
}
// Follow system dictionary roots and unload classes
diff --git a/hotspot/src/share/vm/memory/referenceProcessor.cpp b/hotspot/src/share/vm/memory/referenceProcessor.cpp
index fb2dbfa..39f4980 100644
--- a/hotspot/src/share/vm/memory/referenceProcessor.cpp
+++ b/hotspot/src/share/vm/memory/referenceProcessor.cpp
@@ -102,8 +102,7 @@
_discovered_list_needs_barrier(discovered_list_needs_barrier),
_bs(NULL),
_processing_is_mt(mt_processing),
- _next_id(0),
- _stats()
+ _next_id(0)
{
_span = span;
_discovery_is_atomic = atomic_discovery;
@@ -191,14 +190,7 @@
return total;
}
-void ReferenceProcessor::save_discovered_list_stats() {
- _stats._soft_count = total_count(_discoveredSoftRefs);
- _stats._weak_count = total_count(_discoveredWeakRefs);
- _stats._final_count = total_count(_discoveredFinalRefs);
- _stats._phantom_count = total_count(_discoveredPhantomRefs);
-}
-
-void ReferenceProcessor::process_discovered_references(
+ReferenceProcessorStats ReferenceProcessor::process_discovered_references(
BoolObjectClosure* is_alive,
OopClosure* keep_alive,
VoidClosure* complete_gc,
@@ -220,37 +212,44 @@
_soft_ref_timestamp_clock = java_lang_ref_SoftReference::clock();
- save_discovered_list_stats();
-
bool trace_time = PrintGCDetails && PrintReferenceGC;
+
// Soft references
+ size_t soft_count = 0;
{
GCTraceTime tt("SoftReference", trace_time, false, gc_timer);
- process_discovered_reflist(_discoveredSoftRefs, _current_soft_ref_policy, true,
- is_alive, keep_alive, complete_gc, task_executor);
+ soft_count =
+ process_discovered_reflist(_discoveredSoftRefs, _current_soft_ref_policy, true,
+ is_alive, keep_alive, complete_gc, task_executor);
}
update_soft_ref_master_clock();
// Weak references
+ size_t weak_count = 0;
{
GCTraceTime tt("WeakReference", trace_time, false, gc_timer);
- process_discovered_reflist(_discoveredWeakRefs, NULL, true,
- is_alive, keep_alive, complete_gc, task_executor);
+ weak_count =
+ process_discovered_reflist(_discoveredWeakRefs, NULL, true,
+ is_alive, keep_alive, complete_gc, task_executor);
}
// Final references
+ size_t final_count = 0;
{
GCTraceTime tt("FinalReference", trace_time, false, gc_timer);
- process_discovered_reflist(_discoveredFinalRefs, NULL, false,
- is_alive, keep_alive, complete_gc, task_executor);
+ final_count =
+ process_discovered_reflist(_discoveredFinalRefs, NULL, false,
+ is_alive, keep_alive, complete_gc, task_executor);
}
// Phantom references
+ size_t phantom_count = 0;
{
GCTraceTime tt("PhantomReference", trace_time, false, gc_timer);
- process_discovered_reflist(_discoveredPhantomRefs, NULL, false,
- is_alive, keep_alive, complete_gc, task_executor);
+ phantom_count =
+ process_discovered_reflist(_discoveredPhantomRefs, NULL, false,
+ is_alive, keep_alive, complete_gc, task_executor);
}
// Weak global JNI references. It would make more sense (semantically) to
@@ -265,6 +264,8 @@
}
process_phaseJNI(is_alive, keep_alive, complete_gc);
}
+
+ return ReferenceProcessorStats(soft_count, weak_count, final_count, phantom_count);
}
#ifndef PRODUCT
@@ -900,7 +901,7 @@
balance_queues(_discoveredPhantomRefs);
}
-void
+size_t
ReferenceProcessor::process_discovered_reflist(
DiscoveredList refs_lists[],
ReferencePolicy* policy,
@@ -923,8 +924,11 @@
must_balance) {
balance_queues(refs_lists);
}
+
+ size_t total_list_count = total_count(refs_lists);
+
if (PrintReferenceGC && PrintGCDetails) {
- gclog_or_tty->print(", %u refs", total_count(refs_lists));
+ gclog_or_tty->print(", %u refs", total_list_count);
}
// Phase 1 (soft refs only):
@@ -969,6 +973,8 @@
is_alive, keep_alive, complete_gc);
}
}
+
+ return total_list_count;
}
void ReferenceProcessor::clean_up_discovered_references() {
diff --git a/hotspot/src/share/vm/memory/referenceProcessor.hpp b/hotspot/src/share/vm/memory/referenceProcessor.hpp
index a3ca9fb..d1919be 100644
--- a/hotspot/src/share/vm/memory/referenceProcessor.hpp
+++ b/hotspot/src/share/vm/memory/referenceProcessor.hpp
@@ -210,10 +210,7 @@
class ReferenceProcessor : public CHeapObj<mtGC> {
private:
- ReferenceProcessorStats _stats;
-
size_t total_count(DiscoveredList lists[]);
- void save_discovered_list_stats();
protected:
// Compatibility with pre-4965777 JDK's
@@ -293,13 +290,13 @@
}
// Process references with a certain reachability level.
- void process_discovered_reflist(DiscoveredList refs_lists[],
- ReferencePolicy* policy,
- bool clear_referent,
- BoolObjectClosure* is_alive,
- OopClosure* keep_alive,
- VoidClosure* complete_gc,
- AbstractRefProcTaskExecutor* task_executor);
+ size_t process_discovered_reflist(DiscoveredList refs_lists[],
+ ReferencePolicy* policy,
+ bool clear_referent,
+ BoolObjectClosure* is_alive,
+ OopClosure* keep_alive,
+ VoidClosure* complete_gc,
+ AbstractRefProcTaskExecutor* task_executor);
void process_phaseJNI(BoolObjectClosure* is_alive,
OopClosure* keep_alive,
@@ -384,12 +381,6 @@
void enqueue_discovered_reflists(HeapWord* pending_list_addr, AbstractRefProcTaskExecutor* task_executor);
- // Returns statistics from the last time the reference where processed via
- // an invocation of process_discovered_references.
- const ReferenceProcessorStats& collect_statistics() const {
- return _stats;
- }
-
protected:
// Set the 'discovered' field of the given reference to
// the given value - emitting barriers depending upon
@@ -447,8 +438,7 @@
_num_q(0),
_max_num_q(0),
_processing_is_mt(false),
- _next_id(0),
- _stats()
+ _next_id(0)
{ }
// Default parameters give you a vanilla reference processor.
@@ -520,11 +510,12 @@
bool discover_reference(oop obj, ReferenceType rt);
// Process references found during GC (called by the garbage collector)
- void process_discovered_references(BoolObjectClosure* is_alive,
- OopClosure* keep_alive,
- VoidClosure* complete_gc,
- AbstractRefProcTaskExecutor* task_executor,
- GCTimer *gc_timer);
+ ReferenceProcessorStats
+ process_discovered_references(BoolObjectClosure* is_alive,
+ OopClosure* keep_alive,
+ VoidClosure* complete_gc,
+ AbstractRefProcTaskExecutor* task_executor,
+ GCTimer *gc_timer);
// Enqueue references at end of GC (called by the garbage collector)
bool enqueue_discovered_references(AbstractRefProcTaskExecutor* task_executor = NULL);
diff --git a/hotspot/src/share/vm/memory/referenceProcessorStats.hpp b/hotspot/src/share/vm/memory/referenceProcessorStats.hpp
index 1b7470b..7f4a05b 100644
--- a/hotspot/src/share/vm/memory/referenceProcessorStats.hpp
+++ b/hotspot/src/share/vm/memory/referenceProcessorStats.hpp
@@ -32,9 +32,6 @@
// ReferenceProcessorStats contains statistics about how many references that
// have been traversed when processing references during garbage collection.
class ReferenceProcessorStats {
- friend class ReferenceProcessor;
-
- private:
size_t _soft_count;
size_t _weak_count;
size_t _final_count;
@@ -47,6 +44,16 @@
_final_count(0),
_phantom_count(0) {}
+ ReferenceProcessorStats(size_t soft_count,
+ size_t weak_count,
+ size_t final_count,
+ size_t phantom_count) :
+ _soft_count(soft_count),
+ _weak_count(weak_count),
+ _final_count(final_count),
+ _phantom_count(phantom_count)
+ {}
+
size_t soft_count() const {
return _soft_count;
}
diff --git a/hotspot/src/share/vm/trace/trace.xml b/hotspot/src/share/vm/trace/trace.xml
index bc02b5b..8603cc4 100644
--- a/hotspot/src/share/vm/trace/trace.xml
+++ b/hotspot/src/share/vm/trace/trace.xml
@@ -168,8 +168,6 @@
<event id="GCYoungGarbageCollection" path="vm/gc/collector/young_garbage_collection" label="Young Garbage Collection"
description="Extra information specific to Young Garbage Collections">
<value type="ULONG" field="gcId" label="GC ID" relation="GC_ID" />
- <!-- This information can also be found by looking for PromotionFailed events. It's here for convenience. -->
- <value type="BOOLEAN" field="promotionFailed" label="Promotion Failed" description="Tells if we failed to promote some objects to the old gen" />
</event>
<event id="GCOldGarbageCollection" path="vm/gc/collector/old_garbage_collection" label="Old Garbage Collection"
@@ -183,7 +181,7 @@
<value type="G1YCTYPE" field="type" label="Type" />
</event>
- <event id="GCReferenceProcessing" path="vm/gc/reference/statistics"
+ <event id="GCReferenceStatistics" path="vm/gc/reference/statistics"
label="GC Reference Processing" is_instant="true"
description="Total count of processed references during GC">
<value type="ULONG" field="gcId" label="GC ID" relation="GC_ID"/>
@@ -195,7 +193,10 @@
description="Promotion of an object failed">
<value type="ULONG" field="gcId" label="GC ID" relation="GC_ID"/>
<value type="BYTES64" field="objectCount" label="Object Count"/>
+ <value type="BYTES64" field="firstSize" label="First Failed Object Size"/>
+ <value type="BYTES64" field="smallestSize" label="Smallest Failed Object Size"/>
<value type="BYTES64" field="totalSize" label="Total Object Size"/>
+ <value type="OSTHREAD" field="thread" label="Running thread"/>
</event>
<event id="GCPhasePause" path="vm/gc/phases/pause" label="GC Phase Pause">
diff --git a/hotspot/test/runtime/NMT/BaselineWithParameter.java b/hotspot/test/runtime/NMT/BaselineWithParameter.java
index 594bd71..ff10b28 100644
--- a/hotspot/test/runtime/NMT/BaselineWithParameter.java
+++ b/hotspot/test/runtime/NMT/BaselineWithParameter.java
@@ -43,7 +43,7 @@
// Run 'jcmd <pid> VM.native_memory baseline=false'
pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, "VM.native_memory", "baseline=false"});
- pb.start();
+ pb.start().waitFor();
// Run 'jcmd <pid> VM.native_memory summary=false'
pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, "VM.native_memory", "summary=false"});
diff --git a/jaxp/.hgtags b/jaxp/.hgtags
index 24a1b55..318d64d 100644
--- a/jaxp/.hgtags
+++ b/jaxp/.hgtags
@@ -267,3 +267,4 @@
8a9867ee429440b657eb5852c4dae5f029356022 jdk7u17-b01
7863a60ae4b4a0c7d762a95e77e589fafa4e50ae jdk7u17-b02
7b47e1a26f7cbb8d8d22ea165f2d7fbbbd354c77 jdk7u14-b16
+77ac1ef42b2fd47cc87b9800f63efdd4cf2fa05d jdk7u14-b17
diff --git a/jaxws/.hgtags b/jaxws/.hgtags
index 44a8c7f..f097724 100644
--- a/jaxws/.hgtags
+++ b/jaxws/.hgtags
@@ -267,3 +267,4 @@
b8496d1dc0058341da1790bc2e7d2dbba6d4f90e jdk7u17-b01
defde3ef03605b1660a246ea85d2e810e3fe4f6e jdk7u17-b02
a367ebf0c21512867f4ab5cdd206dd8c7817c004 jdk7u14-b16
+74c34f35912d8d7145b3ff34fefea2d2f189f2b4 jdk7u14-b17
diff --git a/jdk/.hgtags b/jdk/.hgtags
index cb98538..40b1a58 100644
--- a/jdk/.hgtags
+++ b/jdk/.hgtags
@@ -266,3 +266,4 @@
b5ae6fb92e71df1833221026efe50863593bf682 jdk7u17-b01
b130c8cfecfc552614047b3244d5d94439827fcd jdk7u17-b02
555ea0c4e9567294d37793777d521902d43f1a39 jdk7u14-b16
+950fa827c2ec8a3a1ceba755994ae59016daa621 jdk7u14-b17
diff --git a/jdk/make/sun/javazic/tzdata/VERSION b/jdk/make/sun/javazic/tzdata/VERSION
index 85db871..438ee0f 100644
--- a/jdk/make/sun/javazic/tzdata/VERSION
+++ b/jdk/make/sun/javazic/tzdata/VERSION
@@ -21,4 +21,4 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-tzdata2012i
+tzdata2013b
diff --git a/jdk/make/sun/javazic/tzdata/africa b/jdk/make/sun/javazic/tzdata/africa
index 7db9b3d..2f5d3c5 100644
--- a/jdk/make/sun/javazic/tzdata/africa
+++ b/jdk/make/sun/javazic/tzdata/africa
@@ -27,9 +27,9 @@
# This data is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
-# tz@elsie.nci.nih.gov for general use in the future).
+# tz@iana.org for general use in the future).
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (2013-02-21):
#
# A good source for time zone historical data outside the U.S. is
# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
@@ -48,6 +48,10 @@
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
# I found in the UCLA library.
#
+# For data circa 1899, a common source is:
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
+# <http://www.jstor.org/stable/1774359>.
+#
# A reliable and entertaining source about time zones is
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
#
@@ -139,8 +143,12 @@
1:00 - WAT
# Botswana
+# From Paul Eggert (2013-02-21):
+# Milne says they were regulated by the Cape Town Signal in 1899;
+# assume they switched to 2:00 when Cape Town did.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Gaborone 1:43:40 - LMT 1885
+ 1:30 - SAST 1903 Mar
2:00 - CAT 1943 Sep 19 2:00
2:00 1:00 CAST 1944 Mar 19 2:00
2:00 - CAT
@@ -212,6 +220,11 @@
# Egypt
+# Milne says Cairo used 2:05:08.9, the local mean time of the Abbasizeh
+# observatory; round to nearest. Milne also says that the official time for
+# Egypt was mean noon at the Great Pyramid, 2:04:30.5, but apparently this
+# did not apply to Cairo, Alexandria, or Port Said.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Egypt 1940 only - Jul 15 0:00 1:00 S
Rule Egypt 1940 only - Oct 1 0:00 0 -
@@ -352,7 +365,7 @@
Rule Egypt 2010 only - Sep lastThu 23:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Africa/Cairo 2:05:00 - LMT 1900 Oct
+Zone Africa/Cairo 2:05:09 - LMT 1900 Oct
2:00 Egypt EE%sT
# Equatorial Guinea
@@ -447,6 +460,20 @@
# Libya
+# From Even Scharning (2012-11-10):
+# Libya set their time one hour back at 02:00 on Saturday November 10.
+# http://www.libyaherald.com/2012/11/04/clocks-to-go-back-an-hour-on-saturday/
+# Here is an official source [in Arabic]: http://ls.ly/fb6Yc
+#
+# Steffen Thorsen forwarded a translation (2012-11-10) in
+# http://mm.icann.org/pipermail/tz/2012-November/018451.html
+#
+# From Tim Parenti (2012-11-11):
+# Treat the 2012-11-10 change as a zone change from UTC+2 to UTC+1.
+# The DST rules planned for 2013 and onward roughly mirror those of Europe
+# (either two days before them or five days after them, so as to fall on
+# lastFri instead of lastSun).
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Libya 1951 only - Oct 14 2:00 1:00 S
Rule Libya 1952 only - Jan 1 0:00 0 -
@@ -461,17 +488,21 @@
Rule Libya 1986 only - Oct 3 0:00 0 -
Rule Libya 1987 1989 - Apr 1 0:00 1:00 S
Rule Libya 1987 1989 - Oct 1 0:00 0 -
+Rule Libya 1997 only - Apr 4 0:00 1:00 S
+Rule Libya 1997 only - Oct 4 0:00 0 -
+Rule Libya 2013 max - Mar lastFri 1:00 1:00 S
+Rule Libya 2013 max - Oct lastFri 2:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Tripoli 0:52:44 - LMT 1920
1:00 Libya CE%sT 1959
2:00 - EET 1982
1:00 Libya CE%sT 1990 May 4
-# The following entries are from Shanks & Pottenger;
+# The 1996 and 1997 entries are from Shanks & Pottenger;
# the IATA SSIM data contain some obvious errors.
2:00 - EET 1996 Sep 30
- 1:00 - CET 1997 Apr 4
- 1:00 1:00 CEST 1997 Oct 4
- 2:00 - EET
+ 1:00 Libya CE%sT 1997 Oct 4
+ 2:00 - EET 2012 Nov 10 2:00
+ 1:00 Libya CE%sT
# Madagascar
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -838,6 +869,41 @@
# 3:00 am Friday, July 20, 2012 and will again be advanced by 60 minutes
# August 20, 2012 from 2:00 am.
+# From Paul Eggert (2013-03-06):
+# Morocco's daylight-saving transitions due to Ramadan seem to be
+# announced a bit in advance. On 2012-07-11 the Moroccan government
+# announced that year's Ramadan daylight-saving transitions would be
+# 2012-07-20 and 2012-08-20; see
+# <http://www.mmsp.gov.ma/fr/actualites.aspx?id=288>.
+#
+# To estimate what the Moroccan government will do in future years,
+# transition dates for 2013 through 2021 were determined by running
+# the following program under GNU Emacs 24.3:
+#
+# (let ((islamic-year 1434))
+# (while (< islamic-year 1444)
+# (let ((a
+# (calendar-gregorian-from-absolute
+# (calendar-islamic-to-absolute (list 9 1 islamic-year))))
+# (b
+# (calendar-gregorian-from-absolute
+# (calendar-islamic-to-absolute (list 10 1 islamic-year)))))
+# (insert
+# (format
+# (concat "Rule\tMorocco\t%d\tonly\t-\t%s\t %2d\t 3:00\t0\t-\n"
+# "Rule\tMorocco\t%d\tonly\t-\t%s\t %2d\t 2:00\t1:00\tS\n")
+# (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a))
+# (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
+# (setq islamic-year (+ 1 islamic-year))))
+#
+# with the results hand-edited for 2020-2022, when the normal spring-forward
+# date falls during the estimated Ramadan.
+#
+# From 2023 through 2038 Ramadan is not predicted to overlap with
+# daylight saving time. Starting in 2039 there will be overlap again,
+# but 32-bit time_t values roll around in 2038 so for now do not worry
+# about dates after 2038.
+
# RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Morocco 1939 only - Sep 12 0:00 1:00 S
@@ -863,10 +929,28 @@
Rule Morocco 2010 only - Aug 8 0:00 0 -
Rule Morocco 2011 only - Apr 3 0:00 1:00 S
Rule Morocco 2011 only - Jul 31 0 0 -
-Rule Morocco 2012 max - Apr lastSun 2:00 1:00 S
+Rule Morocco 2012 2019 - Apr lastSun 2:00 1:00 S
Rule Morocco 2012 max - Sep lastSun 3:00 0 -
Rule Morocco 2012 only - Jul 20 3:00 0 -
Rule Morocco 2012 only - Aug 20 2:00 1:00 S
+Rule Morocco 2013 only - Jul 9 3:00 0 -
+Rule Morocco 2013 only - Aug 8 2:00 1:00 S
+Rule Morocco 2014 only - Jun 29 3:00 0 -
+Rule Morocco 2014 only - Jul 29 2:00 1:00 S
+Rule Morocco 2015 only - Jun 18 3:00 0 -
+Rule Morocco 2015 only - Jul 18 2:00 1:00 S
+Rule Morocco 2016 only - Jun 7 3:00 0 -
+Rule Morocco 2016 only - Jul 7 2:00 1:00 S
+Rule Morocco 2017 only - May 27 3:00 0 -
+Rule Morocco 2017 only - Jun 26 2:00 1:00 S
+Rule Morocco 2018 only - May 16 3:00 0 -
+Rule Morocco 2018 only - Jun 15 2:00 1:00 S
+Rule Morocco 2019 only - May 6 3:00 0 -
+Rule Morocco 2019 only - Jun 5 2:00 1:00 S
+Rule Morocco 2020 only - May 24 2:00 1:00 S
+Rule Morocco 2021 only - May 13 2:00 1:00 S
+Rule Morocco 2022 only - May 3 2:00 1:00 S
+Rule Morocco 2023 max - Apr lastSun 2:00 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26
diff --git a/jdk/make/sun/javazic/tzdata/antarctica b/jdk/make/sun/javazic/tzdata/antarctica
index 64b71d5..c2c1c41 100644
--- a/jdk/make/sun/javazic/tzdata/antarctica
+++ b/jdk/make/sun/javazic/tzdata/antarctica
@@ -73,10 +73,8 @@
Rule ChileAQ 2010 only - Apr Sun>=1 3:00u 0 -
Rule ChileAQ 2011 only - May Sun>=2 3:00u 0 -
Rule ChileAQ 2011 only - Aug Sun>=16 4:00u 1:00 S
-Rule ChileAQ 2012 only - Apr Sun>=23 3:00u 0 -
-Rule ChileAQ 2012 only - Sep Sun>=2 4:00u 1:00 S
-Rule ChileAQ 2013 max - Mar Sun>=9 3:00u 0 -
-Rule ChileAQ 2013 max - Oct Sun>=9 4:00u 1:00 S
+Rule ChileAQ 2012 max - Apr Sun>=23 3:00u 0 -
+Rule ChileAQ 2012 max - Sep Sun>=2 4:00u 1:00 S
# These rules are stolen from the `australasia' file.
Rule AusAQ 1917 only - Jan 1 0:01 1:00 -
diff --git a/jdk/make/sun/javazic/tzdata/asia b/jdk/make/sun/javazic/tzdata/asia
index 9ef3ef8..07b9dd6 100644
--- a/jdk/make/sun/javazic/tzdata/asia
+++ b/jdk/make/sun/javazic/tzdata/asia
@@ -27,9 +27,9 @@
# This data is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
-# tz@elsie.nci.nih.gov for general use in the future).
+# tz@iana.org for general use in the future).
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (2013-02-21):
#
# A good source for time zone historical data outside the U.S. is
# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
@@ -48,6 +48,10 @@
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
# I found in the UCLA library.
#
+# For data circa 1899, a common source is:
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
+# <http://www.jstor.org/stable/1774359>.
+#
# A reliable and entertaining source about time zones is
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
#
@@ -302,9 +306,12 @@
8:00 - BNT
# Burma / Myanmar
+
+# Milne says 6:24:40 was the meridian of the time ball observatory at Rangoon.
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Rangoon 6:24:40 - LMT 1880 # or Yangon
- 6:24:36 - RMT 1920 # Rangoon Mean Time?
+ 6:24:40 - RMT 1920 # Rangoon Mean Time?
6:30 - BURT 1942 May # Burma Time
9:00 - JST 1945 May 3
6:30 - MMT # Myanmar Time
@@ -407,7 +414,8 @@
8:00 PRC C%sT
# Zhongyuan Time ("Central plain Time")
# most of China
-Zone Asia/Shanghai 8:05:52 - LMT 1928
+# Milne gives 8:05:56.7; round to nearest.
+Zone Asia/Shanghai 8:05:57 - LMT 1928
8:00 Shang C%sT 1949
8:00 PRC C%sT
# Long-shu Time (probably due to Long and Shu being two names of that area)
@@ -504,6 +512,10 @@
8:00 PRC C%sT
+# Hong Kong (Xianggang)
+
+# Milne gives 7:36:41.7; round this.
+
# From Lee Yiu Chung (2009-10-24):
# I found there are some mistakes for the...DST rule for Hong
# Kong. [According] to the DST record from Hong Kong Observatory (actually,
@@ -570,7 +582,6 @@
# The Japanese surrender of Hong Kong was signed 1945-09-15.
# For lack of anything better, use start of those days as the transition times.
-# Hong Kong (Xianggang)
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule HK 1941 only - Apr 1 3:30 1:00 S
Rule HK 1941 only - Sep 30 3:30 0 -
@@ -592,7 +603,7 @@
Rule HK 1979 only - May Sun>=8 3:30 1:00 S
Rule HK 1979 only - Oct Sun>=16 3:30 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Hong_Kong 7:36:36 - LMT 1904 Oct 30
+Zone Asia/Hong_Kong 7:36:42 - LMT 1904 Oct 30
8:00 HK HK%sT 1941 Dec 25
9:00 - JST 1945 Sep 15
8:00 HK HK%sT
@@ -669,6 +680,9 @@
###############################################################################
# Cyprus
+#
+# Milne says the Eastern Telegraph Company used 2:14:00. Stick with LMT.
+#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Cyprus 1975 only - Apr 13 0:00 1:00 S
Rule Cyprus 1975 only - Oct 12 0:00 0 -
@@ -1222,7 +1236,6 @@
Rule Zion 2012 only - Sep 23 2:00 0 S
# From Ephraim Silverberg (2012-10-18):
-
# Yesterday, the Interior Ministry Committee, after more than a year
# past, approved sending the proposed June 2011 changes to the Time
# Decree Law back to the Knesset for second and third (final) votes
@@ -1235,6 +1248,10 @@
# later (i.e. at 02:00 the first Monday after October 2).
# [Rosh Hashana holidays are factored in until 2100.]
+# From Ephraim Silverberg (2012-11-05):
+# The Knesset passed today (in second and final readings) the amendment to the
+# Time Decree Law making the changes ... law.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Zion 2013 max - Mar Fri>=23 2:00 1:00 D
Rule Zion 2013 2026 - Oct Sun>=2 2:00 0 S
@@ -1824,8 +1841,11 @@
5:45 - NPT # Nepal Time
# Oman
+
+# Milne says 3:54:24 was the meridian of the Muscat Tidal Observatory.
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Muscat 3:54:20 - LMT 1920
+Zone Asia/Muscat 3:54:24 - LMT 1920
4:00 - GST
# Pakistan
@@ -2072,8 +2092,7 @@
# occurred before our cutoff date of 1970.
# However, as we get more information, we may need to add entries
# for parts of the West Bank as they transitioned from Israel's rules
-# to Palestine's rules. If you have more info about this, please
-# send it to tz@elsie.nci.nih.gov for incorporation into future editions.
+# to Palestine's rules.
# From IINS News Service - Israel - 1998-03-23 10:38:07 Israel time,
# forwarded by Ephraim Silverberg:
@@ -2421,6 +2440,13 @@
# no information
# Sri Lanka
+
+# From Paul Eggert (2013-02-21):
+# Milne says "Madras mean time use from May 1, 1898. Prior to this Colombo
+# mean time, 5h. 4m. 21.9s. F., was used." But 5:04:21.9 differs considerably
+# from Colombo's meridian 5:19:24, so for now ignore Milne and stick with
+# Shanks and Pottenger.
+
# From Paul Eggert (1996-09-03):
# "Sri Lanka advances clock by an hour to avoid blackout"
# (www.virtual-pc.com/lankaweb/news/items/240596-2.html, 1996-05-24,
@@ -2720,6 +2746,12 @@
# Vietnam
+# From Paul Eggert (2013-02-21):
+# Milne gives 7:16:56 for the meridian of Saigon in 1899, as being
+# used in Lower Laos, Cambodia, and Annam. But this is quite a ways
+# from Saigon's location. For now, ignore this and stick with Shanks
+# and Pottenger.
+
# From Arthur David Olson (2008-03-18):
# The English-language name of Vietnam's most populous city is "Ho Chi Min City";
# we use Ho_Chi_Minh below to avoid a name of more than 14 characters.
@@ -2733,6 +2765,10 @@
7:00 - ICT
# Yemen
+
+# Milne says 2:59:54 was the meridian of the saluting battery at Aden,
+# and that Yemen was at 1:55:56, the meridian of the Hagia Sophia.
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Aden 3:00:48 - LMT 1950
+Zone Asia/Aden 2:59:54 - LMT 1950
3:00 - AST
diff --git a/jdk/make/sun/javazic/tzdata/australasia b/jdk/make/sun/javazic/tzdata/australasia
index 7f83448..3e1e621 100644
--- a/jdk/make/sun/javazic/tzdata/australasia
+++ b/jdk/make/sun/javazic/tzdata/australasia
@@ -269,6 +269,9 @@
6:30 - CCT # Cocos Islands Time
# Fiji
+
+# Milne gives 11:55:44 for Suva.
+
# From Alexander Krivenyshev (2009-11-10):
# According to Fiji Broadcasting Corporation, Fiji plans to re-introduce DST
# from November 29th 2009 to April 25th 2010.
@@ -362,7 +365,7 @@
Rule Fiji 2011 only - Mar Sun>=1 3:00 0 -
Rule Fiji 2012 max - Jan Sun>=18 3:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Pacific/Fiji 11:53:40 - LMT 1915 Oct 26 # Suva
+Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva
12:00 Fiji FJ%sT # Fiji Time
# French Polynesia
@@ -803,9 +806,9 @@
# This data is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
-# tz@elsie.nci.nih.gov for general use in the future).
+# tz@iana.org for general use in the future).
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (2013-02-21):
# A good source for time zone historical data outside the U.S. is
# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
# San Diego: ACS Publications, Inc. (2003).
@@ -823,6 +826,10 @@
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
# I found in the UCLA library.
#
+# For data circa 1899, a common source is:
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
+# <http://www.jstor.org/stable/1774359>.
+#
# A reliable and entertaining source about time zones is
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
#
diff --git a/jdk/make/sun/javazic/tzdata/europe b/jdk/make/sun/javazic/tzdata/europe
index 9a0d0b9..268504d 100644
--- a/jdk/make/sun/javazic/tzdata/europe
+++ b/jdk/make/sun/javazic/tzdata/europe
@@ -27,7 +27,7 @@
# This data is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
-# tz@elsie.nci.nih.gov for general use in the future).
+# tz@iana.org for general use in the future).
# From Paul Eggert (2006-03-22):
# A good source for time zone historical data outside the U.S. is
@@ -53,6 +53,12 @@
# William Willett, The Waste of Daylight, 19th edition
# </a> (1914-03)
#
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
+# <http://www.jstor.org/stable/1774359>. He writes:
+# "It is requested that corrections and additions to these tables
+# may be sent to Mr. John Milne, Royal Geographical Society,
+# Savile Row, London." Nowadays please email them to tz@iana.org.
+#
# Brazil's Departamento Servico da Hora (DSH),
# <a href="http://pcdsh01.on.br/HISTHV.htm">
# History of Summer Time
@@ -689,6 +695,8 @@
# Austria
+# Milne says Vienna time was 1:05:21.
+
# From Paul Eggert (2006-03-22): Shanks & Pottenger give 1918-06-16 and
# 1945-11-18, but the Austrian Federal Office of Metrology and
# Surveying (BEV) gives 1918-09-16 and for Vienna gives the "alleged"
@@ -706,7 +714,7 @@
Rule Austria 1980 only - Apr 6 0:00 1:00 S
Rule Austria 1980 only - Sep 28 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Vienna 1:05:20 - LMT 1893 Apr
+Zone Europe/Vienna 1:05:21 - LMT 1893 Apr
1:00 C-Eur CE%sT 1920
1:00 Austria CE%sT 1940 Apr 1 2:00s
1:00 C-Eur CE%sT 1945 Apr 2 2:00s
@@ -1262,6 +1270,21 @@
1:00 Germany CE%sT 1980
1:00 EU CE%sT
+# From Tobias Conradi (2011-09-12):
+# Busingen <http://www.buesingen.de>, surrounded by the Swiss canton
+# Schaffhausen, did not start observing DST in 1980 as the rest of DE
+# (West Germany at that time) and DD (East Germany at that time) did.
+# DD merged into DE, the area is currently covered by code DE in ISO 3166-1,
+# which in turn is covered by the zone Europe/Berlin.
+#
+# Source for the time in Busingen 1980:
+# http://www.srf.ch/player/video?id=c012c029-03b7-4c2b-9164-aa5902cd58d3
+
+# From Arthur David Olson (2012-03-03):
+# Busingen and Zurich have shared clocks since 1970.
+
+Link Europe/Zurich Europe/Busingen
+
# Georgia
# Please see the "asia" file for Asia/Tbilisi.
# Herodotus (Histories, IV.45) says Georgia north of the Phasis (now Rioni)
@@ -2066,6 +2089,70 @@
# Russia
+# From Alexander Krivenyshev (2011-09-15):
+# Based on last Russian Government Decree # 725 on August 31, 2011
+# (Government document
+# <a href="http://www.government.ru/gov/results/16355/print/">
+# http://www.government.ru/gov/results/16355/print/
+# </a>
+# in Russian)
+# there are few corrections have to be made for some Russian time zones...
+# All updated Russian Time Zones were placed in table and translated to English
+# by WorldTimeZone.com at the link below:
+# <a href="http://www.worldtimezone.com/dst_news/dst_news_russia36.htm">
+# http://www.worldtimezone.com/dst_news/dst_news_russia36.htm
+# </a>
+
+# From Sanjeev Gupta (2011-09-27):
+# Scans of [Decree #23 of January 8, 1992] are available at:
+# <a href="http://government.consultant.ru/page.aspx?1223966">
+# http://government.consultant.ru/page.aspx?1223966
+# They are in Cyrillic letters (presumably Russian).
+
+# From Arthur David Olson (2012-05-09):
+# Regarding the instant when clocks in time-zone-shifting parts of Russia
+# changed in September 2011:
+#
+# One source is
+# < a href="http://government.ru/gov/results/16355/>
+# http://government.ru/gov/results/16355/
+# </a>
+# which, according to translate.google.com, begins "Decree of August 31,
+# 2011 No 725" and contains no other dates or "effective date" information.
+#
+# Another source is
+# <a href="http://www.rg.ru/2011/09/06/chas-zona-dok.html">
+# http://www.rg.ru/2011/09/06/chas-zona-dok.html
+# </a>
+# which, according to translate.google.com, begins "Resolution of the
+# Government of the Russian Federation on August 31, 2011 N 725" and also
+# contains "Date first official publication: September 6, 2011 Posted on:
+# in the 'RG' - Federal Issue number 5573 September 6, 2011" but which
+# does not contain any "effective date" information.
+#
+# Another source is
+# <a href="http://en.wikipedia.org/wiki/Oymyakonsky_District#cite_note-RuTime-7">
+# http://en.wikipedia.org/wiki/Oymyakonsky_District#cite_note-RuTime-7
+# </a>
+# which, in note 8, contains "Resolution #725 of August 31, 2011...
+# Effective as of after 7 days following the day of the official publication"
+# but which does not contain any reference to September 6, 2011.
+#
+# The Wikipedia article refers to
+# <a href="http://base.consultant.ru/cons/cgi/online.cgi?req=doc;base=LAW;n=118896">
+# http://base.consultant.ru/cons/cgi/online.cgi?req=doc;base=LAW;n=118896
+# </a>
+# which seems to copy the text of the government.ru page.
+#
+# Tobias Conradi combines Wikipedia's
+# "as of after 7 days following the day of the official publication"
+# with www.rg.ru's "Date of first official publication: September 6, 2011" to get
+# September 13, 2011 as the cutover date (unusually, a Tuesday, as Tobias Conradi notes).
+#
+# None of the sources indicates a time of day for changing clocks.
+#
+# Go with 2011-09-13 0:00s.
+
# From Paul Eggert (2006-03-22):
# Except for Moscow after 1919-07-01, I invented the time zone abbreviations.
# Moscow time zone abbreviations after 1919-07-01, and Moscow rules after 1991,
@@ -2293,14 +2380,32 @@
# [parts of] Respublika Sakha (Yakutiya).
# From Oscar van Vlijmen (2009-11-29):
-# The Sakha districts are: Bulunskij, Verkhoyanskij, Tomponskij, Ust'-Majskij,
-# Ust'-Yanskij.
+# The Sakha districts are: Bulunskij, Verkhoyanskij, ... Ust'-Yanskij.
Zone Asia/Vladivostok 8:47:44 - LMT 1922 Nov 15
9:00 - VLAT 1930 Jun 21 # Vladivostok Time
10:00 Russia VLA%sT 1991 Mar 31 2:00s
9:00 Russia VLA%sST 1992 Jan 19 2:00s
10:00 Russia VLA%sT 2011 Mar 27 2:00s
11:00 - VLAT
+
+# From Arthur David Olson (2012-05-09):
+# Tomponskij and Ust'-Majskij switched from Vladivostok time to Yakutsk time
+# in 2011.
+#
+# From Paul Eggert (2012-11-25):
+# Shanks and Pottenger (2003) has Khandyga on Yakutsk time.
+# Make a wild guess that it switched to Vladivostok time in 2004.
+# This transition is no doubt wrong, but we have no better info.
+#
+Zone Asia/Khandyga 9:02:13 - LMT 1919 Dec 15
+ 8:00 - YAKT 1930 Jun 21 # Yakutsk Time
+ 9:00 Russia YAK%sT 1991 Mar 31 2:00s
+ 8:00 Russia YAK%sT 1992 Jan 19 2:00s
+ 9:00 Russia YAK%sT 2004
+ 10:00 Russia VLA%sT 2011 Mar 27 2:00s
+ 11:00 - VLAT 2011 Sep 13 0:00s # Decree 725?
+ 10:00 - YAKT
+
#
# Sakhalinskaya oblast'.
# The Zone name should be Yuzhno-Sakhalinsk, but that's too long.
@@ -2319,14 +2424,26 @@
# From Oscar van Vlijmen (2009-11-29):
# The Sakha districts are: Abyjskij, Allaikhovskij, Verkhhhnekolymskij, Momskij,
-# Nizhnekolymskij, Ojmyakonskij, Srednekolymskij.
+# Nizhnekolymskij, ... Srednekolymskij.
Zone Asia/Magadan 10:03:12 - LMT 1924 May 2
10:00 - MAGT 1930 Jun 21 # Magadan Time
11:00 Russia MAG%sT 1991 Mar 31 2:00s
10:00 Russia MAG%sT 1992 Jan 19 2:00s
11:00 Russia MAG%sT 2011 Mar 27 2:00s
12:00 - MAGT
-#
+
+# From Arthur David Olson (2012-05-09):
+# Ojmyakonskij and the Kuril Islands switched from
+# Magadan time to Vladivostok time in 2011.
+Zone Asia/Ust-Nera 9:32:54 - LMT 1919 Dec 15
+ 8:00 - YAKT 1930 Jun 21 # Yakutsk Time
+ 9:00 Russia YAKT 1981 Apr 1
+ 11:00 Russia MAG%sT 1991 Mar 31 2:00s
+ 10:00 Russia MAG%sT 1992 Jan 19 2:00s
+ 11:00 Russia MAG%sT 2011 Mar 27 2:00s
+ 12:00 - MAGT 2011 Sep 13 0:00s # Decree 725?
+ 11:00 - VLAT
+
# From Oscar van Vlijmen (2001-08-25): [This region consists of]
# Kamchatskaya oblast', Koryakskij avtonomnyj okrug.
#
diff --git a/jdk/make/sun/javazic/tzdata/northamerica b/jdk/make/sun/javazic/tzdata/northamerica
index c303326..858bf81 100644
--- a/jdk/make/sun/javazic/tzdata/northamerica
+++ b/jdk/make/sun/javazic/tzdata/northamerica
@@ -29,7 +29,7 @@
# This data is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
-# tz@elsie.nci.nih.gov for general use in the future).
+# tz@iana.org for general use in the future).
# From Paul Eggert (1999-03-22):
# A reliable and entertaining source about time zones is
@@ -1042,6 +1042,9 @@
# William Willett, The Waste of Daylight, 19th edition
# </a> (1914-03)
#
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
+# <http://www.jstor.org/stable/1774359>.
+#
# See the `europe' file for Greenland.
# Canada
@@ -2577,6 +2580,8 @@
# Bahamas
#
+# For 1899 Milne gives -5:09:29.5; round that.
+#
# From Sue Williams (2006-12-07):
# The Bahamas announced about a month ago that they plan to change their DST
# rules to sync with the U.S. starting in 2007....
@@ -2586,11 +2591,14 @@
Rule Bahamas 1964 1975 - Oct lastSun 2:00 0 S
Rule Bahamas 1964 1975 - Apr lastSun 2:00 1:00 D
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Nassau -5:09:24 - LMT 1912 Mar 2
+Zone America/Nassau -5:09:30 - LMT 1912 Mar 2
-5:00 Bahamas E%sT 1976
-5:00 US E%sT
# Barbados
+
+# For 1899 Milne gives -3:58:29.2; round that.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Barb 1977 only - Jun 12 2:00 1:00 D
Rule Barb 1977 1978 - Oct Sun>=1 2:00 0 S
@@ -2598,8 +2606,8 @@
Rule Barb 1979 only - Sep 30 2:00 0 S
Rule Barb 1980 only - Sep 25 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Barbados -3:58:28 - LMT 1924 # Bridgetown
- -3:58:28 - BMT 1932 # Bridgetown Mean Time
+Zone America/Barbados -3:58:29 - LMT 1924 # Bridgetown
+ -3:58:29 - BMT 1932 # Bridgetown Mean Time
-4:00 Barb A%sT
# Belize
@@ -2617,6 +2625,9 @@
# Bermuda
+# For 1899 Milne gives -4:19:18.3 as the meridian of the clock tower,
+# Bermuda dockyard, Ireland I; round that.
+
# From Dan Jones, reporting in The Royal Gazette (2006-06-26):
# Next year, however, clocks in the US will go forward on the second Sunday
@@ -2626,7 +2637,7 @@
# http://www.theroyalgazette.com/apps/pbcs.dll/article?AID=/20060529/NEWS/105290135
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Atlantic/Bermuda -4:19:04 - LMT 1930 Jan 1 2:00 # Hamilton
+Zone Atlantic/Bermuda -4:19:18 - LMT 1930 Jan 1 2:00 # Hamilton
-4:00 - AST 1974 Apr 28 2:00
-4:00 Bahamas A%sT 1976
-4:00 US A%sT
@@ -2638,6 +2649,9 @@
-5:00 - EST
# Costa Rica
+
+# Milne gives -5:36:13.3 as San Jose mean time; round to nearest.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule CR 1979 1980 - Feb lastSun 0:00 1:00 D
Rule CR 1979 1980 - Jun Sun>=1 0:00 0 S
@@ -2648,14 +2662,19 @@
Rule CR 1992 only - Mar 15 0:00 0 S
# There are too many San Joses elsewhere, so we'll use `Costa Rica'.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Costa_Rica -5:36:20 - LMT 1890 # San Jose
- -5:36:20 - SJMT 1921 Jan 15 # San Jose Mean Time
+Zone America/Costa_Rica -5:36:13 - LMT 1890 # San Jose
+ -5:36:13 - SJMT 1921 Jan 15 # San Jose Mean Time
-6:00 CR C%sT
# Coco
# no information; probably like America/Costa_Rica
# Cuba
+# From Paul Eggert (2013-02-21):
+# Milne gives -5:28:50.45 for the observatory at Havana, -5:29:23.57
+# for the port, and -5:30 for meteorological observations.
+# For now, stick with Shanks & Pottenger.
+
# From Arthur David Olson (1999-03-29):
# The 1999-03-28 exhibition baseball game held in Havana, Cuba, between
# the Cuban National Team and the Baltimore Orioles was carried live on
@@ -3004,24 +3023,21 @@
# apparently using the same start and end date as USA/Canada.
# So this means they have already changed their time.
#
-# (Sources in French):
-# <a href="http://www.alterpresse.org/spip.php?article12510">
# http://www.alterpresse.org/spip.php?article12510
-# </a>
-# <a href="http://radiovision2000haiti.net/home/?p=13253">
# http://radiovision2000haiti.net/home/?p=13253
-# </a>
#
-# Our coverage:
-# <a href="http://www.timeanddate.com/news/time/haiti-dst-2012.html">
-# http://www.timeanddate.com/news/time/haiti-dst-2012.html
-# </a>
-
# From Arthur David Olson (2012-03-11):
# The alterpresse.org source seems to show a US-style leap from 2:00 a.m. to
# 3:00 a.m. rather than the traditional Haitian jump at midnight.
-# Assume a US-style fall back as well XXX.
-# Do not yet assume that the change carries forward past 2012 XXX.
+# Assume a US-style fall back as well.
+
+# From Steffen Thorsen (2013-03-10):
+# It appears that Haiti is observing DST this year as well, same rules
+# as US/Canada. They did it last year as well, and it looks like they
+# are going to observe DST every year now...
+#
+# http://radiovision2000haiti.net/public/haiti-avis-changement-dheure-dimanche/
+# http://www.canalplushaiti.net/?p=6714
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Haiti 1983 only - May 8 0:00 1:00 D
@@ -3033,8 +3049,8 @@
Rule Haiti 1988 1997 - Oct lastSun 1:00s 0 S
Rule Haiti 2005 2006 - Apr Sun>=1 0:00 1:00 D
Rule Haiti 2005 2006 - Oct lastSun 0:00 0 S
-Rule Haiti 2012 only - Mar Sun>=8 2:00 1:00 D
-Rule Haiti 2012 only - Nov Sun>=1 2:00 0 S
+Rule Haiti 2012 max - Mar Sun>=8 2:00 1:00 D
+Rule Haiti 2012 max - Nov Sun>=1 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Port-au-Prince -4:49:20 - LMT 1890
-4:49 - PPMT 1917 Jan 24 12:00 # P-a-P MT
diff --git a/jdk/make/sun/javazic/tzdata/southamerica b/jdk/make/sun/javazic/tzdata/southamerica
index 0d6797e..a45a1f7 100644
--- a/jdk/make/sun/javazic/tzdata/southamerica
+++ b/jdk/make/sun/javazic/tzdata/southamerica
@@ -27,13 +27,17 @@
# This data is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
-# tz@elsie.nci.nih.gov for general use in the future).
+# tz@iana.org for general use in the future).
# From Paul Eggert (2006-03-22):
# A good source for time zone historical data outside the U.S. is
# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
# San Diego: ACS Publications, Inc. (2003).
#
+# For data circa 1899, a common source is:
+# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94
+# <http://www.jstor.org/stable/1774359>.
+#
# Gwillim Law writes that a good source
# for recent time zone data is the International Air Transport
# Association's Standard Schedules Information Manual (IATA SSIM),
@@ -404,21 +408,11 @@
# <a/>
# is the official page for the Province Government).
#
-# There's also a note in only one of the major national papers (La Nación) at
-# <a href="http://www.lanacion.com.ar/nota.asp?nota_id=1107912">
+# There's also a note in only one of the major national papers ...
# http://www.lanacion.com.ar/nota.asp?nota_id=1107912
-# </a>
#
-# The press release says:
-# (...) anunció que el próximo domingo a las 00:00 los puntanos deberán
-# atrasar una hora sus relojes.
-#
-# A partir de entonces, San Luis establecerá el huso horario propio de
-# la Provincia. De esta manera, durante el periodo del calendario anual
-# 2009, el cambio horario quedará comprendido entre las 00:00 del tercer
-# domingo de marzo y las 24:00 del segundo sábado de octubre.
-# Quick&dirty translation
-# (...) announced that next Sunday, at 00:00, Puntanos (the San Luis
+# The press release says [quick and dirty translation]:
+# ... announced that next Sunday, at 00:00, Puntanos (the San Luis
# inhabitants) will have to turn back one hour their clocks
#
# Since then, San Luis will establish its own Province timezone. Thus,
@@ -480,6 +474,9 @@
# rules...San Luis is still using "Western ARgentina Time" and it got
# stuck on Summer daylight savings time even though the summer is over.
+# From Paul Eggert (2013-02-21):
+# Milne says Cordoba time was -4:16:48.2. Round to the nearest second.
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
#
# Buenos Aires (BA), Capital Federal (CF),
@@ -835,9 +832,9 @@
# From Guilherme Bernardes Rodrigues (2011-10-07):
# There is news in the media, however there is still no decree about it.
-# I just send a e-mail to Zulmira Brandão at
+# I just send a e-mail to Zulmira Brandao at
# <a href="http://pcdsh01.on.br/">http://pcdsh01.on.br/</a> the
-# oficial agency about time in Brazil, and she confirmed that the old rule is
+# official agency about time in Brazil, and she confirmed that the old rule is
# still in force.
# From Guilherme Bernardes Rodrigues (2011-10-14)
@@ -1266,9 +1263,13 @@
# b. Saturday, September 1, 2012, clocks should go forward 60 minutes; that is,
# at 23:59:59, instead of passing to 0:00, the time should be adjusted to be
# 01:00 on September 2.
-#
-# Note that...this is yet another "temporary" change that will be reevaluated
-# AGAIN in 2013.
+
+# From Steffen Thorsen (2013-02-15):
+# According to several news sources, Chile has extended DST this year,
+# they will end DST later and start DST earlier than planned. They
+# hope to save energy. The new end date is 2013-04-28 00:00 and new
+# start date is 2013-09-08 00:00....
+# http://www.gob.cl/informa/2013/02/15/gobierno-anuncia-fechas-de-cambio-de-hora-para-el-ano-2013.htm
# NOTE: ChileAQ rules for Antarctic bases are stored separately in the
# 'antarctica' file.
@@ -1311,10 +1312,8 @@
Rule Chile 2010 only - Apr Sun>=1 3:00u 0 -
Rule Chile 2011 only - May Sun>=2 3:00u 0 -
Rule Chile 2011 only - Aug Sun>=16 4:00u 1:00 S
-Rule Chile 2012 only - Apr Sun>=23 3:00u 0 -
-Rule Chile 2012 only - Sep Sun>=2 4:00u 1:00 S
-Rule Chile 2013 max - Mar Sun>=9 3:00u 0 -
-Rule Chile 2013 max - Oct Sun>=9 4:00u 1:00 S
+Rule Chile 2012 max - Apr Sun>=23 3:00u 0 -
+Rule Chile 2012 max - Sep Sun>=2 4:00u 1:00 S
# IATA SSIM anomalies: (1992-02) says 1992-03-14;
# (1996-09) says 1998-03-08. Ignore these.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -1336,17 +1335,23 @@
# San Felix, and Antarctic bases, are like America/Santiago.
# Colombia
+
+# Milne gives 4:56:16.4 for Bogota time in 1899; round to nearest. He writes,
+# "A variation of fifteen minutes in the public clocks of Bogota is not rare."
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule CO 1992 only - May 3 0:00 1:00 S
Rule CO 1993 only - Apr 4 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Bogota -4:56:20 - LMT 1884 Mar 13
- -4:56:20 - BMT 1914 Nov 23 # Bogota Mean Time
+Zone America/Bogota -4:56:16 - LMT 1884 Mar 13
+ -4:56:16 - BMT 1914 Nov 23 # Bogota Mean Time
-5:00 CO CO%sT # Colombia Time
# Malpelo, Providencia, San Andres
# no information; probably like America/Bogota
# Curacao
+
+# Milne gives 4:35:46.9 for Curacao mean time; round to nearest.
#
# From Paul Eggert (2006-03-22):
# Shanks & Pottenger say that The Bottom and Philipsburg have been at
@@ -1363,7 +1368,7 @@
# though, as far as we know.
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Curacao -4:35:44 - LMT 1912 Feb 12 # Willemstad
+Zone America/Curacao -4:35:47 - LMT 1912 Feb 12 # Willemstad
-4:30 - ANT 1965 # Netherlands Antilles Time
-4:00 - AST
@@ -1377,6 +1382,8 @@
# Ecuador
#
+# Milne says the Sentral and South American Telegraph Company used -5:24:15.
+#
# From Paul Eggert (2007-03-04):
# Apparently Ecuador had a failed experiment with DST in 1992.
# <http://midena.gov.ec/content/view/1261/208/> (2007-02-27) and
@@ -1583,6 +1590,15 @@
# ...
Rule Para 2010 max - Oct Sun>=1 0:00 1:00 S
Rule Para 2010 max - Apr Sun>=8 0:00 0 -
+#
+# From Steffen Thorsen (2013-03-07):
+# Paraguay will end DST on 2013-03-24 00:00....
+# They do not tell if this will be a permanent change or just this year....
+# http://www.ande.gov.py/interna.php?id=1075
+#
+# From Paul Eggert (2013-03-07):
+# For now, assume it's just this year.
+Rule Para 2013 only - Mar 24 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Asuncion -3:50:40 - LMT 1890
diff --git a/jdk/make/sun/javazic/tzdata/zone.tab b/jdk/make/sun/javazic/tzdata/zone.tab
index ef380cd..eb1e84f 100644
--- a/jdk/make/sun/javazic/tzdata/zone.tab
+++ b/jdk/make/sun/javazic/tzdata/zone.tab
@@ -182,7 +182,8 @@
CX -1025+10543 Indian/Christmas
CY +3510+03322 Asia/Nicosia
CZ +5005+01426 Europe/Prague
-DE +5230+01322 Europe/Berlin
+DE +5230+01322 Europe/Berlin most locations
+DE +4742+00841 Europe/Busingen Busingen
DJ +1136+04309 Africa/Djibouti
DK +5540+01235 Europe/Copenhagen
DM +1518-06124 America/Dominica
@@ -364,8 +365,10 @@
RU +5601+09250 Asia/Krasnoyarsk Moscow+04 - Yenisei River
RU +5216+10420 Asia/Irkutsk Moscow+05 - Lake Baikal
RU +6200+12940 Asia/Yakutsk Moscow+06 - Lena River
+RU +623923+1353314 Asia/Khandyga Moscow+06 - Tomponsky, Ust-Maysky
RU +4310+13156 Asia/Vladivostok Moscow+07 - Amur River
RU +4658+14242 Asia/Sakhalin Moscow+07 - Sakhalin Island
+RU +643337+1431336 Asia/Ust-Nera Moscow+07 - Oymyakonsky
RU +5934+15048 Asia/Magadan Moscow+08 - Magadan
RU +5301+15839 Asia/Kamchatka Moscow+08 - Kamchatka
RU +6445+17729 Asia/Anadyr Moscow+08 - Bering Sea
diff --git a/jdk/src/macosx/native/jobjc/src/core/native/SEL.m b/jdk/src/macosx/native/jobjc/src/core/native/SEL.m
index e6c5b47..8e6379c 100644
--- a/jdk/src/macosx/native/jobjc/src/core/native/SEL.m
+++ b/jdk/src/macosx/native/jobjc/src/core/native/SEL.m
@@ -34,7 +34,7 @@
const char *selNameAsChars = (*env)->GetStringUTFChars(env, selName, JNI_FALSE);
const SEL sel = sel_registerName(selNameAsChars);
(*env)->ReleaseStringUTFChars(env, selName, selNameAsChars);
- return ptr_to_jlong(sel);
+ return ptr_to_jlong((void*)sel);
}
JNIEXPORT jstring JNICALL Java_com_apple_jobjc_SEL_getSelectorName
diff --git a/jdk/src/share/classes/java/util/HashMap.java b/jdk/src/share/classes/java/util/HashMap.java
index cdcbcec..555cdda 100644
--- a/jdk/src/share/classes/java/util/HashMap.java
+++ b/jdk/src/share/classes/java/util/HashMap.java
@@ -192,17 +192,6 @@
*/
private static class Holder {
- // Unsafe mechanics
- /**
- * Unsafe utilities
- */
- static final sun.misc.Unsafe UNSAFE;
-
- /**
- * Offset of "final" hashSeed field we must set in readObject() method.
- */
- static final long HASHSEED_OFFSET;
-
/**
* Table capacity above which to switch to use alternative hashing.
*/
@@ -230,29 +219,17 @@
} catch(IllegalArgumentException failed) {
throw new Error("Illegal value for 'jdk.map.althashing.threshold'", failed);
}
- ALTERNATIVE_HASHING_THRESHOLD = threshold;
- try {
- UNSAFE = sun.misc.Unsafe.getUnsafe();
- HASHSEED_OFFSET = UNSAFE.objectFieldOffset(
- HashMap.class.getDeclaredField("hashSeed"));
- } catch (NoSuchFieldException | SecurityException e) {
- throw new Error("Failed to record hashSeed offset", e);
- }
+ ALTERNATIVE_HASHING_THRESHOLD = threshold;
}
}
/**
- * If {@code true} then perform alternative hashing of String keys to reduce
- * the incidence of collisions due to weak hash code calculation.
- */
- transient boolean useAltHashing;
-
- /**
* A randomizing value associated with this instance that is applied to
- * hash code of keys to make hash collisions harder to find.
+ * hash code of keys to make hash collisions harder to find. If 0 then
+ * alternative hashing is disabled.
*/
- transient final int hashSeed = sun.misc.Hashing.randomHashSeed(this);
+ transient int hashSeed = 0;
/**
* Constructs an empty <tt>HashMap</tt> with the specified initial
@@ -274,15 +251,15 @@
loadFactor);
// Find a power of 2 >= initialCapacity
- int capacity = 1;
- while (capacity < initialCapacity)
- capacity <<= 1;
+ int capacity = (capacity = Integer.highestOneBit(initialCapacity)) != 0
+ ? capacity
+ : 1;
+ capacity <<= (Integer.bitCount(initialCapacity) > 1) ? 1 : 0;
this.loadFactor = loadFactor;
threshold = (int)Math.min(capacity * loadFactor, MAXIMUM_CAPACITY + 1);
table = new Entry[capacity];
- useAltHashing = sun.misc.VM.isBooted() &&
- (capacity >= Holder.ALTERNATIVE_HASHING_THRESHOLD);
+ initHashSeedAsNeeded(capacity);
init();
}
@@ -333,6 +310,23 @@
}
/**
+ * Initialize the hashing mask value. We defer initialization until we
+ * really need it.
+ */
+ final boolean initHashSeedAsNeeded(int capacity) {
+ boolean currentAltHashing = hashSeed != 0;
+ boolean useAltHashing = sun.misc.VM.isBooted() &&
+ (capacity >= Holder.ALTERNATIVE_HASHING_THRESHOLD);
+ boolean switching = currentAltHashing ^ useAltHashing;
+ if (switching) {
+ hashSeed = useAltHashing
+ ? sun.misc.Hashing.randomHashSeed(this)
+ : 0;
+ }
+ return switching;
+ }
+
+ /**
* Retrieve object hash code and applies a supplemental hash function to the
* result hash, which defends against poor quality hash functions. This is
* critical because HashMap uses power-of-two length hash tables, that
@@ -340,12 +334,9 @@
* in lower bits. Note: Null keys always map to hash 0, thus index 0.
*/
final int hash(Object k) {
- int h = 0;
- if (useAltHashing) {
- if (k instanceof String) {
- return sun.misc.Hashing.stringHash32((String) k);
- }
- h = hashSeed;
+ int h = hashSeed;
+ if (0 != h && k instanceof String) {
+ return sun.misc.Hashing.stringHash32((String) k);
}
h ^= k.hashCode();
@@ -557,11 +548,7 @@
}
Entry[] newTable = new Entry[newCapacity];
- boolean oldAltHashing = useAltHashing;
- useAltHashing |= sun.misc.VM.isBooted() &&
- (newCapacity >= Holder.ALTERNATIVE_HASHING_THRESHOLD);
- boolean rehash = oldAltHashing ^ useAltHashing;
- transfer(newTable, rehash);
+ transfer(newTable, initHashSeedAsNeeded(newCapacity));
table = newTable;
threshold = (int)Math.min(newCapacity * loadFactor, MAXIMUM_CAPACITY + 1);
}
@@ -815,8 +802,7 @@
}
public final int hashCode() {
- return (key==null ? 0 : key.hashCode()) ^
- (value==null ? 0 : value.hashCode());
+ return Objects.hashCode(getKey()) ^ Objects.hashCode(getValue());
}
public final String toString() {
@@ -1117,10 +1103,6 @@
throw new InvalidObjectException("Illegal load factor: " +
loadFactor);
- // set hashSeed (can only happen after VM boot)
- Holder.UNSAFE.putIntVolatile(this, Holder.HASHSEED_OFFSET,
- sun.misc.Hashing.randomHashSeed(this));
-
// Read in number of buckets and allocate the bucket array;
s.readInt(); // ignored
@@ -1136,16 +1118,15 @@
mappings * Math.min(1 / loadFactor, 4.0f),
// we have limits...
HashMap.MAXIMUM_CAPACITY);
- int capacity = 1;
// find smallest power of two which holds all mappings
- while (capacity < initialCapacity) {
- capacity <<= 1;
- }
+ int capacity = (capacity = Integer.highestOneBit(initialCapacity)) != 0
+ ? capacity
+ : 1;
+ capacity <<= (Integer.bitCount(initialCapacity) > 1) ? 1 : 0;
table = new Entry[capacity];
threshold = (int) Math.min(capacity * loadFactor, MAXIMUM_CAPACITY + 1);
- useAltHashing = sun.misc.VM.isBooted() &&
- (capacity >= Holder.ALTERNATIVE_HASHING_THRESHOLD);
+ initHashSeedAsNeeded(capacity);
init(); // Give subclass a chance to do its thing.
diff --git a/jdk/src/share/classes/java/util/Hashtable.java b/jdk/src/share/classes/java/util/Hashtable.java
index df8bae5..7b5b085 100644
--- a/jdk/src/share/classes/java/util/Hashtable.java
+++ b/jdk/src/share/classes/java/util/Hashtable.java
@@ -213,54 +213,30 @@
}
/**
- * If {@code true} then perform alternative hashing of String keys to reduce
- * the incidence of collisions due to weak hash code calculation.
- */
- transient boolean useAltHashing;
-
- // Unsafe mechanics
- /**
- * Unsafe utilities
- */
- private static final sun.misc.Unsafe UNSAFE;
-
- /**
- * Offset of "final" hashSeed field we must set in readObject() method.
- */
- private static final long HASHSEED_OFFSET;
-
- static {
- try {
- UNSAFE = sun.misc.Unsafe.getUnsafe();
- HASHSEED_OFFSET = UNSAFE.objectFieldOffset(
- Hashtable.class.getDeclaredField("hashSeed"));
- } catch (NoSuchFieldException | SecurityException e) {
- throw new Error("Failed to record hashSeed offset", e);
- }
- }
-
- /**
* A randomizing value associated with this instance that is applied to
* hash code of keys to make hash collisions harder to find.
*/
- transient final int hashSeed = sun.misc.Hashing.randomHashSeed(this);
+ transient int hashSeed;
+
+ /**
+ * Initialize the hashing mask value.
+ */
+ final boolean initHashSeedAsNeeded(int capacity) {
+ boolean currentAltHashing = hashSeed != 0;
+ boolean useAltHashing = sun.misc.VM.isBooted() &&
+ (capacity >= Holder.ALTERNATIVE_HASHING_THRESHOLD);
+ boolean switching = currentAltHashing ^ useAltHashing;
+ if (switching) {
+ hashSeed = useAltHashing
+ ? sun.misc.Hashing.randomHashSeed(this)
+ : 0;
+ }
+ return switching;
+ }
private int hash(Object k) {
- if (useAltHashing) {
- if (k.getClass() == String.class) {
- return sun.misc.Hashing.stringHash32((String) k);
- } else {
- int h = hashSeed ^ k.hashCode();
-
- // This function ensures that hashCodes that differ only by
- // constant multiples at each bit position have a bounded
- // number of collisions (approximately 8 at default load factor).
- h ^= (h >>> 20) ^ (h >>> 12);
- return h ^ (h >>> 7) ^ (h >>> 4);
- }
- } else {
- return k.hashCode();
- }
+ // hashSeed will be zero if alternative hashing is disabled.
+ return hashSeed ^ k.hashCode();
}
/**
@@ -284,8 +260,7 @@
this.loadFactor = loadFactor;
table = new Entry[initialCapacity];
threshold = (int)Math.min(initialCapacity * loadFactor, MAX_ARRAY_SIZE + 1);
- useAltHashing = sun.misc.VM.isBooted() &&
- (initialCapacity >= Holder.ALTERNATIVE_HASHING_THRESHOLD);
+ initHashSeedAsNeeded(initialCapacity);
}
/**
@@ -497,10 +472,7 @@
modCount++;
threshold = (int)Math.min(newCapacity * loadFactor, MAX_ARRAY_SIZE + 1);
- boolean currentAltHashing = useAltHashing;
- useAltHashing = sun.misc.VM.isBooted() &&
- (newCapacity >= Holder.ALTERNATIVE_HASHING_THRESHOLD);
- boolean rehash = currentAltHashing ^ useAltHashing;
+ boolean rehash = initHashSeedAsNeeded(newCapacity);
table = newMap;
@@ -999,10 +971,6 @@
// Read in the length, threshold, and loadfactor
s.defaultReadObject();
- // set hashSeed
- UNSAFE.putIntVolatile(this, HASHSEED_OFFSET,
- sun.misc.Hashing.randomHashSeed(this));
-
// Read the original length of the array and number of elements
int origlength = s.readInt();
int elements = s.readInt();
@@ -1017,20 +985,19 @@
if (origlength > 0 && length > origlength)
length = origlength;
- Entry<K,V>[] table = new Entry[length];
+ Entry<K,V>[] newTable = new Entry[length];
threshold = (int) Math.min(length * loadFactor, MAX_ARRAY_SIZE + 1);
count = 0;
- useAltHashing = sun.misc.VM.isBooted() &&
- (length >= Holder.ALTERNATIVE_HASHING_THRESHOLD);
+ initHashSeedAsNeeded(length);
// Read the number of elements and then all the key/value objects
for (; elements > 0; elements--) {
K key = (K)s.readObject();
V value = (V)s.readObject();
// synch could be eliminated for performance
- reconstitutionPut(table, key, value);
+ reconstitutionPut(newTable, key, value);
}
- this.table = table;
+ this.table = newTable;
}
/**
diff --git a/jdk/src/share/classes/sun/awt/datatransfer/DataTransferer.java b/jdk/src/share/classes/sun/awt/datatransfer/DataTransferer.java
index 82ff889..aa7a73d 100644
--- a/jdk/src/share/classes/sun/awt/datatransfer/DataTransferer.java
+++ b/jdk/src/share/classes/sun/awt/datatransfer/DataTransferer.java
@@ -1868,7 +1868,7 @@
*/
public class ReencodingInputStream extends InputStream {
protected BufferedReader wrapped;
- protected final char[] in = new char[1];
+ protected final char[] in = new char[2];
protected byte[] out;
protected CharsetEncoder encoder;
@@ -1921,7 +1921,7 @@
try {
encoder = Charset.forName(targetEncoding).newEncoder();
- out = new byte[(int)(encoder.maxBytesPerChar() + 0.5)];
+ out = new byte[(int)(encoder.maxBytesPerChar() * in.length + 0.5)];
inBuf = CharBuffer.wrap(in);
outBuf = ByteBuffer.wrap(out);
} catch (IllegalCharsetNameException e) {
@@ -1945,31 +1945,50 @@
}
}
+ private int readChar() throws IOException {
+ int c = wrapped.read();
+
+ if (c == -1) { // -1 is EOS
+ eos = true;
+ return -1;
+ }
+
+ // "c == 0" is not quite correct, but good enough on Windows.
+ if (numTerminators > 0 && c == 0) {
+ eos = true;
+ return -1;
+ } else if (eoln != null && matchCharArray(eoln, c)) {
+ c = '\n' & 0xFFFF;
+ }
+
+ return c;
+ }
+
public int read() throws IOException {
if (eos) {
return -1;
}
if (index >= limit) {
- int c = wrapped.read();
-
- if (c == -1) { // -1 is EOS
- eos = true;
+ // deal with supplementary characters
+ int c = readChar();
+ if (c == -1) {
return -1;
}
- // "c == 0" is not quite correct, but good enough on Windows.
- if (numTerminators > 0 && c == 0) {
- eos = true;
- return -1;
- } else if (eoln != null && matchCharArray(eoln, c)) {
- c = '\n' & 0xFFFF;
+ in[0] = (char) c;
+ in[1] = 0;
+ inBuf.limit(1);
+ if (Character.isHighSurrogate((char) c)) {
+ c = readChar();
+ if (c != -1) {
+ in[1] = (char) c;
+ inBuf.limit(2);
+ }
}
- in[0] = (char)c;
-
inBuf.rewind();
- outBuf.rewind();
+ outBuf.limit(out.length).rewind();
encoder.encode(inBuf, outBuf, false);
outBuf.flip();
limit = outBuf.limit();
diff --git a/jdk/src/share/classes/sun/misc/Hashing.java b/jdk/src/share/classes/sun/misc/Hashing.java
index 9b581e3..efb0821 100644
--- a/jdk/src/share/classes/sun/misc/Hashing.java
+++ b/jdk/src/share/classes/sun/misc/Hashing.java
@@ -24,7 +24,7 @@
*/
package sun.misc;
-import java.util.Random;
+import java.util.concurrent.ThreadLocalRandom;
/**
* Hashing utilities.
@@ -213,18 +213,6 @@
private static class Holder {
/**
- * Used for generating per-instance hash seeds.
- *
- * We try to improve upon the default seeding.
- */
- static final Random SEED_MAKER = new Random(
- Double.doubleToRawLongBits(Math.random())
- ^ System.identityHashCode(Hashing.class)
- ^ System.currentTimeMillis()
- ^ System.nanoTime()
- ^ Runtime.getRuntime().freeMemory());
-
- /**
* Access to {@code String.hash32()}
*/
static final JavaLangAccess LANG_ACCESS;
@@ -248,10 +236,17 @@
return Holder.LANG_ACCESS.getStringHash32(string);
}
+ /**
+ * Return a non-zero 32-bit pseudo random value. The {@code instance} object
+ * may be used as part of the value.
+ *
+ * @param instance an object to use if desired in choosing value.
+ * @return a non-zero 32-bit pseudo random value.
+ */
public static int randomHashSeed(Object instance) {
int seed;
if (sun.misc.VM.isBooted()) {
- seed = Holder.SEED_MAKER.nextInt();
+ seed = ThreadLocalRandom.current().nextInt();
} else {
// lower quality "random" seed value--still better than zero and not
// not practically reversible.
diff --git a/jdk/src/share/classes/sun/security/timestamp/TSResponse.java b/jdk/src/share/classes/sun/security/timestamp/TSResponse.java
index afc8e87..15bf851 100644
--- a/jdk/src/share/classes/sun/security/timestamp/TSResponse.java
+++ b/jdk/src/share/classes/sun/security/timestamp/TSResponse.java
@@ -341,7 +341,7 @@
DerValue[] strings = status.data.getSequence(1);
statusString = new String[strings.length];
for (int i = 0; i < strings.length; i++) {
- statusString[i] = strings[i].data.getUTF8String();
+ statusString[i] = strings[i].getUTF8String();
}
}
// Parse failInfo, if present
diff --git a/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java b/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java
index fe6e933..a29ea68 100644
--- a/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java
+++ b/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java
@@ -75,6 +75,8 @@
"Central European Summer Time", "CEST"};
String CHAST[] = new String[] {"Chatham Standard Time", "CHAST",
"Chatham Daylight Time", "CHADT"};
+ String ChST[] = new String[] {"Chamorro Standard Time", "ChST",
+ "Chamorro Daylight Time", "ChDT"};
String CHUT[] = new String[] {"Chuuk Time", "CHUT",
"Chuuk Summer Time", "CHUST"};
String CIT[] = new String[] {"Central Indonesia Time", "CIT",
@@ -161,6 +163,8 @@
"Pohnpei Summer Time", "PONST"};
String PST[] = new String[] {"Pacific Standard Time", "PST",
"Pacific Daylight Time", "PDT"};
+ String SAMOA[] = new String[] {"Samoa Standard Time", "SST",
+ "Samoa Daylight Time", "SDT"};
String SAST[] = new String[] {"South Africa Standard Time", "SAST",
"South Africa Summer Time", "SAST"};
String SBT[] = new String[] {"Solomon Is. Time", "SBT",
@@ -175,6 +179,14 @@
"Turkmenistan Summer Time", "TMST"};
String ULAT[]= new String[] {"Ulaanbaatar Time", "ULAT",
"Ulaanbaatar Summer Time", "ULAST"};
+ String UTC[] = new String[] {"Coordinated Universal Time", "UTC",
+ "Coordinated Universal Time", "UTC"};
+ String UZT[] = new String[] {"Uzbekistan Time", "UZT",
+ "Uzbekistan Summer Time", "UZST"};
+ String VICTORIA[] = new String[] {"Eastern Standard Time (Victoria)", "EST",
+ "Eastern Summer Time (Victoria)", "EST"};
+ String VLAT[] = new String[] {"Vladivostok Time", "VLAT",
+ "Vladivostok Summer Time", "VLAST"};
String WART[] = new String[] {"Western Argentine Time", "WART",
"Western Argentine Summer Time", "WARST"};
String WAT[] = new String[] {"Western African Time", "WAT",
@@ -185,18 +197,10 @@
"West Indonesia Summer Time", "WIST"};
String WST_AUS[] = new String[] {"Western Standard Time (Australia)", "WST",
"Western Summer Time (Australia)", "WST"};
- String SAMOA[] = new String[] {"Samoa Standard Time", "SST",
- "Samoa Daylight Time", "SDT"};
String WST_SAMOA[] = new String[] {"West Samoa Time", "WST",
"West Samoa Daylight Time", "WSDT"};
- String ChST[] = new String[] {"Chamorro Standard Time", "ChST",
- "Chamorro Daylight Time", "ChDT"};
- String VICTORIA[] = new String[] {"Eastern Standard Time (Victoria)", "EST",
- "Eastern Summer Time (Victoria)", "EST"};
- String UTC[] = new String[] {"Coordinated Universal Time", "UTC",
- "Coordinated Universal Time", "UTC"};
- String UZT[] = new String[] {"Uzbekistan Time", "UZT",
- "Uzbekistan Summer Time", "UZST"};
+ String YAKT[] = new String[] {"Yakutsk Time", "YAKT",
+ "Yakutsk Summer Time", "YAKST"};
return new Object[][] {
{"America/Los_Angeles", PST},
@@ -287,7 +291,7 @@
{"Africa/Porto-Novo", WAT},
{"Africa/Sao_Tome", GMT},
{"Africa/Timbuktu", GMT},
- {"Africa/Tripoli", EET},
+ {"Africa/Tripoli", CET},
{"Africa/Tunis", CET},
{"Africa/Windhoek", WAT},
{"America/Adak", HAST},
@@ -533,6 +537,7 @@
{"Asia/Kashgar", CTT},
{"Asia/Kathmandu", NPT},
{"Asia/Katmandu", NPT},
+ {"Asia/Khandyga", YAKT},
{"Asia/Kolkata", IST},
{"Asia/Krasnoyarsk", new String[] {"Krasnoyarsk Time", "KRAT",
"Krasnoyarsk Summer Time", "KRAST"}},
@@ -581,11 +586,10 @@
{"Asia/Ulaanbaatar", ULAT},
{"Asia/Ulan_Bator", ULAT},
{"Asia/Urumqi", CTT},
+ {"Asia/Ust-Nera", VLAT},
{"Asia/Vientiane", ICT},
- {"Asia/Vladivostok", new String[] {"Vladivostok Time", "VLAT",
- "Vladivostok Summer Time", "VLAST"}},
- {"Asia/Yakutsk", new String[] {"Yakutsk Time", "YAKT",
- "Yakutsk Summer Time", "YAKST"}},
+ {"Asia/Vladivostok", VLAT},
+ {"Asia/Yakutsk", YAKT},
{"Asia/Yekaterinburg", new String[] {"Yekaterinburg Time", "YEKT",
"Yekaterinburg Summer Time", "YEKST"}},
{"Asia/Yerevan", ARMT},
@@ -669,6 +673,7 @@
{"Europe/Bratislava", CET},
{"Europe/Brussels", CET},
{"Europe/Budapest", CET},
+ {"Europe/Busingen", CET},
{"Europe/Chisinau", EET},
{"Europe/Copenhagen", CET},
{"Europe/Dublin", DUBLIN},
@@ -748,7 +753,7 @@
{"Jamaica", EST},
{"Japan", JST},
{"Kwajalein", MHT},
- {"Libya", EET},
+ {"Libya", CET},
{"MET", new String[] {"Middle Europe Time", "MET",
"Middle Europe Summer Time", "MEST"}},
{"Mexico/BajaNorte", PST},
diff --git a/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java b/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java
index 0933557..5c7c20d 100644
--- a/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java
+++ b/jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java
@@ -75,6 +75,8 @@
"Mitteleurop\u00e4ische Sommerzeit", "MESZ"};
String CHAST[] = new String[] {"Chatham Normalzeit", "CHAST",
"Chatham Sommerzeit", "CHADT"};
+ String ChST[] = new String[] {"Chamorro Normalzeit", "ChST",
+ "Chamorro Sommerzeit", "ChDT"};
String CHUT[] = new String[] {"Chuuk Time", "CHUT",
"Chuuk Summer Time", "CHUST"};
String CIT[] = new String[] {"Zentralindonesische Zeit", "CIT",
@@ -161,6 +163,8 @@
"Pohnpei Summer Time", "PONST"};
String PST[] = new String[] {"Pazifische Normalzeit", "PST",
"Pazifische Sommerzeit", "PDT"};
+ String SAMOA[] = new String[] {"Samoa Normalzeit", "SST",
+ "Samoa Sommerzeit", "SDT"};
String SAST[] = new String[] {"S\u00fcdafrikanische Normalzeit", "SAST",
"S\u00fcdafrikanische Sommerzeit", "SAST"};
String SBT[] = new String[] {"Salomoninseln Zeit", "SBT",
@@ -175,6 +179,14 @@
"Turkmenische Sommerzeit", "TMST"};
String ULAT[]= new String[] {"Ulaanbaatar Zeit", "ULAT",
"Ulaanbaatar Sommerzeit", "ULAST"};
+ String UTC[] = new String[] {"Koordinierte Universalzeit", "UTC",
+ "Koordinierte Universalzeit", "UTC"};
+ String UZT[] = new String[] {"Usbekistan Zeit", "UZT",
+ "Usbekistan Sommerzeit", "UZST"};
+ String VICTORIA[] = new String[] {"\u00d6stliche Normalzeit (Victoria)", "EST",
+ "\u00d6stliche Sommerzeit (Victoria)", "EST"};
+ String VLAT[] = new String[] {"Wladiwostok Zeit", "VLAT",
+ "Wladiwostok Sommerzeit", "VLAST"};
String WART[] = new String[] {"Westargentinische Zeit", "WART",
"Westargentinische Sommerzeit", "WARST"};
String WAT[] = new String[] {"Westafrikanische Zeit", "WAT",
@@ -185,18 +197,10 @@
"Westindonesische Sommerzeit", "WIST"};
String WST_AUS[] = new String[] {"Westliche Normalzeit (Australien)", "WST",
"Westliche Sommerzeit (Australien)", "WST"};
- String SAMOA[] = new String[] {"Samoa Normalzeit", "SST",
- "Samoa Sommerzeit", "SDT"};
String WST_SAMOA[] = new String[] {"West Samoa Zeit", "WST",
"West Samoa Sommerzeit", "WSDT"};
- String ChST[] = new String[] {"Chamorro Normalzeit", "ChST",
- "Chamorro Sommerzeit", "ChDT"};
- String VICTORIA[] = new String[] {"\u00d6stliche Normalzeit (Victoria)", "EST",
- "\u00d6stliche Sommerzeit (Victoria)", "EST"};
- String UTC[] = new String[] {"Koordinierte Universalzeit", "UTC",
- "Koordinierte Universalzeit", "UTC"};
- String UZT[] = new String[] {"Usbekistan Zeit", "UZT",
- "Usbekistan Sommerzeit", "UZST"};
+ String YAKT[] = new String[] {"Jakutsk Zeit", "YAKT",
+ "Jakutsk Sommerzeit", "YAKST"};
return new Object[][] {
{"America/Los_Angeles", PST},
@@ -287,7 +291,7 @@
{"Africa/Porto-Novo", WAT},
{"Africa/Sao_Tome", GMT},
{"Africa/Timbuktu", GMT},
- {"Africa/Tripoli", EET},
+ {"Africa/Tripoli", CET},
{"Africa/Tunis", CET},
{"Africa/Windhoek", WAT},
{"America/Adak", HAST},
@@ -533,6 +537,7 @@
{"Asia/Kashgar", CTT},
{"Asia/Kathmandu", NPT},
{"Asia/Katmandu", NPT},
+ {"Asia/Khandyga", YAKT},
{"Asia/Kolkata", IST},
{"Asia/Krasnoyarsk", new String[] {"Krasnojarsker Zeit", "KRAT",
"Krasnojarsker Sommerzeit", "KRAST"}},
@@ -581,11 +586,10 @@
{"Asia/Ulaanbaatar", ULAT},
{"Asia/Ulan_Bator", ULAT},
{"Asia/Urumqi", CTT},
+ {"Asia/Ust-Nera", VLAT},
{"Asia/Vientiane", ICT},
- {"Asia/Vladivostok", new String[] {"Wladiwostok Zeit", "VLAT",
- "Wladiwostok Sommerzeit", "VLAST"}},
- {"Asia/Yakutsk", new String[] {"Jakutsk Zeit", "YAKT",
- "Jakutsk Sommerzeit", "YAKST"}},
+ {"Asia/Vladivostok", VLAT},
+ {"Asia/Yakutsk", YAKT},
{"Asia/Yekaterinburg", new String[] {"Jekaterinburger Zeit", "YEKT",
"Jekaterinburger Sommerzeit", "YEKST"}},
{"Asia/Yerevan", ARMT},
@@ -669,6 +673,7 @@
{"Europe/Bratislava", CET},
{"Europe/Brussels", CET},
{"Europe/Budapest", CET},
+ {"Europe/Busingen", CET},
{"Europe/Chisinau", EET},
{"Europe/Copenhagen", CET},
{"Europe/Dublin", DUBLIN},
@@ -748,7 +753,7 @@
{"Jamaica", EST},
{"Japan", JST},
{"Kwajalein", MHT},
- {"Libya", EET},
+ {"Libya", CET},
{"MET", new String[] {"Zentraleurop\u00e4ische Zeit", "MET",
"Zentraleurop\u00e4ische Sommerzeit", "MEST"}},
{"Mexico/BajaNorte", PST},
diff --git a/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java b/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java
index 4729198..4e36f05 100644
--- a/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java
+++ b/jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java
@@ -75,6 +75,8 @@
"Hora de verano de Europa Central", "CEST"};
String CHAST[] = new String[] {"Hora est\u00e1ndar de Chatham", "CHAST",
"Hora de verano de Chatham", "CHADT"};
+ String ChST[] = new String[] {"Hora est\u00e1ndar de Chamorro", "ChST",
+ "Hora de verano de Chamorro", "ChDT"};
String CHUT[] = new String[] {"Chuuk Time", "CHUT",
"Chuuk Summer Time", "CHUST"};
String CIT[] = new String[] {"Hora de Indonesia Central", "CIT",
@@ -161,6 +163,8 @@
"Pohnpei Summer Time", "PONST"};
String PST[] = new String[] {"Hora est\u00e1ndar del Pac\u00edfico", "PST",
"Hora de verano del Pac\u00edfico", "PDT"};
+ String SAMOA[] = new String[] {"Hora est\u00e1ndar de Samoa", "SST",
+ "Hora de verano de Samoa", "SDT"};
String SAST[] = new String[] {"Hora est\u00e1ndar de Sud\u00e1frica", "SAST",
"Hora de verano de Sud\u00e1frica", "SAST"};
String SBT[] = new String[] {"Hora de las Islas Solomon", "SBT",
@@ -175,6 +179,14 @@
"Hora de verano de Turkmenist\u00e1n", "TMST"};
String ULAT[]= new String[] {"Hora de Ulan Bator", "ULAT",
"Hora de verano de Ulan Bator", "ULAST"};
+ String UTC[] = new String[] {"Hora Universal Coordinada", "UTC",
+ "Hora Universal Coordinada", "UTC"};
+ String UZT[] = new String[] {"Hora de Uzbekist\u00e1n", "UZT",
+ "Hora de verano de Uzbekist\u00e1n", "UZST"};
+ String VICTORIA[] = new String[] {"Hora est\u00e1ndar del Este (Victoria)", "EST",
+ "Hora de verano del Este (Victoria)", "EST"};
+ String VLAT[] = new String[] {"Hora de Vladivostok", "VLAT",
+ "Hora de verano de Vladivostok", "VLAST"};
String WART[] = new String[] {"Hora de Argentina Occidental", "WART",
"Hora de verano de Argentina Occidental", "WARST"};
String WAT[] = new String[] {"Hora de \u00c1frica Occidental", "WAT",
@@ -185,18 +197,10 @@
"Indonesia Hora de verano de Indonesia Occidental", "WIST"};
String WST_AUS[] = new String[] {"Hora est\u00e1ndar Occidental (Australia)", "WST",
"Hora de verano Occidental (Australia)", "WST"};
- String SAMOA[] = new String[] {"Hora est\u00e1ndar de Samoa", "SST",
- "Hora de verano de Samoa", "SDT"};
String WST_SAMOA[] = new String[] {"Hora de Samoa Occidental", "WST",
"Hora de verano de Samoa Occidental", "WSDT"};
- String ChST[] = new String[] {"Hora est\u00e1ndar de Chamorro", "ChST",
- "Hora de verano de Chamorro", "ChDT"};
- String VICTORIA[] = new String[] {"Hora est\u00e1ndar del Este (Victoria)", "EST",
- "Hora de verano del Este (Victoria)", "EST"};
- String UTC[] = new String[] {"Hora Universal Coordinada", "UTC",
- "Hora Universal Coordinada", "UTC"};
- String UZT[] = new String[] {"Hora de Uzbekist\u00e1n", "UZT",
- "Hora de verano de Uzbekist\u00e1n", "UZST"};
+ String YAKT[] = new String[] {"Hora de Yakutsk", "YAKT",
+ "Hora de verano de Yakutsk", "YAKST"};
return new Object[][] {
{"America/Los_Angeles", PST},
@@ -287,7 +291,7 @@
{"Africa/Porto-Novo", WAT},
{"Africa/Sao_Tome", GMT},
{"Africa/Timbuktu", GMT},
- {"Africa/Tripoli", EET},
+ {"Africa/Tripoli", CET},
{"Africa/Tunis", CET},
{"Africa/Windhoek", WAT},
{"America/Adak", HAST},
@@ -533,6 +537,7 @@
{"Asia/Kashgar", CTT},
{"Asia/Kathmandu", NPT},
{"Asia/Katmandu", NPT},
+ {"Asia/Khandyga", YAKT},
{"Asia/Kolkata", IST},
{"Asia/Krasnoyarsk", new String[] {"Hora de Krasnoyarsk", "KRAT",
"Hora de verano de Krasnoyarsk", "KRAST"}},
@@ -581,11 +586,10 @@
{"Asia/Ulaanbaatar", ULAT},
{"Asia/Ulan_Bator", ULAT},
{"Asia/Urumqi", CTT},
+ {"Asia/Ust-Nera", VLAT},
{"Asia/Vientiane", ICT},
- {"Asia/Vladivostok", new String[] {"Hora de Vladivostok", "VLAT",
- "Hora de verano de Vladivostok", "VLAST"}},
- {"Asia/Yakutsk", new String[] {"Hora de Yakutsk", "YAKT",
- "Hora de verano de Yakutsk", "YAKST"}},
+ {"Asia/Vladivostok", VLAT},
+ {"Asia/Yakutsk", YAKT},
{"Asia/Yekaterinburg", new String[] {"Hora de Ekaterinburgo", "YEKT",
"Hora de verano de Ekaterinburgo", "YEKST"}},
{"Asia/Yerevan", ARMT},
@@ -669,6 +673,7 @@
{"Europe/Bratislava", CET},
{"Europe/Brussels", CET},
{"Europe/Budapest", CET},
+ {"Europe/Busingen", CET},
{"Europe/Chisinau", EET},
{"Europe/Copenhagen", CET},
{"Europe/Dublin", DUBLIN},
@@ -748,7 +753,7 @@
{"Jamaica", EST},
{"Japan", JST},
{"Kwajalein", MHT},
- {"Libya", EET},
+ {"Libya", CET},
{"MET", new String[] {"Hora de Europa Central", "MET",
"Hora de verano de Europa Central", "MEST"}},
{"Mexico/BajaNorte", PST},
diff --git a/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java b/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java
index 6671121..411c94a 100644
--- a/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java
+++ b/jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java
@@ -48,43 +48,45 @@
String ADELAIDE[] = new String[] {"Heure standard d'Australie centrale (Australie du sud)", "CST",
"Heure d'\u00e9t\u00e9 d'Australie centrale (Australie du sud)", "CST"};
String AGT[] = new String[] {"Heure D'Argentine", "ART",
- "Heure d'\u00e9t\u00e9 D'Argentine", "ARST"} ;
+ "Heure d'\u00e9t\u00e9 D'Argentine", "ARST"};
String AKST[] = new String[] {"Heure normale d'Alaska", "AKST",
- "Heure avanc\u00e9e d'Alaska", "AKDT"} ;
+ "Heure avanc\u00e9e d'Alaska", "AKDT"};
String AMT[] = new String[] {"Heure normale d'Amazonie", "AMT",
- "Heure d'\u00e9t\u00e9 d'Amazonie", "AMST"} ;
+ "Heure d'\u00e9t\u00e9 d'Amazonie", "AMST"};
String ARAST[] = new String[] {"Heure normale d'Arabie", "AST",
- "Heure avanc\u00e9e d'Arabie", "ADT"} ;
+ "Heure avanc\u00e9e d'Arabie", "ADT"};
String ARMT[] = new String[] {"Heure d'Arm\u00e9nie", "AMT",
- "Heure d'\u00e9t\u00e9 d'Arm\u00e9nie", "AMST"} ;
+ "Heure d'\u00e9t\u00e9 d'Arm\u00e9nie", "AMST"};
String AST[] = new String[] {"Heure normale de l'Atlantique", "AST",
- "Heure avanc\u00e9e de l'Atlantique", "ADT"} ;
+ "Heure avanc\u00e9e de l'Atlantique", "ADT"};
String BDT[] = new String[] {"Heure du Bangladesh", "BDT",
- "Heure d'\u00e9t\u00e9 du Bangladesh", "BDST"} ;
+ "Heure d'\u00e9t\u00e9 du Bangladesh", "BDST"};
String BRISBANE[] = new String[] {"Heure standard d'Australie orientale (Queensland)", "EST",
"Heure d'\u00e9t\u00e9 d'Australie orientale (Queensland)", "EST"};
String BROKEN_HILL[] = new String[] {"Heure standard d'Australie centrale (Australie du sud/Nouvelle-Galles du sud)", "CST",
"Heure d'\u00e9t\u00e9 d'Australie centrale(Australie du sud/Nouvelle-Galles du sud)", "CST"};
String BRT[] = new String[] {"Heure du Br\u00e9sil", "BRT",
- "Heure d'\u00e9t\u00e9 du Br\u00e9sil", "BRST"} ;
+ "Heure d'\u00e9t\u00e9 du Br\u00e9sil", "BRST"};
String BTT[] = new String[] {"Heure du Bhoutan", "BTT",
- "Heure d'\u00e9t\u00e9 du Bhoutan", "BTST"} ;
+ "Heure d'\u00e9t\u00e9 du Bhoutan", "BTST"};
String CAT[] = new String[] {"Heure d'Afrique centrale", "CAT",
- "Heure d'\u00e9t\u00e9 d'Afrique centrale", "CAST"} ;
+ "Heure d'\u00e9t\u00e9 d'Afrique centrale", "CAST"};
String CET[] = new String[] {"Heure d'Europe centrale", "CET",
- "Heure d'\u00e9t\u00e9 d'Europe centrale", "CEST"} ;
+ "Heure d'\u00e9t\u00e9 d'Europe centrale", "CEST"};
String CHAST[] = new String[] {"Heure standard de Chatham", "CHAST",
"Heure avanc\u00e9e de Chatham", "CHADT"};
+ String ChST[] = new String[] {"Heure normale des \u00eeles Mariannes", "ChST",
+ "Heure d'\u00e9t\u00e9 des \u00eeles Mariannes", "ChDT"};
String CHUT[] = new String[] {"Chuuk Time", "CHUT",
"Chuuk Summer Time", "CHUST"};
String CIT[] = new String[] {"Heure d'Indon\u00e9sie centrale", "CIT",
"Heure d'\u00e9t\u00e9 d'Indon\u00e9sie centrale", "CIST"};
String CLT[] = new String[] {"Heure du Chili", "CLT",
- "Heure d'\u00e9t\u00e9 du Chili", "CLST"} ;
+ "Heure d'\u00e9t\u00e9 du Chili", "CLST"};
String CST[] = new String[] {"Heure normale du Centre", "CST",
- "Heure avanc\u00e9e du Centre", "CDT"} ;
+ "Heure avanc\u00e9e du Centre", "CDT"};
String CTT[] = new String[] {"Heure normale de Chine", "CST",
- "Heure avanc\u00e9e de Chine", "CDT"} ;
+ "Heure avanc\u00e9e de Chine", "CDT"};
String CUBA[] = new String[] {"Heure standard de Cuba", "CST",
"Heure d'\u00e9t\u00e9 de Cuba", "CDT"};
String DARWIN[] = new String[] {"Heure standard d'Australie centrale (Territoire du Nord)", "CST",
@@ -92,17 +94,17 @@
String DUBLIN[] = new String[] {"Heure du m\u00e9ridien de Greenwich", "GMT",
"Heure d'\u00e9t\u00e9 irlandaise", "IST"};
String EAT[] = new String[] {"Heure d'Afrique de l'Est", "EAT",
- "Heure d'\u00e9t\u00e9 d'Afrique de l'Est", "EAST"} ;
+ "Heure d'\u00e9t\u00e9 d'Afrique de l'Est", "EAST"};
String EASTER[] = new String[] {"Heure de l'Ile de P\u00e2ques", "EAST",
"Heure d'\u00e9t\u00e9 de l'Ile de P\u00e2ques", "EASST"};
String EET[] = new String[] {"Heure d'Europe de l'Est", "EET",
- "Heure d'\u00e9t\u00e9 d'Europe de l'Est", "EEST"} ;
+ "Heure d'\u00e9t\u00e9 d'Europe de l'Est", "EEST"};
String EGT[] = new String[] {"Heure du Groenland de l'Est", "EGT",
- "Heure d'\u00e9t\u00e9 du Groenland de l'Est", "EGST"} ;
+ "Heure d'\u00e9t\u00e9 du Groenland de l'Est", "EGST"};
String EST[] = new String[] {"Heure normale de l'Est", "EST",
- "Heure avanc\u00e9e de l'Est", "EDT"} ;
+ "Heure avanc\u00e9e de l'Est", "EDT"};
String EST_NSW[] = new String[] {"Heure normale de l'Est (Nouvelle-Galles du Sud)", "EST",
- "Heure d'\u00e9t\u00e9 de l'Est (Nouvelle-Galles du Sud)", "EST"} ;
+ "Heure d'\u00e9t\u00e9 de l'Est (Nouvelle-Galles du Sud)", "EST"};
String FET[] = new String[] {"Further-eastern European Time", "FET",
"Further-eastern European Summer Time", "FEST"};
String GHMT[] = new String[] {"Heure du Ghana", "GMT",
@@ -110,29 +112,29 @@
String GAMBIER[] = new String[] {"Heure de Gambi", "GAMT",
"Heure d'\u00e9t\u00e9 de Gambi", "GAMST"};
String GMT[] = new String[] {"Heure de Greenwich", "GMT",
- "Heure de Greenwich", "GMT"} ;
+ "Heure de Greenwich", "GMT"};
String GMTBST[] = new String[] {"Heure du m\u00e9ridien de Greenwich", "GMT",
"Heure d'\u00e9t\u00e9 britannique", "BST"};
String GST[] = new String[] {"Heure normale du Golfe", "GST",
- "Heure avanc\u00e9e du Golfe", "GDT"} ;
+ "Heure avanc\u00e9e du Golfe", "GDT"};
String HAST[] = new String[] {"Heure normale d'Hawa\u00ef-Al\u00e9outiennes", "HAST",
- "Heure avanc\u00e9e d'Hawa\u00ef-Al\u00e9outiennes", "HADT"} ;
+ "Heure avanc\u00e9e d'Hawa\u00ef-Al\u00e9outiennes", "HADT"};
String HKT[] = new String[] {"Heure de Hong Kong", "HKT",
"Heure d'\u00e9t\u00e9 de Hong Kong", "HKST"};
String HST[] = new String[] {"Heure normale d'Hawa\u00ef", "HST",
- "Heure avanc\u00e9e d'Hawa\u00ef", "HDT"} ;
+ "Heure avanc\u00e9e d'Hawa\u00ef", "HDT"};
String ICT[] = new String[] {"Heure d'Indochine", "ICT",
- "Heure d'\u00e9t\u00e9 d'Indochine", "ICST"} ;
+ "Heure d'\u00e9t\u00e9 d'Indochine", "ICST"};
String IRT[] = new String[] {"Heure normale d'Iran", "IRST",
- "Heure avanc\u00e9e d'Iran", "IRDT"} ;
+ "Heure avanc\u00e9e d'Iran", "IRDT"};
String ISRAEL[] = new String[] {"Heure standard d'Isra\u00ebl", "IST",
"Heure avanc\u00e9e d'Isra\u00ebl", "IDT"};
String IST[] = new String[] {"Heure normale d'Inde", "IST",
- "Heure avanc\u00e9e d'Inde", "IDT"} ;
+ "Heure avanc\u00e9e d'Inde", "IDT"};
String JST[] = new String[] {"Heure normale du Japon", "JST",
- "Heure avanc\u00e9e du Japon", "JDT"} ;
+ "Heure avanc\u00e9e du Japon", "JDT"};
String KST[] = new String[] {"Heure normale de Cor\u00e9e", "KST",
- "Heure avanc\u00e9e de Cor\u00e9e", "KDT"} ;
+ "Heure avanc\u00e9e de Cor\u00e9e", "KDT"};
String LORD_HOWE[] = new String[] {"Heure standard de Lord Howe", "LHST",
"Heure d'\u00e9t\u00e9 de Lord Howe", "LHST"};
String MHT[] = new String[] {"Heure des Iles Marshall", "MHT",
@@ -140,7 +142,7 @@
String MSK[] = new String[] {"Heure standard de Moscou", "MSK",
"Heure avanc\u00e9e de Moscou", "MSD"};
String MST[] = new String[] {"Heure normale des Rocheuses", "MST",
- "Heure avanc\u00e9e des Rocheuses", "MDT"} ;
+ "Heure avanc\u00e9e des Rocheuses", "MDT"};
String MYT[] = new String[] {"Heure de Malaisie", "MYT",
"Heure d'\u00e9t\u00e9 de Malaisie", "MYST"};
String NORONHA[] = new String[] {"Heure de Fernando de Noronha", "FNT",
@@ -150,21 +152,23 @@
String NPT[] = new String[] {"Heure du N\u00e9pal", "NPT",
"Heure d'\u00e9t\u00e9 du N\u00e9pal", "NPST"};
String NST[] = new String[] {"Heure normale de Terre-Neuve", "NST",
- "Heure avanc\u00e9e de Terre-Neuve", "NDT"} ;
+ "Heure avanc\u00e9e de Terre-Neuve", "NDT"};
String NZST[] = new String[] {"Heure normale de Nouvelle-Z\u00e9lande", "NZST",
- "Heure avanc\u00e9e de Nouvelle-Z\u00e9lande", "NZDT"} ;
+ "Heure avanc\u00e9e de Nouvelle-Z\u00e9lande", "NZDT"};
String PITCAIRN[] = new String[] {"Heure standard des Pitcairn", "PST",
"heure avanc\u00e9e des Pitcairn", "PDT"};
String PKT[] = new String[] {"Heure du Pakistan", "PKT",
- "Heure d'\u00e9t\u00e9 du Pakistan", "PKST"} ;
+ "Heure d'\u00e9t\u00e9 du Pakistan", "PKST"};
String PONT[] = new String[] {"Pohnpei Time", "PONT",
"Pohnpei Summer Time", "PONST"};
String PST[] = new String[] {"Heure normale du Pacifique", "PST",
- "Heure avanc\u00e9e du Pacifique", "PDT"} ;
+ "Heure avanc\u00e9e du Pacifique", "PDT"};
+ String SAMOA[] = new String[] {"Heure standard de Samoa", "SST",
+ "Heure avanc\u00e9e de Samoa", "SDT"};
String SAST[] = new String[] {"Heure normale d'Afrique du Sud", "SAST",
- "Heure d'\u00e9t\u00e9 d'Afrique du Sud", "SAST"} ;
+ "Heure d'\u00e9t\u00e9 d'Afrique du Sud", "SAST"};
String SBT[] = new String[] {"Heure des \u00celes Salomon", "SBT",
- "Heure d'\u00e9t\u00e9 des \u00celes Salomon", "SBST"} ;
+ "Heure d'\u00e9t\u00e9 des \u00celes Salomon", "SBST"};
String SGT[] = new String[] {"Heure de Singapour", "SGT",
"Heure d'\u00e9t\u00e9 de Singapour", "SGST"};
String SLST[] = new String[] {"Heure du m\u00e9ridien de Greenwich", "GMT",
@@ -172,31 +176,31 @@
String TASMANIA[] = new String[] {"Heure standard d'Australie orientale (Tasmanie)", "EST",
"Heure d'\u00e9t\u00e9 d'Australie orientale (Tasmanie)", "EST"};
String TMT[] = new String[] {"Heure du Turkm\u00e9nistan", "TMT",
- "Heure d'\u00e9t\u00e9 du Turkm\u00e9nistan", "TMST"} ;
+ "Heure d'\u00e9t\u00e9 du Turkm\u00e9nistan", "TMST"};
String ULAT[]= new String[] {"Heure de l'Ulaanbaatar", "ULAT",
- "Heure d'\u00e9t\u00e9 de l'Ulaanbaatar", "ULAST"} ;
- String WART[] = new String[] {"Heure D'Argentine de l'Ouest", "WART",
- "Heure d'\u00e9t\u00e9 D'Argentine de l'Ouest", "WARST"} ;
- String WAT[] = new String[] {"Heure d'Afrique de l'Ouest", "WAT",
- "Heure d'\u00e9t\u00e9 d'Afrique de l'Ouest", "WAST"} ;
- String WET[] = new String[] {"Heure d'Europe de l'Ouest", "WET",
- "Heure d'\u00e9t\u00e9 d'Europe de l'Ouest", "WEST"} ;
- String WIT[] = new String[] {"Heure de l'Indon\u00e9sie occidentale", "WIT",
- "Heure d'\u00e9t\u00e9 de l'Indon\u00e9sie occidentale", "WIST"};
- String WST_AUS[] = new String[] {"Heure normale de l'Ouest (Australie)", "WST",
- "Heure d'\u00e9t\u00e9 de l'Ouest (Australie)", "WST"} ;
- String SAMOA[] = new String[] {"Heure standard de Samoa", "SST",
- "Heure avanc\u00e9e de Samoa", "SDT"};
- String WST_SAMOA[] = new String[] {"Heure des Samoas occidentales", "WST",
- "Heure d'\u00e9t\u00e9 des Samoas occidentales", "WSDT"} ;
- String ChST[] = new String[] {"Heure normale des \u00eeles Mariannes", "ChST",
- "Heure d'\u00e9t\u00e9 des \u00eeles Mariannes", "ChDT"};
- String VICTORIA[] = new String[] {"Heure standard d'Australie orientale (Victoria)", "EST",
- "Heure d'\u00e9t\u00e9 d'Australie orientale (Victoria)", "EST"};
+ "Heure d'\u00e9t\u00e9 de l'Ulaanbaatar", "ULAST"};
String UTC[] = new String[] {"Temps universel coordonn\u00e9", "UTC",
"Temps universel coordonn\u00e9", "UTC"};
String UZT[] = new String[] {"Heure de l'Ouzb\u00e9kistan", "UZT",
"Heure d'\u00e9t\u00e9 de l'Ouzb\u00e9kistan", "UZST"};
+ String VICTORIA[] = new String[] {"Heure standard d'Australie orientale (Victoria)", "EST",
+ "Heure d'\u00e9t\u00e9 d'Australie orientale (Victoria)", "EST"};
+ String VLAT[] = new String[] {"Heure de Vladivostok", "VLAT",
+ "Heure d'\u00e9t\u00e9 de Vladivostok", "VLAST"};
+ String WART[] = new String[] {"Heure D'Argentine de l'Ouest", "WART",
+ "Heure d'\u00e9t\u00e9 D'Argentine de l'Ouest", "WARST"};
+ String WAT[] = new String[] {"Heure d'Afrique de l'Ouest", "WAT",
+ "Heure d'\u00e9t\u00e9 d'Afrique de l'Ouest", "WAST"};
+ String WET[] = new String[] {"Heure d'Europe de l'Ouest", "WET",
+ "Heure d'\u00e9t\u00e9 d'Europe de l'Ouest", "WEST"};
+ String WIT[] = new String[] {"Heure de l'Indon\u00e9sie occidentale", "WIT",
+ "Heure d'\u00e9t\u00e9 de l'Indon\u00e9sie occidentale", "WIST"};
+ String WST_AUS[] = new String[] {"Heure normale de l'Ouest (Australie)", "WST",
+ "Heure d'\u00e9t\u00e9 de l'Ouest (Australie)", "WST"};
+ String WST_SAMOA[] = new String[] {"Heure des Samoas occidentales", "WST",
+ "Heure d'\u00e9t\u00e9 des Samoas occidentales", "WSDT"};
+ String YAKT[] = new String[] {"Heure du Iakoutsk", "YAKT",
+ "Heure d'\u00e9t\u00e9 du Iakoutsk", "YAKST"};
return new Object[][] {
{"America/Los_Angeles", PST},
@@ -287,7 +291,7 @@
{"Africa/Porto-Novo", WAT},
{"Africa/Sao_Tome", GMT},
{"Africa/Timbuktu", GMT},
- {"Africa/Tripoli", EET},
+ {"Africa/Tripoli", CET},
{"Africa/Tunis", CET},
{"Africa/Windhoek", WAT},
{"America/Adak", HAST},
@@ -533,6 +537,7 @@
{"Asia/Kashgar", CTT},
{"Asia/Kathmandu", NPT},
{"Asia/Katmandu", NPT},
+ {"Asia/Khandyga", YAKT},
{"Asia/Kolkata", IST},
{"Asia/Krasnoyarsk", new String[] {"Heure de Krasno\u00efarsk", "KRAT",
"Heure d'\u00e9t\u00e9 de Krasno\u00efarsk", "KRAST"}},
@@ -581,11 +586,10 @@
{"Asia/Ulaanbaatar", ULAT},
{"Asia/Ulan_Bator", ULAT},
{"Asia/Urumqi", CTT},
+ {"Asia/Ust-Nera", VLAT},
{"Asia/Vientiane", ICT},
- {"Asia/Vladivostok", new String[] {"Heure de Vladivostok", "VLAT",
- "Heure d'\u00e9t\u00e9 de Vladivostok", "VLAST"}},
- {"Asia/Yakutsk", new String[] {"Heure du Iakoutsk", "YAKT",
- "Heure d'\u00e9t\u00e9 du Iakoutsk", "YAKST"}},
+ {"Asia/Vladivostok", VLAT},
+ {"Asia/Yakutsk", YAKT},
{"Asia/Yekaterinburg", new String[] {"Heure de Yekaterinburg", "YEKT",
"Heure d'\u00e9t\u00e9 de Yekaterinburg", "YEKST"}},
{"Asia/Yerevan", ARMT},
@@ -669,6 +673,7 @@
{"Europe/Bratislava", CET},
{"Europe/Brussels", CET},
{"Europe/Budapest", CET},
+ {"Europe/Busingen", CET},
{"Europe/Chisinau", EET},
{"Europe/Copenhagen", CET},
{"Europe/Dublin", DUBLIN},
@@ -748,7 +753,7 @@
{"Jamaica", EST},
{"Japan", JST},
{"Kwajalein", MHT},
- {"Libya", EET},
+ {"Libya", CET},
{"MET", new String[] {"Heure de l'Europe centrale", "MET",
"Heure d'\u00e9t\u00e9 de l'Europe centrale", "MEST"}},
{"Mexico/BajaNorte", PST},
diff --git a/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java b/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java
index 8871066..ae28b07 100644
--- a/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java
+++ b/jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java
@@ -77,6 +77,8 @@
"Ora legale di Chatham", "CHADT"};
String CHUT[] = new String[] {"Chuuk Time", "CHUT",
"Chuuk Summer Time", "CHUST"};
+ String ChST[] = new String[] {"Ora standard di Chamorro", "ChST",
+ "Ora legale di Chamorro", "ChDT"};
String CIT[] = new String[] {"Ora dell'Indonesia centrale", "CIT",
"Ora estiva dell'Indonesia centrale", "CIST"};
String CLT[] = new String[] {"Ora del Cile", "CLT",
@@ -161,6 +163,8 @@
"Pohnpei Summer Time", "PONST"};
String PST[] = new String[] {"Ora solare della costa occidentale USA", "PST",
"Ora legale della costa occidentale USA", "PDT"};
+ String SAMOA[] = new String[] {"Ora standard di Samoa", "SST",
+ "Ora legale di Samoa", "SDT"};
String SAST[] = new String[] {"Ora solare del Sudafrica", "SAST",
"Ora estiva del Sudafrica", "SAST"};
String SBT[] = new String[] {"Ora delle Isole Salomone", "SBT",
@@ -175,6 +179,14 @@
"Ora estiva del Turkmenistan", "TMST"};
String ULAT[]= new String[] {"Ora di Ulaanbaatar", "ULAT",
"Ora estiva di Ulaanbaatar", "ULAST"};
+ String UTC[] = new String[] {"Tempo universale coordinato", "UTC",
+ "Tempo universale coordinato", "UTC"};
+ String UZT[] = new String[] {"Ora dell'Uzbekistan", "UZT",
+ "Ora estiva dell'Uzbekistan", "UZST"};
+ String VICTORIA[] = new String[] {"Ora orientale standard (Victoria)", "EST",
+ "Ora estiva orientale (Victoria)", "EST"};
+ String VLAT[] = new String[] {"Ora di Vladivostok", "VLAT",
+ "Ora estiva di Vladivostok", "VLAST"};
String WART[] = new String[] {"Ora dell'Argentina occidentale", "WART",
"Ora estiva dell'Argentina occidentale", "WARST"};
String WAT[] = new String[] {"Ora dell'Africa occidentale", "WAT",
@@ -185,18 +197,10 @@
"Ora estiva dell'Indonesia occidentale", "WIST"};
String WST_AUS[] = new String[] {"Ora solare dell'Australia occidentale", "WST",
"Ora estiva dell'Australia occidentale", "WST"};
- String SAMOA[] = new String[] {"Ora standard di Samoa", "SST",
- "Ora legale di Samoa", "SDT"};
String WST_SAMOA[] = new String[] {"Ora di Samoa", "WST",
"Ora estiva di Samoa", "WSDT"};
- String ChST[] = new String[] {"Ora standard di Chamorro", "ChST",
- "Ora legale di Chamorro", "ChDT"};
- String VICTORIA[] = new String[] {"Ora orientale standard (Victoria)", "EST",
- "Ora estiva orientale (Victoria)", "EST"};
- String UTC[] = new String[] {"Tempo universale coordinato", "UTC",
- "Tempo universale coordinato", "UTC"};
- String UZT[] = new String[] {"Ora dell'Uzbekistan", "UZT",
- "Ora estiva dell'Uzbekistan", "UZST"};
+ String YAKT[] = new String[] {"Ora di Jakutsk", "YAKT",
+ "Ora estiva di Jakutsk", "YAKST"};
return new Object[][] {
{"America/Los_Angeles", PST},
@@ -287,7 +291,7 @@
{"Africa/Porto-Novo", WAT},
{"Africa/Sao_Tome", GMT},
{"Africa/Timbuktu", GMT},
- {"Africa/Tripoli", EET},
+ {"Africa/Tripoli", CET},
{"Africa/Tunis", CET},
{"Africa/Windhoek", WAT},
{"America/Adak", HAST},
@@ -533,6 +537,7 @@
{"Asia/Kashgar", CTT},
{"Asia/Kathmandu", NPT},
{"Asia/Katmandu", NPT},
+ {"Asia/Khandyga", YAKT},
{"Asia/Kolkata", IST},
{"Asia/Krasnoyarsk", new String[] {"Ora di Krasnojarsk", "KRAT",
"Ora estiva di Krasnojarsk", "KRAST"}},
@@ -581,11 +586,10 @@
{"Asia/Ulaanbaatar", ULAT},
{"Asia/Ulan_Bator", ULAT},
{"Asia/Urumqi", CTT},
+ {"Asia/Ust-Nera", VLAT},
{"Asia/Vientiane", ICT},
- {"Asia/Vladivostok", new String[] {"Ora di Vladivostok", "VLAT",
- "Ora estiva di Vladivostok", "VLAST"}},
- {"Asia/Yakutsk", new String[] {"Ora di Jakutsk", "YAKT",
- "Ora estiva di Jakutsk", "YAKST"}},
+ {"Asia/Vladivostok", VLAT},
+ {"Asia/Yakutsk", YAKT},
{"Asia/Yekaterinburg", new String[] {"Ora di Ekaterinburg", "YEKT",
"Ora estiva di Ekaterinburg", "YEKST"}},
{"Asia/Yerevan", ARMT},
@@ -669,6 +673,7 @@
{"Europe/Bratislava", CET},
{"Europe/Brussels", CET},
{"Europe/Budapest", CET},
+ {"Europe/Busingen", CET},
{"Europe/Chisinau", EET},
{"Europe/Copenhagen", CET},
{"Europe/Dublin", DUBLIN},
@@ -748,7 +753,7 @@
{"Jamaica", EST},
{"Japan", JST},
{"Kwajalein", MHT},
- {"Libya", EET},
+ {"Libya", CET},
{"MET", new String[] {"Ora dell'Europa centrale", "MET",
"Ora estiva dell'Europa centrale", "MEST"}},
{"Mexico/BajaNorte", PST},
diff --git a/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java b/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java
index e517c2c..a961429 100644
--- a/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java
+++ b/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java
@@ -75,6 +75,8 @@
"\u4e2d\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u590f\u6642\u9593", "CEST"};
String CHAST[] = new String[] {"\u30c1\u30e3\u30bf\u30e0\u6a19\u6e96\u6642", "CHAST",
"\u30c1\u30e3\u30bf\u30e0\u590f\u6642\u9593", "CHADT"};
+ String ChST[] = new String[] {"\u30b0\u30a2\u30e0\u6a19\u6e96\u6642", "ChST",
+ "\u30b0\u30a2\u30e0\u590f\u6642\u9593", "ChDT"};
String CHUT[] = new String[] {"Chuuk Time", "CHUT",
"Chuuk Summer Time", "CHUST"};
String CIT[] = new String[] {"\u4e2d\u592e\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "CIT",
@@ -161,6 +163,8 @@
"Pohnpei Summer Time", "PONST"};
String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642", "PST",
"\u592a\u5e73\u6d0b\u590f\u6642\u9593", "PDT"};
+ String SAMOA[] = new String[] {"\u30b5\u30e2\u30a2\u6a19\u6e96\u6642", "SST",
+ "\u30b5\u30e2\u30a2\u590f\u6642\u9593", "SDT"};
String SAST[] = new String[] {"\u5357\u30a2\u30d5\u30ea\u30ab\u6a19\u6e96\u6642", "SAST",
"\u5357\u30a2\u30d5\u30ea\u30ab\u590f\u6642\u9593", "SAST"};
String SBT[] = new String[] {"\u30bd\u30ed\u30e2\u30f3\u8af8\u5cf6\u6642\u9593", "SBT",
@@ -175,6 +179,14 @@
"\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3\u590f\u6642\u9593", "TMST"};
String ULAT[]= new String[] {"\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u6642\u9593", "ULAT",
"\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u590f\u6642\u9593", "ULAST"};
+ String UTC[] = new String[] {"\u5354\u5b9a\u4e16\u754c\u6642", "UTC",
+ "\u5354\u5b9a\u4e16\u754c\u6642", "UTC"};
+ String UZT[] = new String[] {"\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u6642\u9593", "UZT",
+ "\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u590f\u6642\u9593", "UZST"};
+ String VICTORIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642 (\u30d3\u30af\u30c8\u30ea\u30a2)", "EST",
+ "\u6771\u90e8\u590f\u6642\u9593 (\u30d3\u30af\u30c8\u30ea\u30a2)", "EST"};
+ String VLAT[] = new String[] {"\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u6642\u9593", "VLAT",
+ "\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u590f\u6642\u9593", "VLAST"};
String WART[] = new String[] {"\u897f\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593", "WART",
"\u897f\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u590f\u6642\u9593", "WARST"};
String WAT[] = new String[] {"\u897f\u30a2\u30d5\u30ea\u30ab\u6642\u9593", "WAT",
@@ -185,18 +197,10 @@
"\u897f\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u590f\u6642\u9593", "WIST"};
String WST_AUS[] = new String[] {"\u897f\u90e8\u6a19\u6e96\u6642 (\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "WST",
"\u897f\u90e8\u590f\u6642\u9593 (\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "WST"};
- String SAMOA[] = new String[] {"\u30b5\u30e2\u30a2\u6a19\u6e96\u6642", "SST",
- "\u30b5\u30e2\u30a2\u590f\u6642\u9593", "SDT"};
String WST_SAMOA[] = new String[] {"\u897f\u30b5\u30e2\u30a2\u6642\u9593", "WST",
"\u897f\u30b5\u30e2\u30a2\u590f\u6642\u9593", "WSDT"};
- String ChST[] = new String[] {"\u30b0\u30a2\u30e0\u6a19\u6e96\u6642", "ChST",
- "\u30b0\u30a2\u30e0\u590f\u6642\u9593", "ChDT"};
- String VICTORIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642 (\u30d3\u30af\u30c8\u30ea\u30a2)", "EST",
- "\u6771\u90e8\u590f\u6642\u9593 (\u30d3\u30af\u30c8\u30ea\u30a2)", "EST"};
- String UTC[] = new String[] {"\u5354\u5b9a\u4e16\u754c\u6642", "UTC",
- "\u5354\u5b9a\u4e16\u754c\u6642", "UTC"};
- String UZT[] = new String[] {"\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u6642\u9593", "UZT",
- "\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u590f\u6642\u9593", "UZST"};
+ String YAKT[] = new String[] {"\u30e4\u30af\u30fc\u30c4\u30af\u6642\u9593", "YAKT",
+ "\u30e4\u30af\u30fc\u30c4\u30af\u590f\u6642\u9593", "YAKST"};
return new Object[][] {
{"America/Los_Angeles", PST},
@@ -287,7 +291,7 @@
{"Africa/Porto-Novo", WAT},
{"Africa/Sao_Tome", GMT},
{"Africa/Timbuktu", GMT},
- {"Africa/Tripoli", EET},
+ {"Africa/Tripoli", CET},
{"Africa/Tunis", CET},
{"Africa/Windhoek", WAT},
{"America/Adak", HAST},
@@ -533,6 +537,7 @@
{"Asia/Kashgar", CTT},
{"Asia/Kathmandu", NPT},
{"Asia/Katmandu", NPT},
+ {"Asia/Khandyga", YAKT},
{"Asia/Kolkata", IST},
{"Asia/Krasnoyarsk", new String[] {"\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u6642\u9593", "KRAT",
"\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u590f\u6642\u9593", "KRAST"}},
@@ -581,11 +586,10 @@
{"Asia/Ulaanbaatar", ULAT},
{"Asia/Ulan_Bator", ULAT},
{"Asia/Urumqi", CTT},
+ {"Asia/Ust-Nera", VLAT},
{"Asia/Vientiane", ICT},
- {"Asia/Vladivostok", new String[] {"\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u6642\u9593", "VLAT",
- "\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u590f\u6642\u9593", "VLAST"}},
- {"Asia/Yakutsk", new String[] {"\u30e4\u30af\u30fc\u30c4\u30af\u6642\u9593", "YAKT",
- "\u30e4\u30af\u30fc\u30c4\u30af\u590f\u6642\u9593", "YAKST"}},
+ {"Asia/Vladivostok", VLAT},
+ {"Asia/Yakutsk", YAKT},
{"Asia/Yekaterinburg", new String[] {"\u30a8\u30ab\u30c6\u30ea\u30f3\u30d6\u30eb\u30b0\u6642\u9593", "YEKT",
"\u30a8\u30ab\u30c6\u30ea\u30f3\u30d6\u30eb\u30b0\u590f\u6642\u9593", "YEKST"}},
{"Asia/Yerevan", ARMT},
@@ -669,6 +673,7 @@
{"Europe/Bratislava", CET},
{"Europe/Brussels", CET},
{"Europe/Budapest", CET},
+ {"Europe/Busingen", CET},
{"Europe/Chisinau", EET},
{"Europe/Copenhagen", CET},
{"Europe/Dublin", DUBLIN},
@@ -748,7 +753,7 @@
{"Jamaica", EST},
{"Japan", JST},
{"Kwajalein", MHT},
- {"Libya", EET},
+ {"Libya", CET},
{"MET", new String[] {"\u4e2d\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593", "MET",
"\u4e2d\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u590f\u6642\u9593", "MEST"}},
{"Mexico/BajaNorte", PST},
diff --git a/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java b/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java
index 9634939..8b82a5b 100644
--- a/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java
+++ b/jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java
@@ -75,6 +75,8 @@
"\uc911\uc559 \uc720\ub7fd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CEST"};
String CHAST[] = new String[] {"Chatham \ud45c\uc900\uc2dc", "CHAST",
"Chatham \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CHADT"};
+ String ChST[] = new String[] {"\ucc28\ubaa8\ub85c \ud45c\uc900\uc2dc", "ChST",
+ "\ucc28\ubaa8\ub85c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ChDT"};
String CHUT[] = new String[] {"Chuuk Time", "CHUT",
"Chuuk Summer Time", "CHUST"};
String CIT[] = new String[] {"\uc911\uc559 \uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "CIT",
@@ -161,6 +163,8 @@
"Pohnpei Summer Time", "PONST"};
String PST[] = new String[] {"\ud0dc\ud3c9\uc591 \ud45c\uc900\uc2dc", "PST",
"\ud0dc\ud3c9\uc591 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PDT"};
+ String SAMOA[] = new String[] {"\uc0ac\ubaa8\uc544 \ud45c\uc900\uc2dc", "SST",
+ "\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SDT"};
String SAST[] = new String[] {"\ub0a8\uc544\ud504\ub9ac\uce74 \ud45c\uc900\uc2dc", "SAST",
"\ub0a8\uc544\ud504\ub9ac\uce74 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SAST"};
String SBT[] = new String[] {"\uc194\ub85c\ubaac \uad70\ub3c4 \uc2dc\uac04", "SBT",
@@ -175,6 +179,14 @@
"\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TMST"};
String ULAT[]= new String[] {"\uc6b8\ub780\ubc14\ud0c0\ub974 \uc2dc\uac04", "ULAT",
"\uc6b8\ub780\ubc14\ud0c0\ub974 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ULAST"};
+ String UTC[] = new String[] {"\uc138\uacc4 \ud45c\uc900\uc2dc", "UTC",
+ "\uc138\uacc4 \ud45c\uc900\uc2dc", "UTC"};
+ String UZT[] = new String[] {"\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc2dc\uac04", "UZT",
+ "\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "UZST"};
+ String VICTORIA[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc(\ube45\ud1a0\ub9ac\uc544)", "EST",
+ "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ube45\ud1a0\ub9ac\uc544)", "EST"};
+ String VLAT[] = new String[] {"\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc2dc\uac04", "VLAT",
+ "\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VLAST"};
String WART[] = new String[] {"\uc11c\ubd80 \uc544\ub974\ud5e8\ud2f0\ub098 \uc2dc\uac04", "WART",
"\uc11c\ubd80 \uc544\ub974\ud5e8\ud2f0\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WARST"};
String WAT[] = new String[] {"\uc11c\ubd80 \uc544\ud504\ub9ac\uce74 \uc2dc\uac04", "WAT",
@@ -185,18 +197,10 @@
"\uc11c\uc778\ub3c4\ub124\uc2dc\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WIST"};
String WST_AUS[] = new String[] {"\uc11c\ubd80 \ud45c\uc900\uc2dc(\ud638\uc8fc)", "WST",
"\uc11c\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ud638\uc8fc)", "WST"};
- String SAMOA[] = new String[] {"\uc0ac\ubaa8\uc544 \ud45c\uc900\uc2dc", "SST",
- "\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SDT"};
String WST_SAMOA[] = new String[] {"\uc11c\uc0ac\ubaa8\uc544 \uc2dc\uac04", "WST",
"\uc11c\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WSDT"};
- String ChST[] = new String[] {"\ucc28\ubaa8\ub85c \ud45c\uc900\uc2dc", "ChST",
- "\ucc28\ubaa8\ub85c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ChDT"};
- String VICTORIA[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc(\ube45\ud1a0\ub9ac\uc544)", "EST",
- "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ube45\ud1a0\ub9ac\uc544)", "EST"};
- String UTC[] = new String[] {"\uc138\uacc4 \ud45c\uc900\uc2dc", "UTC",
- "\uc138\uacc4 \ud45c\uc900\uc2dc", "UTC"};
- String UZT[] = new String[] {"\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc2dc\uac04", "UZT",
- "\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "UZST"};
+ String YAKT[] = new String[] {"\uc57c\uce20\ud06c \uc2dc\uac04", "YAKT",
+ "\uc57c\uce20\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "YAKST"};
return new Object[][] {
{"America/Los_Angeles", PST},
@@ -287,7 +291,7 @@
{"Africa/Porto-Novo", WAT},
{"Africa/Sao_Tome", GMT},
{"Africa/Timbuktu", GMT},
- {"Africa/Tripoli", EET},
+ {"Africa/Tripoli", CET},
{"Africa/Tunis", CET},
{"Africa/Windhoek", WAT},
{"America/Adak", HAST},
@@ -533,6 +537,7 @@
{"Asia/Kashgar", CTT},
{"Asia/Kathmandu", NPT},
{"Asia/Katmandu", NPT},
+ {"Asia/Khandyga", YAKT},
{"Asia/Kolkata", IST},
{"Asia/Krasnoyarsk", new String[] {"\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc2dc\uac04", "KRAT",
"\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "KRAST"}},
@@ -581,11 +586,10 @@
{"Asia/Ulaanbaatar", ULAT},
{"Asia/Ulan_Bator", ULAT},
{"Asia/Urumqi", CTT},
+ {"Asia/Ust-Nera", VLAT},
{"Asia/Vientiane", ICT},
- {"Asia/Vladivostok", new String[] {"\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc2dc\uac04", "VLAT",
- "\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VLAST"}},
- {"Asia/Yakutsk", new String[] {"\uc57c\uce20\ud06c \uc2dc\uac04", "YAKT",
- "\uc57c\uce20\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "YAKST"}},
+ {"Asia/Vladivostok", VLAT},
+ {"Asia/Yakutsk", YAKT},
{"Asia/Yekaterinburg", new String[] {"\uc608\uce74\ud14c\ub9b0\ubc84\uadf8 \uc2dc\uac04", "YEKT",
"\uc608\uce74\ud14c\ub9b0\ubc84\uadf8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "YEKST"}},
{"Asia/Yerevan", ARMT},
@@ -669,6 +673,7 @@
{"Europe/Bratislava", CET},
{"Europe/Brussels", CET},
{"Europe/Budapest", CET},
+ {"Europe/Busingen", CET},
{"Europe/Chisinau", EET},
{"Europe/Copenhagen", CET},
{"Europe/Dublin", DUBLIN},
@@ -748,7 +753,7 @@
{"Jamaica", EST},
{"Japan", JST},
{"Kwajalein", MHT},
- {"Libya", EET},
+ {"Libya", CET},
{"MET", new String[] {"\uc911\ubd80 \uc720\ub7fd \uc2dc\uac04", "MET",
"\uc911\ubd80 \uc720\ub7fd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MEST"}},
{"Mexico/BajaNorte", PST},
diff --git a/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java b/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java
index 9b60214..8d5874a 100644
--- a/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java
+++ b/jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java
@@ -75,6 +75,8 @@
"Fuso hor\u00e1rio de ver\u00e3o da Europa Central", "CEST"};
String CHAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Chatham", "CHAST",
"Hor\u00e1rio de luz natural de Chatham", "CHADT"};
+ String ChST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Chamorro", "ChST",
+ "Hor\u00e1rio de luz natural de Chamorro", "ChDT"};
String CIT[] = new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Central", "CIT",
"Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Central", "CIST"};
String CLT[] = new String[] {"Fuso hor\u00e1rio do Chile", "CLT",
@@ -159,6 +161,8 @@
"Fuso hor\u00e1rio de ver\u00e3o de Pohnpei", "PONST"};
String PST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Pac\u00edfico", "PST",
"Hor\u00e1rio de luz natural do Pac\u00edfico", "PDT"};
+ String SAMOA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Samoa", "SST",
+ "Hor\u00e1rio de luz natural de Samoa", "SDT"};
String SAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da \u00c1frica do Sul", "SAST",
"Fuso hor\u00e1rio de ver\u00e3o da \u00c1frica do Sul", "SAST"};
String SBT[] = new String[] {"Fuso hor\u00e1rio das Ilhas Salom\u00e3o", "SBT",
@@ -175,6 +179,16 @@
"Fuso hor\u00e1rio de ver\u00e3o de Chuuk", "CHUST"};
String ULAT[]= new String[] {"Fuso hor\u00e1rio de Ulan Bator", "ULAT",
"Fuso hor\u00e1rio de ver\u00e3o de Ulan Bator", "ULAST"};
+ String UTC[] = new String[] {"Tempo universal coordenado", "UTC",
+ "Tempo universal coordenado", "UTC"};
+ String UZT[] = new String[] {"Fuso hor\u00e1rio do Uzbequist\u00e3o", "UZT",
+ "Fuso hor\u00e1rio de ver\u00e3o do Uzbequist\u00e3o", "UZST"};
+ String VICTORIA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Victoria)", "EST",
+ "Fuso hor\u00e1rio de ver\u00e3o oriental (Victoria)", "EST"};
+ String VLAT[] = new String[] {"Fuso hor\u00e1rio de Vladivostok", "VLAT",
+ "Fuso hor\u00e1rio de ver\u00e3o de Vladivostok", "VLAST"};
+ String WART[] = new String[] {"Fuso hor\u00e1rio da Argentina Ocidental", "WART",
+ "Fuso hor\u00e1rio de ver\u00e3o da Argentina Ocidental", "WARST"};
String WAT[] = new String[] {"Fuso hor\u00e1rio da \u00c1frica Ocidental", "WAT",
"Fuso hor\u00e1rio de ver\u00e3o da \u00c1frica Ocidental", "WAST"};
String WET[] = new String[] {"Fuso hor\u00e1rio da Europa Ocidental", "WET",
@@ -183,20 +197,10 @@
"Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Ocidental", "WIST"};
String WST_AUS[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o ocidental (Austr\u00e1lia)", "WST",
"Fuso hor\u00e1rio de ver\u00e3o ocidental (Austr\u00e1lia)", "WST"};
- String SAMOA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Samoa", "SST",
- "Hor\u00e1rio de luz natural de Samoa", "SDT"};
String WST_SAMOA[] = new String[] {"Fuso hor\u00e1rio de Samoa Ocidental", "WST",
"Fuso hor\u00e1rio de ver\u00e3o de Samoa Ocidental", "WSDT"};
- String ChST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Chamorro", "ChST",
- "Hor\u00e1rio de luz natural de Chamorro", "ChDT"};
- String VICTORIA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Victoria)", "EST",
- "Fuso hor\u00e1rio de ver\u00e3o oriental (Victoria)", "EST"};
- String UTC[] = new String[] {"Tempo universal coordenado", "UTC",
- "Tempo universal coordenado", "UTC"};
- String UZT[] = new String[] {"Fuso hor\u00e1rio do Uzbequist\u00e3o", "UZT",
- "Fuso hor\u00e1rio de ver\u00e3o do Uzbequist\u00e3o", "UZST"};
- String WART[] = new String[] {"Fuso hor\u00e1rio da Argentina Ocidental", "WART",
- "Fuso hor\u00e1rio de ver\u00e3o da Argentina Ocidental", "WARST"};
+ String YAKT[] = new String[] {"Fuso hor\u00e1rio de Yakutsk", "YAKT",
+ "Fuso hor\u00e1rio de ver\u00e3o de Yakutsk", "YAKST"};
return new Object[][] {
{"America/Los_Angeles", PST},
@@ -287,7 +291,7 @@
{"Africa/Porto-Novo", WAT},
{"Africa/Sao_Tome", GMT},
{"Africa/Timbuktu", GMT},
- {"Africa/Tripoli", EET},
+ {"Africa/Tripoli", CET},
{"Africa/Tunis", CET},
{"Africa/Windhoek", WAT},
{"America/Adak", HAST},
@@ -533,6 +537,7 @@
{"Asia/Kashgar", CTT},
{"Asia/Kathmandu", NPT},
{"Asia/Katmandu", NPT},
+ {"Asia/Khandyga", YAKT},
{"Asia/Kolkata", IST},
{"Asia/Krasnoyarsk", new String[] {"Fuso hor\u00e1rio de Krasnoyarsk", "KRAT",
"Fuso hor\u00e1rio de ver\u00e3o de Krasnoyarsk", "KRAST"}},
@@ -581,11 +586,10 @@
{"Asia/Ulaanbaatar", ULAT},
{"Asia/Ulan_Bator", ULAT},
{"Asia/Urumqi", CTT},
+ {"Asia/Ust-Nera", VLAT},
{"Asia/Vientiane", ICT},
- {"Asia/Vladivostok", new String[] {"Fuso hor\u00e1rio de Vladivostok", "VLAT",
- "Fuso hor\u00e1rio de ver\u00e3o de Vladivostok", "VLAST"}},
- {"Asia/Yakutsk", new String[] {"Fuso hor\u00e1rio de Yakutsk", "YAKT",
- "Fuso hor\u00e1rio de ver\u00e3o de Yakutsk", "YAKST"}},
+ {"Asia/Vladivostok", VLAT},
+ {"Asia/Yakutsk", YAKT},
{"Asia/Yekaterinburg", new String[] {"Fuso hor\u00e1rio de Yekaterinburgo", "YEKT",
"Fuso hor\u00e1rio de ver\u00e3o de Yekaterinburgo", "YEKST"}},
{"Asia/Yerevan", ARMT},
@@ -669,6 +673,7 @@
{"Europe/Bratislava", CET},
{"Europe/Brussels", CET},
{"Europe/Budapest", CET},
+ {"Europe/Busingen", CET},
{"Europe/Chisinau", EET},
{"Europe/Copenhagen", CET},
{"Europe/Dublin", DUBLIN},
@@ -748,7 +753,7 @@
{"Jamaica", EST},
{"Japan", JST},
{"Kwajalein", MHT},
- {"Libya", EET},
+ {"Libya", CET},
{"MET", new String[] {"Fuso hor\u00e1rio da Europa M\u00e9dia", "MET",
"Fuso hor\u00e1rio de ver\u00e3o da Europa M\u00e9dia", "MEST"}},
{"Mexico/BajaNorte", PST},
diff --git a/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java b/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java
index 182359d..8ccbd37 100644
--- a/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java
+++ b/jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java
@@ -75,6 +75,8 @@
"Centraleuropeisk sommartid", "CEST"};
String CHAST[] = new String[] {"Chatham, normaltid", "CHAST",
"Chatham, sommartid", "CHADT"};
+ String ChST[] = new String[] {"Chamorro, normaltid", "ChST",
+ "Chamorro, sommartid", "ChDT"};
String CHUT[] = new String[] {"Chuuk Time", "CHUT",
"Chuuk Summer Time", "CHUST"};
String CIT[] = new String[] {"Centralindonesisk tid", "CIT",
@@ -161,6 +163,8 @@
"Pohnpei Summer Time", "PONST"};
String PST[] = new String[] {"Stilla havet, normaltid", "PST",
"Stilla havet, sommartid", "PDT"};
+ String SAMOA[] = new String[] {"Samoa, normaltid", "SST",
+ "Samoa, sommartid", "SDT"};
String SAST[] = new String[] {"Sydafrika, normaltid", "SAST",
"Sydafrika, sommartid", "SAST"};
String SBT[] = new String[] {"Salomon\u00f6arna, normaltid", "SBT",
@@ -175,6 +179,14 @@
"Turkmenistan, sommartid", "TMST"};
String ULAT[]= new String[] {"Ulaanbaatar, normaltid", "ULAT",
"Ulaanbaatar, sommartid", "ULAST"};
+ String UTC[] = new String[] {"Koordinerad universell tid", "UTC",
+ "Koordinerad universell tid", "UTC"};
+ String UZT[] = new String[] {"Uzbekistan, normaltid", "UZT",
+ "Uzbekistan, sommartid", "UZST"};
+ String VICTORIA[] = new String[] {"\u00d6stlig normaltid (Victoria)", "EST",
+ "\u00d6stlig sommartid (Victoria)", "EST"};
+ String VLAT[] = new String[] {"Vladivostok, normaltid", "VLAT",
+ "Vladivostok, sommartid", "VLAST"};
String WART[] = new String[] {"V\u00e4stargentina, normaltid", "WART",
"V\u00e4stargentina, sommartid", "WARST"};
String WAT[] = new String[] {"V\u00e4stafrikansk tid", "WAT",
@@ -185,18 +197,10 @@
"V\u00e4stindonesisk sommartid", "WIST"};
String WST_AUS[] = new String[] {"V\u00e4stlig normaltid (Australien)", "WST",
"V\u00e4stlig sommartid (Australien)", "WST"};
- String SAMOA[] = new String[] {"Samoa, normaltid", "SST",
- "Samoa, sommartid", "SDT"};
String WST_SAMOA[] = new String[] {"V\u00e4stsamoansk tid", "WST",
"V\u00e4stsamoansk sommartid", "WSDT"};
- String ChST[] = new String[] {"Chamorro, normaltid", "ChST",
- "Chamorro, sommartid", "ChDT"};
- String VICTORIA[] = new String[] {"\u00d6stlig normaltid (Victoria)", "EST",
- "\u00d6stlig sommartid (Victoria)", "EST"};
- String UTC[] = new String[] {"Koordinerad universell tid", "UTC",
- "Koordinerad universell tid", "UTC"};
- String UZT[] = new String[] {"Uzbekistan, normaltid", "UZT",
- "Uzbekistan, sommartid", "UZST"};
+ String YAKT[] = new String[] {"Jakutsk, normaltid", "YAKT",
+ "Jakutsk, sommartid", "YAKST"};
return new Object[][] {
{"America/Los_Angeles", PST},
@@ -287,7 +291,7 @@
{"Africa/Porto-Novo", WAT},
{"Africa/Sao_Tome", GMT},
{"Africa/Timbuktu", GMT},
- {"Africa/Tripoli", EET},
+ {"Africa/Tripoli", CET},
{"Africa/Tunis", CET},
{"Africa/Windhoek", WAT},
{"America/Adak", HAST},
@@ -533,6 +537,7 @@
{"Asia/Kashgar", CTT},
{"Asia/Kathmandu", NPT},
{"Asia/Katmandu", NPT},
+ {"Asia/Khandyga", YAKT},
{"Asia/Kolkata", IST},
{"Asia/Krasnoyarsk", new String[] {"Krasnojarsk, normaltid", "KRAT",
"Krasnojarsk, sommartid", "KRAST"}},
@@ -581,11 +586,10 @@
{"Asia/Ulaanbaatar", ULAT},
{"Asia/Ulan_Bator", ULAT},
{"Asia/Urumqi", CTT},
+ {"Asia/Ust-Nera", VLAT},
{"Asia/Vientiane", ICT},
- {"Asia/Vladivostok", new String[] {"Vladivostok, normaltid", "VLAT",
- "Vladivostok, sommartid", "VLAST"}},
- {"Asia/Yakutsk", new String[] {"Jakutsk, normaltid", "YAKT",
- "Jakutsk, sommartid", "YAKST"}},
+ {"Asia/Vladivostok", VLAT},
+ {"Asia/Yakutsk", YAKT},
{"Asia/Yekaterinburg", new String[] {"Jekaterinburg, normaltid", "YEKT",
"Jekaterinburg, sommartid", "YEKST"}},
{"Asia/Yerevan", ARMT},
@@ -669,6 +673,7 @@
{"Europe/Bratislava", CET},
{"Europe/Brussels", CET},
{"Europe/Budapest", CET},
+ {"Europe/Busingen", CET},
{"Europe/Chisinau", EET},
{"Europe/Copenhagen", CET},
{"Europe/Dublin", DUBLIN},
@@ -748,7 +753,7 @@
{"Jamaica", EST},
{"Japan", JST},
{"Kwajalein", MHT},
- {"Libya", EET},
+ {"Libya", CET},
{"MET", new String[] {"Mellaneuropeisk tid", "MET",
"Mellaneuropeisk sommartid", "MEST"}},
{"Mexico/BajaNorte", PST},
diff --git a/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java b/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java
index fb9f4bd..657faf5 100644
--- a/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java
+++ b/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java
@@ -75,6 +75,8 @@
"\u4e2d\u6b27\u590f\u4ee4\u65f6", "CEST"};
String CHAST[] = new String[] {"\u67e5\u8428\u59c6\u6807\u51c6\u65f6\u95f4", "CHAST",
"\u67e5\u8428\u59c6\u590f\u4ee4\u65f6", "CHADT"};
+ String ChST[] = new String[] {"Chamorro \u6807\u51c6\u65f6\u95f4", "ChST",
+ "Chamorro \u590f\u4ee4\u65f6", "ChDT"};
String CHUT[] = new String[] {"Chuuk Time", "CHUT",
"Chuuk Summer Time", "CHUST"};
String CIT[] = new String[] {"\u4e2d\u90e8\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "CIT",
@@ -161,6 +163,8 @@
"Pohnpei Summer Time", "PONST"};
String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6807\u51c6\u65f6\u95f4", "PST",
"\u592a\u5e73\u6d0b\u590f\u4ee4\u65f6", "PDT"};
+ String SAMOA[] = new String[] {"\u8428\u6469\u4e9a\u7fa4\u5c9b\u6807\u51c6\u65f6\u95f4", "SST",
+ "\u8428\u6469\u4e9a\u7fa4\u5c9b\u590f\u4ee4\u65f6", "SDT"};
String SAST[] = new String[] {"\u5357\u975e\u6807\u51c6\u65f6\u95f4", "SAST",
"\u5357\u975e\u590f\u4ee4\u65f6", "SAST"};
String SBT[] = new String[] {"\u6240\u7f57\u95e8\u7fa4\u5c9b\u65f6\u95f4", "SBT",
@@ -175,6 +179,14 @@
"\u571f\u5e93\u66fc\u590f\u4ee4\u65f6", "TMST"};
String ULAT[]= new String[] {"\u5e93\u4f26\u65f6\u95f4", "ULAT",
"\u5e93\u4f26\u590f\u4ee4\u65f6", "ULAST"};
+ String UTC[] = new String[] {"\u534f\u8c03\u4e16\u754c\u65f6\u95f4", "UTC",
+ "\u534f\u8c03\u4e16\u754c\u65f6\u95f4", "UTC"};
+ String UZT[] = new String[] {"\u4e4c\u5179\u522b\u514b\u65af\u5766\u65f6\u95f4", "UZT",
+ "\u4e4c\u5179\u522b\u514b\u65af\u5766\u590f\u4ee4\u65f6", "UZST"};
+ String VICTORIA[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u7ef4\u591a\u5229\u4e9a\uff09", "EST",
+ "\u4e1c\u90e8\u590f\u4ee4\u65f6\uff08\u7ef4\u591a\u5229\u4e9a\uff09", "EST"};
+ String VLAT[] = new String[] {"\u6d77\u53c2\u5d34\u65f6\u95f4", "VLAT",
+ "\u6d77\u53c2\u5d34\u590f\u4ee4\u65f6", "VLAST"};
String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u65f6\u95f4", "WART",
"\u897f\u963f\u6839\u5ef7\u590f\u4ee4\u65f6", "WARST"};
String WAT[] = new String[] {"\u897f\u975e\u65f6\u95f4", "WAT",
@@ -185,18 +197,10 @@
"\u897f\u5370\u5ea6\u5c3c\u897f\u4e9a\u590f\u4ee4\u65f6", "WIST"};
String WST_AUS[] = new String[] {"\u897f\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u6fb3\u5927\u5229\u4e9a\uff09", "WST",
"\u897f\u90e8\u590f\u4ee4\u65f6\uff08\u6fb3\u5927\u5229\u4e9a\uff09", "WST"};
- String SAMOA[] = new String[] {"\u8428\u6469\u4e9a\u7fa4\u5c9b\u6807\u51c6\u65f6\u95f4", "SST",
- "\u8428\u6469\u4e9a\u7fa4\u5c9b\u590f\u4ee4\u65f6", "SDT"};
String WST_SAMOA[] = new String[] {"\u897f\u8428\u6469\u4e9a\u65f6\u95f4", "WST",
"\u897f\u8428\u6469\u4e9a\u590f\u4ee4\u65f6", "WSDT"};
- String ChST[] = new String[] {"Chamorro \u6807\u51c6\u65f6\u95f4", "ChST",
- "Chamorro \u590f\u4ee4\u65f6", "ChDT"};
- String VICTORIA[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u7ef4\u591a\u5229\u4e9a\uff09", "EST",
- "\u4e1c\u90e8\u590f\u4ee4\u65f6\uff08\u7ef4\u591a\u5229\u4e9a\uff09", "EST"};
- String UTC[] = new String[] {"\u534f\u8c03\u4e16\u754c\u65f6\u95f4", "UTC",
- "\u534f\u8c03\u4e16\u754c\u65f6\u95f4", "UTC"};
- String UZT[] = new String[] {"\u4e4c\u5179\u522b\u514b\u65af\u5766\u65f6\u95f4", "UZT",
- "\u4e4c\u5179\u522b\u514b\u65af\u5766\u590f\u4ee4\u65f6", "UZST"};
+ String YAKT[] = new String[] {"\u4e9a\u5e93\u6b21\u514b\u65f6\u95f4", "YAKT",
+ "\u4e9a\u5e93\u6b21\u514b\u590f\u4ee4\u65f6", "YAKST"};
return new Object[][] {
{"America/Los_Angeles", PST},
@@ -287,7 +291,7 @@
{"Africa/Porto-Novo", WAT},
{"Africa/Sao_Tome", GMT},
{"Africa/Timbuktu", GMT},
- {"Africa/Tripoli", EET},
+ {"Africa/Tripoli", CET},
{"Africa/Tunis", CET},
{"Africa/Windhoek", WAT},
{"America/Adak", HAST},
@@ -533,6 +537,7 @@
{"Asia/Kashgar", CTT},
{"Asia/Kathmandu", NPT},
{"Asia/Katmandu", NPT},
+ {"Asia/Khandyga", YAKT},
{"Asia/Kolkata", IST},
{"Asia/Krasnoyarsk", new String[] {"\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u65f6\u95f4", "KRAT",
"\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u590f\u4ee4\u65f6", "KRAST"}},
@@ -581,11 +586,10 @@
{"Asia/Ulaanbaatar", ULAT},
{"Asia/Ulan_Bator", ULAT},
{"Asia/Urumqi", CTT},
+ {"Asia/Ust-Nera", VLAT},
{"Asia/Vientiane", ICT},
- {"Asia/Vladivostok", new String[] {"\u6d77\u53c2\u5d34\u65f6\u95f4", "VLAT",
- "\u6d77\u53c2\u5d34\u590f\u4ee4\u65f6", "VLAST"}},
- {"Asia/Yakutsk", new String[] {"\u4e9a\u5e93\u6b21\u514b\u65f6\u95f4", "YAKT",
- "\u4e9a\u5e93\u6b21\u514b\u590f\u4ee4\u65f6", "YAKST"}},
+ {"Asia/Vladivostok", VLAT},
+ {"Asia/Yakutsk", YAKT},
{"Asia/Yekaterinburg", new String[] {"Yekaterinburg \u65f6\u95f4", "YEKT",
"Yekaterinburg \u590f\u4ee4\u65f6", "YEKST"}},
{"Asia/Yerevan", ARMT},
@@ -669,6 +673,7 @@
{"Europe/Bratislava", CET},
{"Europe/Brussels", CET},
{"Europe/Budapest", CET},
+ {"Europe/Busingen", CET},
{"Europe/Chisinau", EET},
{"Europe/Copenhagen", CET},
{"Europe/Dublin", DUBLIN},
@@ -748,7 +753,7 @@
{"Jamaica", EST},
{"Japan", JST},
{"Kwajalein", MHT},
- {"Libya", EET},
+ {"Libya", CET},
{"MET", new String[] {"\u4e2d\u6b27\u65f6\u95f4", "MET",
"\u4e2d\u6b27\u590f\u4ee4\u65f6", "MEST"}},
{"Mexico/BajaNorte", PST},
diff --git a/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java b/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java
index d176684..6317044 100644
--- a/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java
+++ b/jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java
@@ -75,6 +75,8 @@
"\u4e2d\u6b50\u590f\u4ee4\u6642\u9593", "CEST"};
String CHAST[] = new String[] {"\u67e5\u5766\u6a19\u6e96\u6642\u9593", "CHAST",
"\u67e5\u5766\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CHADT"};
+ String ChST[] = new String[] {"\u67e5\u83ab\u6d1b\u6a19\u6e96\u6642\u9593", "ChST",
+ "\u67e5\u83ab\u6d1b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "ChDT"};
String CHUT[] = new String[] {"Chuuk Time", "CHUT",
"Chuuk Summer Time", "CHUST"};
String CIT[] = new String[] {"\u4e2d\u5370\u5ea6\u5c3c\u897f\u4e9e\u6642\u9593", "CIT",
@@ -161,6 +163,8 @@
"Pohnpei Summer Time", "PONST"};
String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642\u9593", "PST",
"\u592a\u5e73\u6d0b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PDT"};
+ String SAMOA[] = new String[] {"\u85a9\u6469\u4e9e\u6a19\u6e96\u6642\u9593", "SST",
+ "\u85a9\u6469\u4e9e\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "SDT"};
String SAST[] = new String[] {"\u5357\u975e\u6a19\u6e96\u6642\u9593", "SAST",
"\u5357\u975e\u590f\u4ee4\u6642\u9593", "SAST"};
String SBT[] = new String[] {"\u6240\u7f85\u9580\u7fa4\u5cf6\u6642\u9593", "SBT",
@@ -175,7 +179,15 @@
"\u571f\u5eab\u66fc\u590f\u4ee4\u6642\u9593", "TMST"};
String ULAT[]= new String[] {"\u5eab\u502b\u6642\u9593", "ULAT",
"\u5eab\u502b\u590f\u4ee4\u6642\u9593", "ULAST"};
- String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u6642\u9593", "WART",
+ String UTC[] = new String[] {"\u5354\u8abf\u4e16\u754c\u6642\u9593", "UTC",
+ "\u5354\u8abf\u4e16\u754c\u6642\u9593", "UTC"};
+ String UZT[] = new String[] {"\u70cf\u8332\u5225\u514b\u65af\u5766\u6642\u9593", "UZT",
+ "\u70cf\u8332\u5225\u514b\u65af\u5766\u590f\u4ee4\u6642\u9593", "UZST"};
+ String VICTORIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642\u9593 (\u7dad\u591a\u5229\u4e9e\u90a6)", "EST",
+ "\u6771\u90e8\u590f\u4ee4\u6642\u9593 (\u7dad\u591a\u5229\u4e9e\u90a6)", "EST"};
+ String VLAT[] = new String[] {"\u6d77\u53c3\u5d34\u6642\u9593", "VLAT",
+ "\u6d77\u53c3\u5d34\u590f\u4ee4\u6642\u9593", "VLAST"};
+ String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u6642\u9593", "WART",
"\u897f\u963f\u6839\u5ef7\u590f\u4ee4\u6642\u9593", "WARST"};
String WAT[] = new String[] {"\u897f\u975e\u6642\u9593", "WAT",
"\u897f\u975e\u590f\u4ee4\u6642\u9593", "WAST"};
@@ -185,18 +197,10 @@
"\u897f\u5370\u5c3c\u590f\u4ee4\u6642\u9593", "WIST"};
String WST_AUS[] = new String[] {"\u897f\u65b9\u6a19\u6e96\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e)", "WST",
"\u897f\u65b9\u590f\u4ee4\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e)", "WST"};
- String SAMOA[] = new String[] {"\u85a9\u6469\u4e9e\u6a19\u6e96\u6642\u9593", "SST",
- "\u85a9\u6469\u4e9e\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "SDT"};
String WST_SAMOA[] = new String[] {"\u897f\u85a9\u6469\u4e9e\u6642\u9593", "WST",
"\u897f\u85a9\u6469\u4e9e\u590f\u4ee4\u6642\u9593", "WSDT"};
- String ChST[] = new String[] {"\u67e5\u83ab\u6d1b\u6a19\u6e96\u6642\u9593", "ChST",
- "\u67e5\u83ab\u6d1b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "ChDT"};
- String VICTORIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642\u9593 (\u7dad\u591a\u5229\u4e9e\u90a6)", "EST",
- "\u6771\u90e8\u590f\u4ee4\u6642\u9593 (\u7dad\u591a\u5229\u4e9e\u90a6)", "EST"};
- String UTC[] = new String[] {"\u5354\u8abf\u4e16\u754c\u6642\u9593", "UTC",
- "\u5354\u8abf\u4e16\u754c\u6642\u9593", "UTC"};
- String UZT[] = new String[] {"\u70cf\u8332\u5225\u514b\u65af\u5766\u6642\u9593", "UZT",
- "\u70cf\u8332\u5225\u514b\u65af\u5766\u590f\u4ee4\u6642\u9593", "UZST"};
+ String YAKT[] = new String[] {"\u4e9e\u5eab\u6b21\u514b\u6642\u9593", "YAKT",
+ "\u4e9e\u5eab\u6b21\u514b\u590f\u4ee4\u6642\u9593", "YAKST"};
return new Object[][] {
{"America/Los_Angeles", PST},
@@ -287,7 +291,7 @@
{"Africa/Porto-Novo", WAT},
{"Africa/Sao_Tome", GMT},
{"Africa/Timbuktu", GMT},
- {"Africa/Tripoli", EET},
+ {"Africa/Tripoli", CET},
{"Africa/Tunis", CET},
{"Africa/Windhoek", WAT},
{"America/Adak", HAST},
@@ -533,6 +537,7 @@
{"Asia/Kashgar", CTT},
{"Asia/Kathmandu", NPT},
{"Asia/Katmandu", NPT},
+ {"Asia/Khandyga", YAKT},
{"Asia/Kolkata", IST},
{"Asia/Krasnoyarsk", new String[] {"\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u6642\u9593", "KRAT",
"\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u590f\u4ee4\u6642\u9593", "KRAST"}},
@@ -582,11 +587,10 @@
{"Asia/Ulaanbaatar", ULAT},
{"Asia/Ulan_Bator", ULAT},
{"Asia/Urumqi", CTT},
+ {"Asia/Ust-Nera", VLAT},
{"Asia/Vientiane", ICT},
- {"Asia/Vladivostok", new String[] {"\u6d77\u53c3\u5d34\u6642\u9593", "VLAT",
- "\u6d77\u53c3\u5d34\u590f\u4ee4\u6642\u9593", "VLAST"}},
- {"Asia/Yakutsk", new String[] {"\u4e9e\u5eab\u6b21\u514b\u6642\u9593", "YAKT",
- "\u4e9e\u5eab\u6b21\u514b\u590f\u4ee4\u6642\u9593", "YAKST"}},
+ {"Asia/Vladivostok", VLAT},
+ {"Asia/Yakutsk", YAKT},
{"Asia/Yekaterinburg", new String[] {"Yekaterinburg \u6642\u9593", "YEKT",
"Yekaterinburg \u590f\u4ee4\u6642\u9593", "YEKST"}},
{"Asia/Yerevan", ARMT},
@@ -670,6 +674,7 @@
{"Europe/Bratislava", CET},
{"Europe/Brussels", CET},
{"Europe/Budapest", CET},
+ {"Europe/Busingen", CET},
{"Europe/Chisinau", EET},
{"Europe/Copenhagen", CET},
{"Europe/Dublin", DUBLIN},
@@ -749,7 +754,7 @@
{"Jamaica", EST},
{"Japan", JST},
{"Kwajalein", MHT},
- {"Libya", EET},
+ {"Libya", CET},
{"MET", new String[] {"\u4e2d\u6b50\u6642\u9593", "MET",
"\u4e2d\u6b50\u590f\u4ee4\u6642\u9593", "MEST"}},
{"Mexico/BajaNorte", PST},
diff --git a/jdk/src/solaris/native/java/net/NetworkInterface.c b/jdk/src/solaris/native/java/net/NetworkInterface.c
index ad6a0b6..9ebea2b 100644
--- a/jdk/src/solaris/native/java/net/NetworkInterface.c
+++ b/jdk/src/solaris/native/java/net/NetworkInterface.c
@@ -1129,7 +1129,7 @@
uint8_t ipv6addr[16];
if ((f = fopen(_PATH_PROCNET_IFINET6, "r")) != NULL) {
- while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %02x %02x %02x %02x %20s\n",
+ while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %08x %02x %02x %02x %20s\n",
addr6p[0], addr6p[1], addr6p[2], addr6p[3], addr6p[4], addr6p[5], addr6p[6], addr6p[7],
&if_idx, &plen, &scope, &dad_status, devname) != EOF) {
diff --git a/jdk/test/sun/awt/datatransfer/SuplementaryCharactersTransferTest.java b/jdk/test/sun/awt/datatransfer/SuplementaryCharactersTransferTest.java
new file mode 100644
index 0000000..75f6349
--- /dev/null
+++ b/jdk/test/sun/awt/datatransfer/SuplementaryCharactersTransferTest.java
@@ -0,0 +1,165 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ @bug 6877495
+ @summary JTextField and JTextArea does not support supplementary characters
+ @author Alexander Scherbatiy
+ @run main SuplementaryCharactersTransferTest
+*/
+
+
+import java.io.*;
+import java.util.*;
+import java.awt.*;
+import java.awt.datatransfer.*;
+import sun.awt.datatransfer.*;
+import sun.awt.datatransfer.DataTransferer.ReencodingInputStream;
+
+public class SuplementaryCharactersTransferTest {
+
+ public static final long TEXT_FORMAT = 13;
+
+ public static void main(String[] args) throws Exception {
+
+ DataTransferer dataTransferer = new TestDataTransferer();
+ dataTransferer.registerTextFlavorProperties("UNICODE TEXT", "utf-16le", "\r\n", "2");
+ ByteTransferable transferable = new ByteTransferable();
+ ReencodingInputStream is = dataTransferer.new ReencodingInputStream(transferable.getByteInputStream(), TEXT_FORMAT,
+ DataTransferer.getTextCharset(transferable.getDataFlavor()), transferable);
+
+ byte[] bytes = transferable.getBytes();
+ byte[] result = new byte[bytes.length];
+
+ is.read(result);
+
+ for (int i = 0; i < bytes.length; i++) {
+ if (bytes[i] != result[i]) {
+ throw new RuntimeException("Characters are not equal!");
+ }
+ }
+
+ }
+
+ static class ByteTransferable implements Transferable, ClipboardOwner {
+
+ private final DataFlavor dataFlavor;
+
+ public ByteTransferable() throws Exception {
+ dataFlavor = DataFlavor.getTextPlainUnicodeFlavor();
+ }
+
+ public DataFlavor getDataFlavor() {
+ return dataFlavor;
+ }
+
+ public DataFlavor[] getTransferDataFlavors() {
+ return new DataFlavor[]{dataFlavor};
+ }
+
+ public boolean isDataFlavorSupported(DataFlavor flavor) {
+ return flavor.equals(dataFlavor);
+ }
+
+ public byte[] getBytes() {
+ return new byte[]{97, 0, 64, -40, 32, -36, 98, 0};
+ }
+
+ public InputStream getByteInputStream() {
+ return new ByteArrayInputStream(getBytes());
+ }
+
+ public Object getTransferData(DataFlavor flavor)
+ throws UnsupportedFlavorException, IOException {
+ if (flavor.equals(dataFlavor)) {
+ return getByteInputStream();
+ } else {
+ throw new UnsupportedFlavorException(flavor);
+ }
+ }
+
+ public void lostOwnership(Clipboard clipboard, Transferable contents) {
+ }
+ }
+
+ static class TestDataTransferer extends DataTransferer {
+
+ @Override
+ public String getDefaultUnicodeEncoding() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public boolean isLocaleDependentTextFormat(long format) {
+ return false;
+ }
+
+ @Override
+ public boolean isFileFormat(long format) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public boolean isImageFormat(long format) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ protected Long getFormatForNativeAsLong(String str) {
+ return TEXT_FORMAT;
+ }
+
+ @Override
+ protected String getNativeForFormat(long format) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ protected ByteArrayOutputStream convertFileListToBytes(
+ ArrayList<String> fileList) throws IOException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ protected String[] dragQueryFile(byte[] bytes) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ protected Image platformImageBytesOrStreamToImage(InputStream str,
+ byte[] bytes, long format) throws IOException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ protected byte[] imageToPlatformBytes(Image image, long format)
+ throws IOException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public ToolkitThreadBlockedHandler getToolkitThreadBlockedHandler() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+ }
+}
\ No newline at end of file
diff --git a/jdk/test/sun/security/tools/jarsigner/TimestampCheck.java b/jdk/test/sun/security/tools/jarsigner/TimestampCheck.java
index 208f519..85ab156 100644
--- a/jdk/test/sun/security/tools/jarsigner/TimestampCheck.java
+++ b/jdk/test/sun/security/tools/jarsigner/TimestampCheck.java
@@ -129,6 +129,9 @@
DerOutputStream statusInfo = new DerOutputStream();
statusInfo.putInteger(0);
+ DerOutputStream statusStrings = new DerOutputStream();
+ statusStrings.putUTF8String("Status for " + path);
+ statusInfo.write(DerValue.tag_Sequence, statusStrings);
DerOutputStream token = new DerOutputStream();
AlgorithmId[] algorithms = {aid};
diff --git a/jdk/test/tools/launcher/Arrrghs.java b/jdk/test/tools/launcher/Arrrghs.java
index 22af185..2c24a99 100644
--- a/jdk/test/tools/launcher/Arrrghs.java
+++ b/jdk/test/tools/launcher/Arrrghs.java
@@ -27,7 +27,7 @@
* 6894719 6968053 7151434 7146424
* @summary Argument parsing validation.
* @compile -XDignore.symbol.file Arrrghs.java
- * @run main Arrrghs
+ * @run main/othervm Arrrghs
*/
import java.io.BufferedReader;
@@ -205,8 +205,7 @@
// exiting the process prematurely can terminate the stderr.
scratchpad.add(javaCmd + " -version " + inArgs);
File batFile = new File("atest.bat");
- java.nio.file.Files.deleteIfExists(batFile.toPath());
- createFile(batFile, scratchpad);
+ createAFile(batFile, scratchpad);
TestResult tr = doExec(batFile.getName());
diff --git a/jdk/test/tools/launcher/TestHelper.java b/jdk/test/tools/launcher/TestHelper.java
index 0b2b720..b499026 100644
--- a/jdk/test/tools/launcher/TestHelper.java
+++ b/jdk/test/tools/launcher/TestHelper.java
@@ -332,6 +332,51 @@
Files.copy(src.toPath(), dst.toPath(), COPY_ATTRIBUTES, REPLACE_EXISTING);
}
+ /**
+ * Attempt to create a file at the given location. If an IOException
+ * occurs then back off for a moment and try again. When a number of
+ * attempts fail, give up and throw an exception.
+ */
+ void createAFile(File aFile, List<String> contents) throws IOException {
+ IOException cause = null;
+ for (int attempts = 0; attempts < 10; attempts++) {
+ try {
+ Files.write(aFile.getAbsoluteFile().toPath(), contents,
+ Charset.defaultCharset(), CREATE, TRUNCATE_EXISTING, WRITE);
+ if (cause != null) {
+ /*
+ * report attempts and errors that were encountered
+ * for diagnostic purposes
+ */
+ System.err.println("Created batch file " +
+ aFile + " in " + (attempts + 1) +
+ " attempts");
+ System.err.println("Errors encountered: " + cause);
+ cause.printStackTrace();
+ }
+ return;
+ } catch (IOException ioe) {
+ if (cause != null) {
+ // chain the exceptions so they all get reported for diagnostics
+ cause.addSuppressed(ioe);
+ } else {
+ cause = ioe;
+ }
+ }
+
+ try {
+ Thread.sleep(500);
+ } catch (InterruptedException ie) {
+ if (cause != null) {
+ // cause should alway be non-null here
+ ie.addSuppressed(cause);
+ }
+ throw new RuntimeException("Interrupted while creating batch file", ie);
+ }
+ }
+ throw new RuntimeException("Unable to create batch file", cause);
+ }
+
static void createFile(File outFile, List<String> content) throws IOException {
Files.write(outFile.getAbsoluteFile().toPath(), content,
Charset.defaultCharset(), CREATE_NEW);
diff --git a/langtools/.hgtags b/langtools/.hgtags
index 080fc86..bdaa9be 100644
--- a/langtools/.hgtags
+++ b/langtools/.hgtags
@@ -257,3 +257,4 @@
edfcf07c2877af8efa649e514167b22b7f6fc0b4 jdk7u17-b01
2782a1c60faf7585dee0af0ef585aeed3288e521 jdk7u17-b02
cf80c545434cfe44034e667079673ce42cc9cdbf jdk7u14-b16
+aecd58f25d7f21827ae1b020ae8cfb44857c439f jdk7u14-b17